Pourquoi les cartes normales sont-elles bleues et violettes?

11

J'apprends la cartographie normale. J'ai compris que les valeurs RVB sont converties en XYZ, mais ma question est de savoir comment est-elle convertie et pourquoi la carte normale est-elle bleue et violette?

Abhinay Singh Negi
la source

Réponses:

12

Parce qu'une carte normale couvre des vecteurs de -1 à 1, il est logique d'étirer cette plage de 0 à> 1 afin que tout puisse être ajusté à l'intérieur de la plage de RVB.

Donc, généralement, nous appliquons une transformation sur la normale pour la convertir en quelque chose que nous pouvons voir.

vec3 colour = vec3(0.5) + normal * 0.5;

La couleur bleue est due au fait que les cartes normales sont censées être utilisées par rapport à la normale primitive (triangle / etc) avec une direction par défaut (0,0,1) pour indiquer aucune déviation par rapport à la normale du triangle. Habituellement, le fragment shader doit faire pivoter cette normale par rapport à la normale par pixel actuelle lors de l'exécution.

PaulHK
la source
Ce code vec3 colour = vec3(0.5) + normal * 0.5;convertit-il RVB en XYZ?
Abhinay Singh Negi
1
@AbhinaySInghNegi non, la couleur est RVB et la normale est XYZ, il s'agit donc de convertir XYZ en RVB. Si vous voulez du RGB au XYZ que vous utilisezvec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101
20

Seules les cartes normales d'espace tangent sont principalement bleues. En effet, la couleur bleue représente une normale de (0,0,1) qui serait une normale inchangée lorsque le triangle se situe dans le plan x et y, c'est-à-dire perpendiculaire à la surface. Les tangentes, x et bi-tangentes, y (également appelées bi-normales) sont codées dans les canaux rouge et vert et elles forment pour créer un espace tangent normal pour un point sur la surface du triangle.

Si une carte normale d'espace tangent devait coder une couleur uniquement en rouge (1.0, 0.0, 0.0), cela générerait une normale d'espace tangent parallèle à la surface du triangle. Cela n'est jamais vu car cela signifierait que le triangle ne serait éclairé qu'à 90 degrés de la surface et afficherait le vecteur à quel point vous ne seriez pas en mesure de voir le triangle de toute façon.

Les cartes normales de l'espace mondial codent l'unité normale sur une sphère et peuvent donc être principalement de couleurs différentes une fois codées de [-1, 1] à [0, 1] par canal.

Une comparaison peut être vue ici:

entrez la description de l'image ici

Dans la pratique, les cartes normales sont généralement encodées dans un format à 2 canaux tel que BC5 qui ne stocke en fait que les x et y avec le z étant reconstruit car nous savons que c'est un vecteur unitaire. Cela vous permet de maintenir une précision plus élevée avec plus de bits sans augmenter la taille du fichier.

Syntac_
la source
Les espaces tangents ne sont pas uniquement paramétrisés, et pourtant je trouve beaucoup d'images mesh + normal-map-in-tangent-space autour. Existe-t-il une manière conventionnelle de définir la base de l'espace tangent?
Alec Jacobson