L'éclairage d'un monde est un sujet qui tarde à s'imposer, un sujet qui a un énorme impact sur
l'aspect général d'un monde, un sujet qui, trop souvent, n'est pas bien compris par
les constructeurs, et sur lequel il a été peu écrit.
Cette mise au point tente de verser un peu d'éclairage sur le sujet
:O)
Je ne sais pas exactement comment réaliser au mieux l'éclairage d'un graphisme en temps réel.
Je n'ai jamais lu un article sur ce sujet, mais je peux parler par expérience après
différents essais et j'ai pu faire quelques observations.
En ce qui me concerne, l'éclairage des mondes 3d en temps réel m'a toujours
paru une course aux compromis. Pour jeter sur la question une "lumière" plus positive,
nous verrons différentes approches, chacune ayant ses avantages et ses inconvénients.
La façon la plus simple d'éclairer un monde, c'est aussi l'une des meilleures, consiste à
le munir d'un directional light (éclairage directionnel) avec ses
réglages par défaut, excepté pour le champ direction (direction)
qui doit être réglé à -1 -1 -1

Un éclairage réglé dans cette direction brille de haut en bas sous un angle
de 45 degrés (Pi/4) sur les trois axes. Sans effet de torche
frontale, et à condition d'observer dans la bonne direction (du "côté éclairé") il
est difficile de faire mieux, à mon avis, parce que cela offre un bon contraste de couleurs
et des ombres convenablement modelées.

Cependant ce procédé fait apparaître tous les objets en noir quand on les observe
de l'autre côté (il y a un "côté sombre").

Il vous sera impossible de reconnaître le visage d'un avatar du côté sombre, à supposer
que vous puissiez le voir du tout. Pour tenter d'arranger les choses bien des constructeurs
ajoutent des éclairages supplémentaires. C'est souvent ainsi que beaucoup de mondes sont
gâchés par des éclairages annexes qui les lavent de lumière et écrasent les ombres 3d.
Cela ne se remarque peut-être pas trop quand on utilise beaucoup d'objets texturés
mais ce problème n'est pas évacué pour autant avec les textures, parce que les objets texturés semblent
alors de piètre qualité et sans ombres 3d.
Pour comprendre mieux de quoi il s'agit en matière d'expression graphique avec ombres 3d,
regardez ci-dessous mes deux exemples, le premier muni correctement d'ombres 3d:

et l'autre sans ombres 3d:

On ne peut même pas voir la bouche sans les ombres 3d parce que la bouche n'est
pas une peinture à trois francs six sous, la bouche est une vraie, sculptée en relief
avec des triangles.
Trop de lumière égale contraste minable égale moins d'ombres égale qualité médiocre
égale moins d'effet 3d.
Une façon de surmonter la tristesse du côté sombre consiste à n'avoir qu'un seul
éclairage directionnel dans son monde, à condition toutefois de recourir à la torche
frontale du côté sombre. Du côté clair évidemment elle apportera trop de lumière,
mais on peut toujours l'éteindre, soit de façon manuelle, soit automatiquement
avec un script.
Une autre solution consisterait à réduire le champ intensity
(intensité) de l'éclairage directionnel. De combien le réduire, cela peut
varier et restera un compromis. Pas assez d'intensité, vous allez pousser
les visiteurs à allumer la torche frontale dans un monde peu éclairé, c'est spécialement
vrai pour le sol, trop d'intensité amène le retour aux couleurs lavées
sans ombres 3d, donc sans modelage, du côté clair. Maintenir l'équilibre entre les deux
est une question de goût laissé à la liberté de chacun.
J'ai vu quelques beaux mondes dans la communauté Blaxxun où l'éclairage semblait
lumineux dans toutes les directions tout en conservant un bon contraste. On pourrait en
tirer la théorie suivante:
On installe un éclairage principal qui simule les rayons directs du soleil, plus une
série d'éclairages secondaires d'intensité moindre pour simuler un éclairage ambient
(une lumière qui brille dans toutes les directions). Plus grande la différence entre
l'éclairage principal et les éclairages secondaires plus les contrastes
et les ombres seront sensibles. Il faut prendre grand soin d'éviter que la somme
des éclairages ne soit trop intense, ce qui peut se vérifier très simplement en en
faisant l'addition.
Que penser du champ ambientIntensity (intensitéAmbiante) ?
Au lieu d'ajouter des éclairages, pourquoi ne pas simplement augmenter
la valeur du champ ambiantIntensity (intensitéAmbiante)
pour réduire le contraste et augmenter la brillance des couleurs du
côté sombre d'un monde, de la même façon que la lumière ambiente le
fait dans le monde réel (tel que je le comprends)?
Je n'ai aucune idée de la façon dont ambiantIntensity
(intensitéAmbiante) est supposée fonctionner en graphismes
3d en temps réel. Si quelqu'un le sait, qu'on me le dise. Dans mon
expérience, augmenter ambiantIntensity (intensitéAmbiante)
ne fait qu'apporter un gris plus clair aux couleurs ombrées, plutôt
que l'effet désiré: une couleur plus brillante, telle qu'on la
verrait dans le monde réel.
Que penser d'augmenter emmissiveColor (couleurEmise)
dans le Noeud Material (matière) ?
Cela pourrait peut-être marcher dans un monde où l'on voudrait rendre
plus brillant le côté sombre au prix de la diminution du contraste, mais cela
échoue dès que ce monde est visité par un avatar,
venu de n'importe où sur le réseau, parce que chaque avatar débarque son
propre Noeud Material
S'assurer que son éclairage est Global (Global).
Il m'est arrivé souvent de rencontrer un monde où l'éclairage n'avait pas
été installé de façon globale, de sorte que le monde, ou des parties de ce
monde, apparaissaient noirs. Cela ne serait pas un problème pour contact 4.4
ou versions antérieures, mais cela survient pour contact 5.1 et plus, parce
que contact 5.1 traite les éclairages plus rigoureusement en accord avec
les spécifications du VRML.
Pour qu'un DirectionalLight (éclairage directionnel)
soit global, il faut l'ajouter au Noeud scene (scène)
comme Noeud de première génération , et surtout pas comme le descendant
d'un autre Noeud. Si vous n'êtes pas sûr de ce que cela veut dire,
ajoutez un éclairage directionnel comme premier Noeud dans le
Noeud Scène, comme ceci: