Dans ce nouveau tuto, je vais vous proposer de créer des ombres portées dynamiques.
Mais pas n'importe lesquelles ; Celle qu'on peut avoir avec la lampe torche de HL2 Episode 2.

Les ombres portées dynamiques : Enfin un vrai ajout au moteur poussiéreux qu'est Source Engine.
En effet, si vous avez de bons yeux, vous remarquerez que malgré le changement de moteur,
vos petits light_spot ne font toujours pas d'ombres portées dynamiques à proprement parler.
NE VOUS INQUIÉTEZ PAS ! C'est normal ! Il se trouve qu'une nouvelle entité de lumière a été créée pour mon notre plus grand plaisir !
J'ai nommé :
Env_projectedtexture
Alors, sous ce nom barbare qui laisse entendre pleins de choses pour nos esprits imaginatifs et inventifs selon les cas, se
cache un dérivé de light_spot en moins maniable.
Je m'explique :
Tout d'abord, l'entité se présente sous la forme d'un cube (voir image).

Jusque là, pas de quoi se taper le cul par terre.
Là où va se présenter la subtilité du truc, c'est au niveau de la tronche du rayon lumineux.
En effet, c'est une pyramide régulière (voir image).

Pour ce qui est de l'orientation de l'entité aussi, il va falloir oublier la manière dont vous orientez vos light_spot directement
depuis les vues 2D, pour, par exemple, les incliner de quelques 15°.
En effet, il faudra passer par Pitch Yaw Roll. Mais ça, on verra plus tard.
Voici une petite présentation de chacun des paramètres :
Name : Le petit nom que vous allez donner a votre nouvelle entité préférée (ou petite amie dans mon cas)
Parent : Le nom de l'entité à laquelle vous voulez parenter cette entité
Pitch Yaw Roll : L'orientation selon l'axe X, Y et Z dans l'espace de votre entité
Target : La cible à éclairer ; L'entité, sans bouger, va pointer en la direction de la cible
FOV : Comparable au Outer Angle du light_spot. C'est l'angle à laquelle la texture va être projetée. (Le FOV du joueur est de 75° je crois )
NearZ : Les Objets qui seront plus proche que la valeur que vous aurez entré ne recevront pas de projections
FarZ : Les Objets qui seront plus loin que la valeur que vous aurez entré ne recevront pas de projections
Enable Shadows : Si vous voulez ou non que votre entité génère des ombres (dynamiques)
Shadow quality : La qualité de l'ombre génerée (Valeur booléenne encore une fois)
Light Only Target : Si vous souhaitez que l'entité n'éclaire QUE l'entité que vous avez entré dans Target (Attention, ça ne fonctionne pas)
Light World : Si vous souhaitez que l'entité éclaire aussi les World Brushs de votre niveau
Light Color : La couleur projetée
Camera Space : L'entité bouge en fonction de la caméra du joueur. (C'est merdique au possible, je vous montrerais pourquoi)

