Fr/Advanced Lighting

Cet article traite de la lumière dans Source de façon générale.
== Bases ==
Pour bien comprendre comment fonctionnent les "Lights" sous Source il vous faut connaître des notions élémentaires telles que : 
*Lumières Statiques.
Par définitions une lumière statique est fixe, non mobile, produit de la lumière et donc des ombres. On distingue 3 types de light fixes :
:* Les Lights : L'entité de lumière la plus basique qu'il soit. Elle émet un rayonnement dans toutes les directions depuis un point.
:* Les light_spot : L'entité de lumière la plus utilisée dans Hammer. Elle produit un éclairage conique et permet les rendus les plus réalistes.
:* Les Light_environment : L'entité de lumière utilisée pour générer la lumière du jour dans votre niveau (à Condition qu'il y ai un passage à ciel ouvert, et donc une skybox qui puisse permettre son fonctionnement)
*Lumières Dynamiques.
:*Le : Très semblable au light_spot. Plus dur à manier cependant et extrêmement gourmand. Depuis la release de L'Orange Engine, cette entité est devenue obsolète
et on lui préfère le env_projectedtexture.
:*Le Env_Projectedtexture : Cette petite entité ne fonctionne pas tout à faire comme un light, mais ce qu'elle produit peut laisser penser qu'il s'agit bien d'un light.
C'est un peu la version améliorée du Light_dynamic. Il est très très économique, permet d'avoir des ombres splendides pouvant changer de taille, d'orientation, et de couleur, et j'en passe. Cependant, on ne peut utiliser plusieurs de ces entités au même endroit. (Ceci dit, il me semble que le moteur de L4D a réussi à faire quelque chose de ce côté ). 
*.
C'est une variable qui s'applique à la surface des brushs. Elle permet de définir la précision d'une ombre sur cette même face. Le temps de compilation est fortement influencé par les lightmaps.
*La radiosité.
Le moteur Source calcule les éclairages par un système de radiosité, ce qui lui donne justement sa réputation de fournir des éclairages réalistes.
C'est l'un des rares moteurs à utiliser correctement le "Bounce" pour les lighting (De nos jours amélioré par la présence du HDR permettant une réfraction de la lumière de 100% sur les surfaces blanches) simulant ainsi avec brio la lumière réelle. Cependant, contrairement à la vraie vie, votre lumière se s'imprégnera pas de la couleur de vos murs. 
Voir les articles ci dessous si vous souhaitez en savoir plus
== Généralité à savoir ==
;: Rarement utilisée seule (Un éclairage basé sur des lights peut être très moche étant donné qu'un tel éclairage n'est pas réaliste). Il est préférable de l'utiliser en guise d'accompagnement pour un light_spot ou alors, de le rendre suffisamment diffus pour que l'on n'arrive pas à deviner sa source.
Exception tout de même pour les feux de bois, qui peuvent produire un éclairage très satisfaisant en utilisant qu'un light.
Un exemple de configuration qui peut-être très utile pour un éclairage diffus serait :
:* Un brightness (Intensité j'entends, libre à vous de choisir la couleur) de 70
:* Un constant de 1000 (Pour que la lumière soit émise assez loin)
:* Un linear de 500 (Pour empêcher l'apparition d'une tache de lumière plus intense qu'ailleurs qui révélerait ainsi la position d'une source de lumière invisible, ce qui serait fortement désagréable en jeu).
;:Lumière statique conique directionnelle. (ex: spot, écran de télé...). L'avantage du light_spot, c'est que l'on peut l'utiliser absolument partout, pour peu que l'on sache le paramétrer correctement. Dans une ouverture de fenêtre par exemple, pour faire apparaître au sol très nettement l'ombre du cadre. Ou encore, en plein jour, pour faire ressortir un élément du décor, qui pourrait guider le joueur. Contrairement au Light qui produisent des éclairages brouillons si on utilise un brightness trop élevé (Sauf dans certain cas très rare, comme dans les cavernes de Ep2, quand le Vortigaunt va chercher des sécrétions, l'éclairage blanc au fond de la grande grotte), on peut très facilement monter le brightness des light_spot et continuer à s'en servir aisément. 
:* Pour une lampe basique par exemple, vous pouvez tout simplement utiliser un light_spot possédant un brightness de 1000 sans rien ajouter d'autre, si ce n'est un petit light juste en dessous pour tout de même éclairer légèrement votre plafond. 
:* Dans des utilisations plus poussées de light_spot, comme pour les spots combine de HL2, le level designer n'hésite pas à monter le brightness a 2000, et à utiliser un Constant de 500 000, pour être sûr de bien marquer sa présence.
;:Contiens deux sources lumineuses:
:*Une lumière diffuse ambiante (le Ambient), qui représente les réfractions de la lumière sur les nuages et l'atmosphère, générée par toutes les faces de la Skybox.
:*Une lumière directionnelle (le Brightness), qui représente la lune ou le soleil, qui est émise dans une seul direction.
:Ces 2 éclairages ne fonctionnent que par la présence de la texture . 
;:Illumine les particules émises par l'entité . Les particules ne sont pas affectées par les lumières "normales". Utilisez au maximum 2 de ces entités pour un env_smokestack sous peine d'avoir un rendu aléatoire.
== Avertissement sur le fonctionnement des Lights ==
* Méfiez vous des brightness au niveau des Light et des Light_spot. En effet, l'intensité lumineuse In game d'un light ne sera pas la même que celle d'un light_spot.
C'est à dire, la puissance de l'éclairage ne sera pas la même. Un light avec un brightness de 100 éclaire déjà très bien, tandis qu'un light_spot peinera à se faire remarquer.
* L'intensité de votre éclairage va aussi dépendre de sa couleur. C'est à dire, mais un spot vert foncé éclairera nettement moins bien une salle qu'un spot bleu ciel.
De même pour les surfaces éclairées. Je rappelle que Source fonctionne avec le bounce des lights, et donc, une caverne texturée avec des textures très foncées ne fera pas rebondir la lumière comme vous le voulez (Ce qui rendra le lieu plus dur à éclairer en plus...) .
* Pour le constant, moi j'ai l'habitude de mettre des valeurs fortes pour les grandes salles. N'hésitez pas à le monter si vous voulez éclairer très loin ou faire un truc net.
Je peux vous dire que dans Hl2 Ep2, le level designer qui a fait les cavernes utilise des lights très foncé et très faibles ayant un Constant de 1 000 000. 
* Ne nommez vos lumières que si vous en avez besoin. Car une fois nommées, elles peuvent être désactivables, ce que sous entend que Vrad va avoir un calcul supplémentaire à faire. Votre éclairage quand la lumière est éteinte, et votre éclairage quand la lumière est allumée. Ce schéma est simple mais fidèle à la réalité. 
== Quelques Fx pour compléter vos lighting==
* Halo lumineux : 
:* - Entité utilisée pour créer un halo, souvent utilisé sur les lampes. Je recommande son utilisation pour créer des rayons de lumières.
:* - Fonctionne comme le env_sprite, mais propose beaucoup plus de fonctionnalité. Sa taille varie en fonction de notre position
:* - Entité utilisée pour simuler le soleil ou la lune (très rare et très dur à faire ; Nécessite la présence réelle de la lune dans le niveau pour un rendu superbe.) dans le skybox. Pour voir un rendu d'un env_sun couplé à la lune, je recommande de regarder cette map : dm_artic_airport, réalisée par Moroes.
A voir aussi Pour les sprites, et plus particulièrement ceux en World Space Glow.
* Lumières volumétrique : 
:*Brush texture : models/effects/vol_light001 
:*Brush texture : models/effects/vol_light002
:*Model : models/Effects/vol_light.mdl - à utiliser avec un .
:*Env_sprite : Env_sprite : Je considère que les sprites peuvent aussi permettre la conception d'éclairage dynamique (Holy rail, etc etc). Certains level designers de HL2 le font aussi
* Beam/halo :
:*point_spotlight - Souvent couplé à un light_spot, il joue un double rôle : Il fait apparaître un rayon de lumière(beam) et un halo à sa source. Cet effet peut émettre de la lumière, et peut être dynamique. Voir Par exemple les spot combine de HL2. 
:*npc_spotlight - Idem que point_spotlight, mais capable de suivre une cible.
== Entités complétant les lighting ==
;:
Entité point pour les prop_static.
Parfois les modèles apparaissent éclairés, ou même très sombres pour diverses raisons comme un changements trop brusque de lumière ou un ombrage trop complexe à générer sur le modèle en question. Cette entité peut donc régler ce problème en indiquant au modèle concerné en s'imposant comme étant son nouveau point d'éclairage de référence. 
Pour s'en servir, il suffit de la positionner dans un coin près du modèle, lui donner un nom (Lighting_helper01 par exemple), puis, dans les proprietés
du prop, dans Lighting Origin d'entrer le nom du info_lighting.
;: 
Permet de paramétrer les ombres des objets du niveau. Cette entité est surtout utilisée lorsqu'il y a présence d'un light_environment. En effet, le light_environment, une fois placé dans le niveau, donne pour teinte référence aux ombres la couleure de L'ambient. Imaginez que votre Ambient soit bleu foncé ; vous allez avoir de très vilaines ombres bleues foncées partout dans votre niveau. L'entité Shadow control va donc changer cette couleur et mettre celle de votre choix. 
;
Parfois les ombres ne s'affichent pas correctement. Cette entité permet de corriger ce problème en indiquant à une surface de ne pas projeter d'ombre. Un exemple typique d'utilisation est la map cs_assault. Les ombres pouvant parfois bugger sur des surfaces inclinées, le level deisgner du niveau à décidé, pour ne pas réveler la position des autres joueurs, d'utiliser cette entité pour supprimer l'affiche des ombres dynamique des joueurs sur la partie intérieure des toits du hangar.
== Textures lumineuses ==
;
:Technique permettant à une texture appliquée à un Brush d'émettre de la lumière sur 180°.
== ==
Utilisé pour lisser la lumière sur des faces. Le fait de créer des polygones très basiques, par exemple un cylindre à 6 côtés, donne des effets de lumière peu réaliste. On lisse donc les faces, ce qui donne l'impression que le cylindre est bien rond et non très basique. 
L'utilisation du Smoothing Groups est assez particulière. Pour lancer la boîte de dialogue, clique sur la case permettant de choisir sa vue et sélectionnez
3D Smooth. Vous n'allez plus voir grand chose et c'est normal.
Le principe du smoothing est très simple. On sélectionne des faces, et on clique sur un des nombres du Tableau Smooth. Le principe est en fait de simmuler pour Vrad la présence d'une seule et unique face. Supposons que vous avec un éclairage au raz du sol et 3 brushs l'un à côté de l'autre formant ainsi votre sol. Une fois le niveau compilé vous vous rendrez compte que la lumière ne parvient pas jusqu'au 3 ème brush à cause des bounces et du lightmap. Le fait de mettre ces 3 faces dans le même smooth group va ainsi régler ce problème.
Veillez à ce que :
:1 . Les faces "smoothées" partagent au moins un côté commun
:2 . Que la grille du lightmap est bien alignée entre les faces (Sinon les ombres risquent d'être ratées quoi que vous fassiez)
:3 . Que le lightmap est suffisamment petit pour que Vrad génère un rendu correct.
:4 . Que les faces soient dans le MEME smooth group.
== s ==
;mat_fullbright <0-2>
:0 Vue normale.
:1 mode 'full bright', tout est éclairé à 100%. Pratique si le niveau est plongé dans le noir 
:2 introduit avec l'Orange box, c'est une vue très efficace pour observer son lighting, sa diffusion, voire si les bump ressortent bien. Cette commande semble toute fois ne pas très bien fonctionner avec les props..