L'Eclairage d'un Monde


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:



Copyright© 2000-2007 Graham Perrett thyme@seamless3d.com
traduction Matthieu