Normal maps
|
|
|
La création de normal maps est très importantes lorsqu'on veut limiter
le nombre de polygones dans un niveau sans perdre les détails de la géométrie. |
|
En effet pour un univers réaliste, il faut reproduire énormément de détails
car les surfaces dans le monde réel sont rarement planes. Il y a des reliefs
partout qui se remarquent surtout lorsqu'on a des éclairages dynamiques
qui projettent des ombres et font apparaître les reliefs. |
|
On peut bien sur simuler ces ombres en dessinant sur la texture, c'est
ce qu'on faisait, mais c'est statique et donne un résultat peu convainquant. |
Les normal maps permettent de créer de faux reliefs de façon dynamique.
Imaginons une surface plane sur laquelle on veut ajouter un relief compliqué. |
Ce qu'on va faire c'est créer une image de normal mapping, qui va en
fait contenir les information de relief en se basant sur l'orientation
du vecteur normal de chaque pixel de la surface. |
|
Pour obtenir une telle image, il y a plusieures méthodes: |
|
Le plugin de normal map de XSI : |
|
On peut soit créer une surface avec des détails en 3 dimension
avec XSI et ensuite utiliser l'effet GPUSurfaceFX2 d'XSI pour générer
une normal map. Cet outil va créer une projection de l'objet en 3D sur une
surface plane et générer une normal map. |
Ceci implique qu'il faut dessiner un objet en 3 dimensions avec de nombreux
détails, c'est une méthode qu'on va utiliser surtour pour les modèles du
jeu, on va créer un modèle à très haute définition, en extraire une normal
map, puis simplifier le modèle pour obtenir un nombre de polygones convenable. |
On peut aussi faire de même pour d'autres texture, on dessine un objet
en 3D, par exemple une paroi avec des tuyaux, puis on en extrait un normal
map. Ensuite on peut dessiner une texture plane représentant cette paroi. |
C'est une méthode qui donnne de très bons résultat, très exactes, mais
ça impose un gros travail! |
|
|
Le plugin de normal map de Nvidia pour Photoshop : |
|
Cette méthode permet de créer très facilement et rapidement une normal
map à partir d'une texture existante. |
C'est très pratique, mais le résultat n'est pas toujours bon. Ce plugin
se base sur les zones sombres et claires et leur transitions pour en extraire
une normal map. |
On comprendra vite que sur une texture rien ne garantit qu'une zone sombre
soit forcément en creux, De plus si on a simulé les ombres et lumières
sur la texture, on aura des normal maps imprécises, chaque transition clair-sombre
étant considérée comme une différence de hauteur. |
|
Ceci nous amène à reconsidérer cette méthode et à repenser son utilisation.
Ce qu'on va faire c'est créer les normal maps à un stade précoce de la
création de la texture. Dès qu'on a dessiné les volumes de cette texture
et définit le relief, on va en dessiner une version destinée à la création
d'une normal map. On va mettre en blanc les zones hautes, en noir les zones
basses, définir les pentes avec des dégradés de gris. |
On va alors obtenir une texture simplifiée en nuances de gris, ne contenant
que les informations de hauteurs. |
|
Dans Photoshop, il est très facile au moyen des sélections, des remplissages,
des dégradés, des filtres de flou etc.. de créer une texture simulant le
relief seulement. |
|
Si on a déjà une texture terminée, on va faire de même et redéssiner
une nouvelle image en utilisant la texture comme calque transparent pour
se repérer. |
|
Pour faire un tel dessin, on va commencer par sélectionner les zones
hautes de la texture et remplir en blanc, ensuite on va sélectionner les
zones basses et remplir en noir. |
Toute la difficulté sera en suite de définir correctement la transition
entre ces différences de hauteur. Si on a par exemple une pente, il va
falloir créer un dégradé sur cette zone de pente. La meilleure façon c'est
d'utilier le remplissage avec dégradé. Une autre méthode qui marche bien
aussi c'est d'utiliser un filtre de flou (pour les transition rapides). |
|
Si on a une texture dont le relief est très compliqué et ayant plusieurs
niveaux entrecroisés, il sera nécessire de procéder en plusieur étapes
et de recomposer la normal map ensuite en mélangeant plusieures calques
superposés. |
Le problème c'est qu'on ne peut pas applique le filtre de Nvidia à un
calque seul avec un bon résiltat, il faudra créer plusieurs normal maps
puis recomposer l'image finale en copiant et collant les différentes zones.
On va utiliser la texture comme calque de fond pour se repérer et bien
aligner les normals maps. |
|
Prenons un exemple pour illustrer ce travail: |
|
On va prendre une texture composée d'un relief en détail de surface et
d'un relief de géométrie. On a ici un mur composé de briques, on peut facilement
obtenir une normal map satisfaisante pour la surface composée de briques,
mais si on étudie la normal map obtenue, on va constater que le relief
de géométrie représentant l'embrasure des fenêtres ne va pas. |
|
|
|
|
On vaoit que le relief du cadre de la fenêtre est à l'envers, le cardre
est en creux alors qu'il devrait être convexe. De plus les croisillons
des carreaux sont en creux aussi ce qui est faux. On pourrais inverser
le sens dans le plugin, mais alors ce seraient les briques qui seraient
mal représentées. |
Il y a encore un autre problème, le cadre de fenêtre étant sale, la tablette
semble endommagées ce qui est également faux. |
On remarque aussi que le motif en relief au-dessus de la fenètre est
en creux ce qui est également faux. |
|
On va alors modifier la texture avant d'appliquer le plugin de normal
map. |
|
On va sélectionner le cadre de la fenêtre et le motif et remplir avec
une teinte de gris qui va permettre d'avoir le relief dans le bon sens.
La teinte dépend des autres zone et il faudra faire quelques essais. On
va aussi jouer sur la luminosité et le contraste du reste de l'image pour
trouver le résultat le plus convenable. |
|
|
Voici la texture modifiée, on a repeint le cadre à neuf en noir et les
croisillons avec un joli gris et le motif également. Mettre les croisillons
en gris permet de faire en sorte que leur relief soit moins important que
le cadre. |
|
|
Cette fois la normale est correcte, le cadre est en relief dans el bons
sens pour la fenêtre de gauche, le motif est correcte aussi. |
On peut voir la différence avec la fenêtre de droite qui n'a pas été
modifiée! |
|
|
Ci-dessus, en ajoutant un filtre de flou à la zone de la fenêtre, on
permet de créer une normal map avec des transitions plus douces, le résultat
sera des croisillons moins carrés et plus triangulaires. |
|
On peut aller encore plus loin en rajoutant le relief dans le motif au-dessus
de la fenêtre, il y a une sorte de blason en relief qu'on peut restaurer
en faisant une autre normal map sans modification, en découpant cette zone
et en la collant dans la normal map. |
|
|
|
C'est un travail qui est facile à faire et très rapide et qui donne un
bon résultat. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|