|

4.4.Plus
loin dans les détail de vos Normal Map grâce à Photoshop.
Ce
paragraphe est dédié à ceux qui veulent en savoir
plus sur les normalmaps. Nous allons techniquement plus loin et cela vous
assurera une meilleure compréhension du fonctionnement de cette
technique ( un minimum de connaissance en mathématiques et compréhension
des vecteurs est requise) .
4.4.1.
Quelques informations générales à propos des normal
map en mode TS ( Tangeant space )
D'abord,
je vais vous parler un peu des normalsmap, comment elles sont calculées,
comment elles sont affichées.
Je vais m'intéresser plus particulièrement au mode Tangeant
Space des Normal map ( les modes Space ou Object ne sont pas appropriés
aux déformations affecté à un personnage ou un objet
) ainsi partons du principe que tout au long de ces explications nous
parlons de ce mode ( Tangeant Space ), sauf indication contraire.
Si
vous être dans la même situation que lorsque je me suis intéressé
aux normal map les informations suivante devraient vous être utiles.
Au début j'étais vraiment frustré par le problème
de "couture" d'UVs.
La recherche du problème fut vraiment pénible. Je pensais
que ma méthode était mauvaise ou que je manquais quelque
choses lors d'une des étapes. J'ai donc fais des recherches sur
internet, au sein des documentations de logiciels. J'ai finalement eu
un soupçon sur la nature du soucis rencontré, pourquoi et
comment elle se produisait.. Mais toujours pas de réponse pour
autant !!
Le
problème principal réside dans la manière que chaque
logiciel calcule et affiche une normal map.
L'espace
de tangente ( Tangeant Space ) est représenté par trois
vecteurs: la normale (qui sera toujours perpendiculaire à la surface),
et deux autres perpendiculaire à la normale appelée tangeant
et Bi-normal (ou Bi-tangente : j'ai remarqué que les noms employés
dépendent de ce dont on parle. BiTangente quand on parle de surface
et "normale" et "bi normale" pour une courbe en 3D.
Ces trois vecteurs peuvent être définis pour chaque point
d'une surface et l'ensemble des vecteurs définissent les coordonnées.
Habituellement
l'espace de tangente par triangle sera calculé de la façon
suivante :
- le vecteur normal sera toujours perpendiculaire à la surface
(triangle) (elle sera la bleue et elle sera stockée dans le canal
bleu de la texture de normale)
- la tangeant ( la rouge pour le canal rouge de la texture de normal )
et la binormal en vert ( pour le canal vert de la texture de normal )
seront en accords avec les Uvs.
Tangeant sera l'orientation horizontale dans l'espace des Uvs ( votre
planche UVs ) soit ce qu'on appelle les U coordonnées.
Binormal sera l'orientation verticale dans l'espace des UVs, soit les
V coordonnées.
Vous avez surement déjà vu dans les options de calcule de
normal map la possibilité d'inverser les coordonnées Rouge
et Verte ( Flip Red or green Channel ), cette option permet donc d'inverser
( droite/gauche, gauche/droite - Haut/bas, bas-haut ) les informations
d'orientations puisque parfois certains logiciels les interprètent
de manière opposées.
Sachez par ailleurs que ceci est directement possible depuis Photoshop:
Faire un Inverse sur le canal rouge de votre texture de normal, pareil
pour le vert, etc...

Partons maintenant du principe que je découpe mes UVs suivant l'egde
et tourne ce nouvel ilot d'UVS a 90° comme le montre l'image ci-dessous.
En raison de la rotation dans l'espace UV la normal map a aussi tournée
puise que le disque de couleur RGB tourne aussi le long l'axe bleu.

Pour
cette raison, l'orientation des ilots UV affectera les couleurs que vous
verrez sur la normal mal. Si vous tournez les uvs de votre modèle
(ou les ilots d'uvs) et que vous recalculer l'étape de Normal map,
le résultat sera complètement différent.
L'espace
de tangente peut donc être calculé par sommet. Pour les informations
depuis n'importe quels points de la surface il s'agira donc juste d'une
interpolant entre les différents vecteurs sur chaque sommets. Mais
Habituellement, il s'agit de calcul plus complexe afin d'être indépendant
de la topologie ( chaque sommet en l'occurrence ). Par exemple dans les
versions préalables de Maya la normal map était dépendante
de la tesselation… Ainsi si vous aviez un modèle triangulé
et qu'il vous fallait faire un "flip" sur un triangle, ou bien
aviez a changer un ilot UV, plus rien ne s'affichait correctement due
au recalcule des vecteurs Tangeant space. Désormais Maya passe
outre ce problème en calculant la normal map "par pixel"
et non par sommet.
Désormais,
la technique utilisée pour la création d'une normal map
est celle du raytracing. Un rayon part du modèle "low poly"
( basse déf) jusqu'a rencontrer le modèle high poly. De
la il calcule la normal du point rencontré en mode "Espace"
et le converti dans l'espace "Tangeant" du modèle basse
définition pour l'écrire dans la texture normalMap. Ainsi
vous avez donc une normal map qui sera affichée correctement sur
votre moteur temps réel ( affichage de Maya, jeux vidéos,
serious gaming, etc.. ) et ce sans discontinuité dans les bordures
d'ilots UVs.
Tout
ceci ne serait pas un problème sur les logiciels appliquaient tous
la même méthode d'affichage des normalmaps dans un espace
tangentiel. La solution pourrait être trouvée si un standard
était envisagé. La seule application que je connaisse à
dévoiler publiquement leur méthode de calcul Mudbox.
Maintenant vous savez pourquoi et dans quelles conditions le problème
se pose.. Vous savez au moins que vous ne faite rien de travers et que
c'est le logiciel qui est a blâmé !
Je
vais vous montrer un exemple et vous expliquer comment une normalmap est
calculée et comment l'interpréter couche par couche ( les
canaux RGB ). Cette étape vous aidera à travailler vos textures
sous Photoshop, les complexifier en calque, les peindre directement, etc..
Pour
ce faire, je vais calculer la normalmap d'un cylindre sur un simple plan
carré. Comme expliqué plus haut dans le didacticiel l'espace
de tangeant est a interpréter comme suis: lla normale pointant
vers le haut ( la bleu ), les tangeantes de la gauche vers la droite (
zone 3 et 4 )et la dernière bitangeante ou bi-normale en vert (
de 3 à 1 ) . Les edges du cylindre sont en "hard" donc
les zones de couleurs sont pleines ce qui facilitera la compréhension
et l'analyse. Comme vous pouvez le voir, les faces sont numérotés
de 1 à 7 pour faciliter mon explication.

Maintenant
regardons le modèle depuis la vue de dessus, voici ce à
quoi ca doit ressembler.
En
haut de l'image vous avez une explication de la définition des
couleurs utilisées: En blanc, le modèle haute déf,
les normales de ce modèle haute def en cyan, le modèle basse
définition en magenta, et ses normales en jaune ( le plan ayant
partout la même orientation, sa couleur est pleine ).
Sous
les codes couleurs est défini l'espace tangeantiel: la tangeant
en rouge ( de gauche à droite ), la normale en bleu ( du haut vers
le bas - élévation ) et la binormale en vert. Notez dans
la figure plus haut que toutes les faces du haut poly sont parallèles
à la flèche verte ( binormale ) a l'exception des faces
fermant le cylindre et qui ne seront de toute façon visible sur
la texture de normalmap.
Maintenant,
pour chacune des faces du modèle haut poly je peux décomposer
les vecteurs de normalisation ( en cyan ) défini ici par la tangeant
et la normale ( rouge et bleu ). La binormal quand à elle est nulle
puisque parallèle avec le vecteur birnomal ( en vert ! ).
Les
flèches grises indiquent les rayons ( le fameux calcule en raytracing
évoqué qui solutionne les problèmes vues plus haut
) partant du modèle basse définition vers la haute définition
pour le calcule de la normalmap. Prenons maintenant plusieurs points (
A,B,C,D,E,F,G ) de la surface pour les analyser et voir ce qu'il se produit
concrètement.
Petite
aparté: D'habitude les vecteurs sont normalisés en unité
normé. si vous décomposez un vecteur dans un espace tangeantiel.
Chacune de ses composantes a une valeur réelle entre -1 et 1, mais
de toute façon cette valeur est converti en nombre entier positif
et stockée dans les canaux RVB de la normalmap comme suit:
-
Les valeurs négatives de tangente (dans le canal rouge) ( de -
1 à 0) seront converti afin d'aller de 0 à 127. Les valeurs
positives ( de 0 à 1 ) seront converties de 129 à 255. 128
étant la valeur neutre.
-
Il en sera de même pour la binormale représentée par
le canal vert.
-
Le vecteur de normale est composé de valeur uniquement positive,
de 0 à 1, les valeurs converties iront dont de 128 à 255.
Pour
le point D, nous tirons un rayon qui rentre en intersection avec le modèle
haute déf sur la face 4. En suivant les pointillées, vous
pouvez vous apercevoir qu'il est parallèle à la normale
dans l'espace tangeant. Le canal rouge ( vecteur tangeant ) est ainsi
à 128 ( soit neutre ) et la normale à 255 ( canal bleu ).
Pour
le point F, le rayon de recherche rencontre la face 6 et nous pouvons
voir que le vecteur normal de cette face (couleur cyan ) sera décomposé
en deux composants : composante de tangente (rouge) avec une valeur positive
autour de 0.78 converti à 228 dans le canal rouge et la composante
binormale (bleu) avec une valeur positive de 0.625 convertie à
208 dans le canal bleu.
Pour
le point B, le rayon de recherche rencontre la face 2 et nous pouvons
voir que le vecteur normal de cette face est décomposé en
composante de tangente (rouge) avec une valeur négative autour
de -0.78 ( soit 22 ) dans le canal rouge et la composante binormal (bleu)
avec une valeur positive de 0.625 ( 208 dans le canal bleu).

D'ailleurs,
vous pouvez voir les différents canaux depuis Photoshop avec ctrl 1,
ctrl 2, ctrl 3 pour vert, rouge et bleu et ctrl ) pour revenir au RVB.
Vous pouvez copier ces canaux simplement comme suit ( pour le rouge par
exemple ). ctrl 1 (aller au canal rouge), ctrl a (choisir tous), ctrl shift c
(copie évidente), ctrl ) (retour RVB) et ctrl v (coller ). Après
cette combinaison de raccourcis vous avez le canal rouge de la couche
choisie comme calque "normale" dans la composition Photoshop.
Si
je tourne le cylindre à 90 degrés comme ci-dessous

Voici
à quoi la normale map ressemble:

et sur les canaux séparés
 

Cette
fois le canal rouge est plat à 128 ( comme le canal vert l'était
) puisque toutes les faces du haut poly sont maintenant parallèles
avec la flèche rouge (et les normales sont décomposées
les composantes de tangente seront converti de 0 à 128 ) ; le canal
vert (binormal) semblera semblable au canal rouge d'avant (mais tourné
à 90 degrés ) et le canal bleu identique mais à 90
degrés aussi.
ok…
après toutes ces mathématiques, moment détente avec
quelques rendus......


|