Normal maps Tangent space

Document sans nom


Obtenir des Normal maps Tangent space dans Blender

Niveau :


Introduction


Blender ne disposant pas encore, à sa version 2.45, d'une fonction permettant de "baker" directement des normal maps tangent space, nous allons donc voir dans ce tutoriel comment obtenir ces maps, à partir d'un mesh en multires, sans passer par un logiciel externe.

(NOTE : A ce jour Blender dispose d'une telle fonction de bake en tangent space dans sa version 2.48, rendant ce tutoriel obsolète pour les versions récentes de Blender).

Nous utiliserons un fichier .blend que j'ai nommé "Normal map Tangent space Factory", que vous pouvez télécharger ici :

[nmap_ts_factory.blend]


Faisons d'abord le point sur les normal maps. Nous verrons ensuite brièvement la théorie nécessaire pour calculer des normal maps tangent space puis l'utilisation de la solution proposée. Ceux qui sont pressés peuvent passer directement à l'étape "Utilisation".



Le point sur les normal maps

Le normal mapping, ou dot3 bump mapping, est une technique qui permet d'ajouter du détail à l'ombrage sans ajouter plus de polygones, en modifiant les normales de la surface.
Alors que le bump mapping se contente de perturber les normales à l'aide d'une texture en niveau de gris, le normal mapping définit complètement les normales à l'aide d'une texture en RVB.

Ainsi, les valeurs de chaque canal (rouge, vert et bleu) représentent les coordonnées X, Y et Z du vecteur normal au point correspondant à ce pixel (plus justement un texel : texture element).
Cependant, le codage de ces coordonnées diffère selon l'espace de référence choisi.

En effet, on trouve trois espaces de référence :
  • Le camera space :
    C'est l'orientation de la caméra qui sert de référence.
    Il n'est valable que pour un objet qui ne bougera pas par rapport à la caméra.
    Utile seulement sur une scène fixe.
    C'est dans cet espace que Blender peut "baker" les normales d'un objet.

  • L'object space :
    L'orientation de l'objet sert ici de référence.
    Il est valable tant que l'objet ne subit pas de déformation.
    Utile dans une scène animée.
    La map n'est guère différente de la première. Seule la manière de la gérer est différente (le logiciel doit recalculer les normales par rapport à l'inclinaison de l'objet).
    Blender ne gère pas ce type de map.

  • Le tangent space :
    Enfin, dans le tangent space, c'est l'orientation de chaque faces qui sert de référence.
    Cet espace est défini pour chaque face, par la normale de celle-ci, ainsi que l'axe U et V de sa map UV.
    La map a la particularité d'être de couleur bleutée.
    Toujours valable même lors de déformation du mesh.
    Blender permet d'utiliser ce type de map dans un rendu, mais pas encore de les "baker".

Toutefois, nous pouvons obtenir des maps tangent space à l'aide d'une série de bake et de plusieurs calculs. C'est ce que nous allons voir.



Théorie

Nous utiliserons un modèle multi-résolution (mutlires) afin de plaquer les détails du modèle haute résolution sur le modèle basse résolution.

Nous allons "baker" en premier lieu la normal map du modèle haute résolution (nmap_pix), qui correspondra aux normales de chaque pixel, dans l'espace de référence caméra space.

Nous déterminerons pour chaque face son espace de référence (composé de trois vecteur que je nommerais U,V et Z), en "bakant" deux normal maps :
- La map des Z (nmap_vert), en "bakant" les normales du modèle basse résolution, qui représente le vecteur normal de chaque vertex dans l'espace de référence caméra space.
- La map des V (nmap_V) qui représente le vecteur V de l'UV, pour chaque face, dans notre caméra space.
La map des U, elle, sera calculée automatiquement (produit vectoriel) par les nodes à partir des deux précédentes.

Nous avons donc maintenant les normales de nos pixels, ainsi que l'espace U,V,Z de référence pour chaque face.
Il ne nous reste plus qu'à multiplier le vecteur du pixel (nmap_pix) à cette matrice U,V,Z (produit scalaire) pour obtenir notre normal map tangent space.



Utilisation de la "Normal map Tangent space Factory"

Requis :
Vous devez disposer d'un modèle en multires.
Celui ci doit déja être "unwrappé" à son premier niveau de résolution.

À partir de maintenant, toutes les maps que vous allez devoir créer devront avoir strictement la même taille.

1. Importation de votre mesh dans la "Normal map Tangent space Factory"
File / Append or Link
Choisir le mesh, et non l'objet. Sélectionner l'objet "Cube".
Dans le panel Editing / Link and Materials, choisir votre mesh à la place du "ME:Cube".



Passer en mode UV Face Select.
Garder le multires level à 1 jusqu'à la fin.

2. Baking de la "nmap_pix" (haute résolution)
Placer le Multires render au maximum.



Dans la fenêtre UV, créer une nouvelle image nmap_pix.
"Baker" les normales (Ctrl + Alt + B).



3. Baking de la "nmap_vert" (basse résolution)
Placer le Multires render à 1.



Dans la fenêtre UV, créer une nouvelle image nmap_vert.
"Baker" les normales.



4. Si le mesh est en "Set Solid" (aller à l'étape 5 dans le cas contraire) :
Dans l'onglet Editing / Modifiers, activer le modifier Edge Split durant le rendu (première icône Enable modifier during rendering)



5. Baking de la "nmap_V"
Dans l'onglet Material / Texture, activer la texture "V".



Dans la fenêtre UV, créer une nouvelle image nmap_V.
"Baker" les normales.



6. Utilisation des nodes pour générer votre normal map Tangent space
Dans la fenêtre Node Editor, charger les maps dans cet ordre, de haut en bas :

- nmap_pix
- nmap_v
- nmap_vert

Paramétrer le chemin d'enregistrement de votre map Tangent Space dans le node File Output.



7. Récupérer votre image dans le dossier choisi =)


Pour compléter ce tutoriel, voyons comment appliquer sur votre objet la normal map tangent space fraîchement calculée.

8. Application de la texture
Créer une nouvelle texture image sur votre material (panel Shading (F5) / Texture buttons).
Charger votre texture

Dans le panel Map image, activer le bouton Normal map.



Dans le panel Shaders, activer le bouton NMap TS



Dans le panel Map To, activer le Nor en négatif, et régler le slider sur 1,00.





Conclusion

Vous savez maintenant utiliser la solution proposée pour obtenir vos normal maps tangent space tout en ayant assimilé les notions principales de ce type de map.

tutoriel rédigé pour le Blender Clan par Zelouille, relecture par Traven et Meltingman, le 28 octobre 2007

    


Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.

Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses [résolu] Exécuter un script à l'ouverture 0 10 Hier 21:45:09
Melodicpinpon 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[10] 90 6075 Hier 20:19:15
moonboots 
Questions & Réponses Lancer un script par défaut/à l'ouverture 0 11 Hier 19:25:33
Melodicpinpon 
The Blender Clan 'tchat Benchmark EEVEE    [1][2][3]...[5] 41 8856 Hier 17:08:59
Keezty 
Questions & Réponses Garder la lumière allumée en local view, et dans toutes les collections 0 24 Hier 16:58:11
Melodicpinpon 
Python & Plugins ardoise 3D en add-on? 2 108 07/05 14:18:47
neonclignote 
Questions & Réponses [résolu] Transparence et Dynamic Paint pour un tag 3 575 07/05 11:16:23
CBY 
Questions & Réponses [non résolu] Dynamic paint + particle 2 108 06/05 18:39:49
Jeanclaude25 
Questions & Réponses [résolu] Lier visibilité et rendering 4 1015 06/05 10:32:29
Melodicpinpon 
Questions & Réponses Text comme screen overlay 4 134 06/05 09:50:17
Melodicpinpon 
Moteur de jeu GameBlender et alternatives [WIP] Jeu "Collapsing - Quandore's Fate"    [1][2][3]...[5] 46 19559 06/05 09:36:54
Redstar 
Moteur de jeu GameBlender et alternatives [non résolu] Cs (vaisseau)    [1][2][3]...[54] 532 157626 06/05 09:32:25
Redstar 
Questions & Réponses Driver sur la résolution de caméra 0 45 06/05 09:31:45
Melodicpinpon 
Questions & Réponses Utiliser Particle Mirror 0 48 06/05 08:24:08
Horemheb 
Questions & Réponses Reset radius de plusieurs nodes à 1 0 63 05/05 10:32:48
Melodicpinpon 
Le coin des geeks Votre avis sur un gadget 0 86 05/05 09:52:39
Redstar 
Questions & Réponses Hook et proportional editing sur courbe 1 68 05/05 08:09:29
Melodicpinpon 
Python & Plugins Vegetation addon - tree, animation et plus ! 5 954 04/05 20:59:52
ferrari6 
Python & Plugins [WIP] Transportation Add-on pour Blender    [1][2] 10 2562 04/05 20:57:01
ferrari6 
Questions & Réponses Occlusion ambiante dans 2.80 et plus avec eevee 1 123 04/05 17:14:51
jcnouveau 

Qui est en ligne
104 utilisateur(s) en ligne (dont 1 sur Tutoriels)

Membre(s): 0
Invité(s): 104


plus...
Nouveaux membres

Nemo
11/3/2021
qingjie 10/3/2021
Kask909 9/3/2021
marie-antoinette 7/3/2021
Bugs 7/3/2021
lolorogli75 4/3/2021
Flagiel 4/3/2021
thedeathclown 1/3/2021
Littlespoon 28/2/2021
luxperpetua 27/2/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Mai 18
Anniversaire Luneo
Jui 30
Anniv des Jedi :-D
Jui 10
BUG de Lyon
plus 256 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445