Tutoriel – Chapitre 3.2 – Théorie de la normal map

3.2.1 – Intérêt de la Normal map

Malgré tout le soin qu’on pourra mettre dans la création de la texture diffuse map, on reste limité par le degré de détail de notre modèle en 3D. Le problème étant que plus un objet 3D graphique est détaillé, plus il nécessite de polygones et par conséquent plus il est consommateur de temps de calcul. Ce n’est pas un problème pour les animations pré-calculées, par contre pour un jeu on ne peut pas pousser trop dans cette voie sans pénaliser la fluidité.

C’est là qu’interviennent les normal maps. Elles permettent de simuler des détails sur un objet en modifiant la manière dont la lumière se réfléchit à sa surface.

3.2.2 – Comment fonctionne l’éclairage d’un point

D’abord on doit connaître la direction vers laquelle chaque point fait face. On représente cette direction par un vecteur, appelé vecteur normal. Vous pouvez vous représenter ce vecteur comme une ligne perpendiculaire à la surface.

Ensuite pour chaque point on trace une ligne entre ce point et la source de lumière. Cette ligne est orientée suivant un autre vecteur qu’on appelle le vecteur lumière.

Ainsi pour chaque point on a deux vecteurs, le vecteur lumière et le vecteur normal. Si on connait l’angle entre ces deux vecteurs, on sait comment éclairer le point:

– Si l’angle est petit (les deux vecteurs pointent dans des directions similaires), on sait que la surface reçoit beaucoup de lumière (imaginez vous en plein soleil à midi …)

– Si ,l’angle est grand, la surface reçoit peu de lumière (les rayons du soleil le soir…)

3.2.3 – Fonction d’une Normal Map

Une Normal map sert à simuler des détails en 3 dimensions sur une surface en deux dimensions sans augmenter le nombre de polygone de l’objet de base.

Le degré d’éclairage d’une surface est proportionnel à l’angle que fait le rayon lumineux avec la normale (perpendiculaire à la surface) : plus l’angle est petit (c.a.d. plus le rayon est perpendiculaire à la surface) et plus la surface reçoit de lumière. Pour ceux qui n’ont jamais étudié ce concept, pensez au soleil qui éclaire plus fort quand il est haut que lorsque ses rayons sont rasants.

Selon ce principe, les algorithmes d’éclairage des cartes graphiques de la génération précédente utilisaient la normale par facette (polygone) pour éclairer un objet. Il en résultait un éclairage très peu réaliste sauf si le nombre de polygones était augmenté, mais dans ce cas on avait quelques petits problèmes de vitesse de rendu!.

Une première amélioration a été d’interpoler linéairement la couleur de chaque pixel d’un polygone entre les valeurs définis aux sommets. C’était le Gouraud-shading. Seuls les sommets étaient éclairés par rapport à leurs normales, les autres points du polygones étaient interpolés.

Avec les cartes de nouvelle génération, grâce aux shaders programmables (vertex et pixel shaders), on peut désormais effectuer les calculs d’éclairage au niveau du pixel en exploitant les normal-maps ce qui conduit à des rendus très réalistes sans pour autant avoir des modèles denses en polygones.

Fondamentalement, il n’y a aucune différence entre une normal map et une diffuse map si ce n’est l’interprétation que l’on donne aux pixels. Dans une normal-map un pixel n’est pas interprété comme la valeur RGB (Rouge, Vert et Bleu) a donner à la couleur, mais plutôt comme les coordonnées X, Y et Z d’un vecteur normal. On peut ainsi donner l’illusion que la lumière se réfléchit différemment sur les points d’une même facette de l’objet de base et simuler des creux ou bosse.

La coordonnée X correspond à la couleur rouge (le R, red, de RGB), Y à la couleur verte (le G pour Green) et Z à la couleur bleu (le B pour Blue).

NOTE : Si l’on tente de visualiser directement une normal-map à l’aide d’un simple visualiseur d’image, chaque pixel est alors interprété comme une couleur RGB.

Cela signifie que la coordonnée X du vecteur normal sera lue comme la composante R (rouge) de la couleur, Y sera lue comme la composante G (vert) et enfin la coordonnée Z sera assimilée à la composante B (bleu). La normal map représentant la surface de l’objet, la plus grande partie des vecteurs normaux a une coordonnée Z très supérieure aux deux autres, et par conséquent la valeur de Bleu est prédominante, ce qui explique pourquoi une normal-map est globalement bleutée.

3.2.4 – Les bumps maps

Les Normal maps sont en quelque sorte l’évolution des Bump maps (de bump-mapping, bump signifiant bosse en anglais). Elles sont plus détaillées car définies sur trois axes, là où la bump map ne définissait que la hauteur. En clair, la bump map avait le même rendu quelque soit le point de vue. Avec la normal map, si vous regardez la texture d’en haut, d’en bas, de gauche ou de droite, ce ne seront pas les mêmes reliefs qui ressortiront. D’où l’impression d’un plus grand réalisme.

3.2.5 – Création de la normal map

On peut créer ces Normal map « scientifiquement » en construisant le modèle 3D de la nature de la texture (ex: des briques) puis en lui appliquant un matériaux dont la couleur varie suivant que les faces ont leur normales vers le haut, bas, droite ou gauche.

Mais bon, autant c’est pratique quand on crée une texture pour simplifier un motif 3D existant (par exemple pour faire du low-poly), autant parfois on a déja une texture réelle provenant d’une photo. Et modéliser des gravillons, c’est pas très gratifiant.

On peut aussi créer la normal map à partir d’un modèle 3D plus détaillé que celui utilisé en jeu. Le modèle détaillé ne sert que pour la création de la normal map, et en jeu on applique cette map sur le modèle moins détaillé (low-poly) pour gaggner du temps de calcul processeur.

Mais dans la pratique, c’est à dire quand vous modifiez ou créez un objet de NWN 2, vous devez créer votre normal map sans passer par une des deux solutions proposées ci-dessus.

D’où l’idée de créer des normal maps « supposées » à partir d’image 2D.

http://www.bencloward.com/tutorials_normal_maps2.shtml

On verra plus tard dans ce tutoriel comment créer la normal map à partir de la diffuse map avec un plugin nVidia a ajouter à votre logiciel de dessin bitmap.


Laisser un commentaire