Bon, de toute façon, on ne va pas trop s'embêter avec toute ces valeurs. Mon but est de vous expliquer comment manier l'entité.
C'est pour cela qu'on va directement partir vers un exemple.
Prenons une salle plus ou moins vide, avec un personnage dynamique (important qu'il le soit).
Dans mon cas, je reprend une vieille map de test que j'utilisais pour mes Particles, et j'y ai placé un npc_Gman (j'adore les vieux).

J'adore les mecs aux yeux verts X3
Placez maintenant, juste derrière votre npc, un Env_projectedtexture avec un FOV de 45.00 pour pas que ça le rendu soit difforme.
(Oh la la ! J'ai l'impression de réciter une recette de cuisine comme on en trouve sur les paquets de sucre..
"Et maintenant, versez 200 grammes de sucre Sugarcandy®... " )

Une chose très importante... n'oubliez pas d'activer les ombres !
Ca me semble super con de mettre une entité spécialisée dans les ombres dynamiques pour lui demander de ne pas en générer.
De plus, voici un comparatif SANS et AVEC les ombres dynamiques.

Enable shadows : no

Enable shadows : yes
Vous l'aurez compris, Quand les ombres dynamiques ne sont pas activées, l'éclairage est on ne peut plus merdique et, comble
du bonheur, il passe même au travers des World Brushs.
Néanmoins, une fois l'option activée, plus aucun soucis.
On va personnaliser un peu plus notre entité, afin d'avoir une superbe ombre portée sur le mur.
Quelque chose qui pourrait donner de la grandeur a papi Gman.
Comme je vous disais, il est hors de question de toucher au vue 2D et d'incliner l'entité.
Il faut passer par Pitch Yaw Roll. Comme je ne pense pas avoir affaire à des débutants,
il est inutile de vous expliquer qu'on touche à la première série de chiffre (Pitch) pour modifier l'inclinaison.
Donc mon exemple, j'ai mis -40.

Bien sur, Si votre Npc n'est plus dans le champs d'action de la projection, il faut réajuster le positionnement de
celle ci.

Et qu'obtient-on dans le jeu ?
"Une superbe ombre portée sur le mur" !!

Pour la couleur et l'intensité, ça fonctionne comme un light_spot.
Il faut se rendre dans Color, et y configurer 2-3 bricolles.
Je rappelle aux plus lourds d'entre vous que la 4ème série de chiffre correspond au Brightness.
Dans mon exemple, j'ai mis 174 233 255 520.

Et bien sur, le rendu dans le jeu :

Le mot final de Kikette :

Bien sur, dans la vie, tout a un coût. Et cet effet là, bien que j'ai une machine puissante, je ne pense pas qu'il soit tout à fait "gratuit" à gérer pour cette dernière.
Ce n'est pas non plus un gouffre à FPS, et il est même vachement utile pour créer des effets sympa dans les scènes de speech entre Npc.
Cependant, je dois tout de même vous mettre en garde sur ce que j'ai pu constater :
-L'option Camera space fait bouger l'entité selon votre angle de vision. C'est absolument horrible et je vous recommande vivement
de mettre à la trappe cette option. Ca bug énormement.
-L'option Target va faire que votre entité va sans arrêt pointer vers votre cible. C'est pratique, mais bon, veillez bien à ne pas
la placer non plus dans un endroit à la con. Faut pas trop compter sur l'automatisme.
Pour vous donner un exemple d'utilisation ;
Imaginez vous une scène de théâtre. Imaginez vous maintenant un humoriste (Desproges, Jesus, etc etc) qui parle a des gens et qui arrête pas de bouger.
Et bien si vous placez un env_projectedtexture et que vous déclarez l'un des 2 guignols comme target, vous aurez le même effet
que si un spot suivait les humoristes dans leurs déplacement, sans bouger, tout en produisant une magnifique ombre sur le sol.
-Configurez bien votre FarZ ! La valeur de base est idéale pour les zones fermées ! Dès que l'on sort le grand jeu (couloir de 512 inchs),
l'éclairage disparait. Ce n'est pas QUE l'ombre qui disparait, mais bien tout le lighting !
Voici un petit exemple :

A cette distance de l'entité, j'ai clairement dépassé la limite imposée de distance par le FarZ.
Et si je me rapproche un peu plus..

On dirait qu'il en a une grosse si on regarde que l'ombre.
Comme par magie, l'éclairage réapparait. Loin d'être drôle, cet effet est moche, et je vous suggère de veiller a ce qu'il ne se
produise pas dans vos niveaux. Je serais toujours là pour vous descendre dans le cas contraire.
-Les textures réfléchissent 0% de la "lumière" projettée.
-Le jeu supporte TRÈS mal la présence de plusieurs projecteurs d'ombres dynamiques.
Pour cette expérience, j'ajoute un second Env_projectedtexture ainsi qu'un npc_eli.

Un gars, une fille... désolé Eli !
Voyons maintenant le rendu Ingame.

Et oui ! C'était prévisible... Un projecteur d'ombre dynamique à la fois ! Bien sur, ce problème touche aussi la lampe torche, puisqu'elle
fonctionne elle aussi sur le principe des "projected texture".
Méfiez vous donc, encore une fois.
Fin de ce tuto. Amusez vous bien !













