Actualités Logiciéls Tutoriéls Galeries Concours Forums WIP Emplois Boutique
 

Making of Varga

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......







Navigation
Making of Varga - Partie 1
Making of Varga - Partie 2
Making of Varga - Partie 3
Making of Varga - Partie 4
Making of Varga - Partie 5
Making of Varga - Partie 6
Making of Varga - Partie 7
Making of Varga - Partie 8

Médias
Envoyer cet article à un contact
Imprimer cet article
Télécharger l'article en PDF
Votre réaction concernant cet article

Connexion
Pseudo/password:
Connection auto



Newsletter
Abonnez-vous

Boutique
Textures-Modèles
Logiciels 3D
Logiciels 2D
Promo


Alapage


WWW.3DVF.COM
| A Propos | Contact | Copyrights | Publicité |
© Copyright 2000-2007 3DVF - Tous droits réservés
Site Meter - page rank - tracker - Annuaire Webmaster