Pourquoi les cartes normales de l'espace tangent ne sont-elles pas entièrement bleues?

11

Pourquoi les cartes normales ne sont-elles pas bleues? Je pense que les cartes normales devraient être principalement de couleur bleue car la composante Z de la normale est représentée par le bleu. Les normales pointent hors de la surface dans la direction Z, nous devrions donc voir le bleu comme couleur prédominante puisque la composante Z est dominante.

Par définition, l'espace tangent est perpendiculaire à la surface. À tout moment, la normale devrait toujours pointer dans le Z (direction bleue) sans X (direction rouge) ou Y (direction verte). Ainsi, la carte normale (car il s'agit d'une "carte normale") devrait avoir la couleur des normales qui est juste bleue (R = x = 0, G = y = 0, B = z = 1) sans nuances entre les deux.

Mais les cartes normales ne le sont pas, et elles contiennent des dégradés de nuances. Pourquoi cela est-il ainsi?

hippocampe
la source

Réponses:

19

L'espace tangent est perpendiculaire aux normales géométriques - les normales de sommet interpolées des polygones. La carte normale fournit les normales d' ombrage , par rapport à l'espace tangent défini par les normales géométriques. Lorsque les normales d'ombrage ne sont pas les mêmes que les géométriques - c'est-à-dire parce que vous avez une texture de surface détaillée avec des entités qui ne sont pas modélisées dans la géométrie - la carte normale s'écarte du "bleu plat" (RVB 128, 128, 255).

C'est un peu l'intérêt des cartes normales - c'est la façon dont vous obtenez la forme détaillée et à petite échelle d'une surface à représenter par l'éclairage et l'ombrage même si vous n'avez pas modélisé tous ces petits détails avec des polygones.

Nathan Reed
la source
1
Pour élaborer, les cartes normales sont généralement réalisées dans un espace tangent car cela reste précis lorsque le maillage est animé, alors que par exemple les cartes normales de l'espace modèle nécessiteraient que les cartes normales soient animées en tandem avec n'importe quelle animation que vous pourriez avoir (ce qui serait particulièrement compliqué avec squelettes et ragdolls arbitraires, par exemple). Pour la géométrie statique, il n'y a aucune raison technique pour laquelle vous ne pourriez pas avoir une carte normale de l'espace modèle, pas tout bleu, simplifiant légèrement votre pixel shader (au détriment de la cohérence, nécessitant plus de shaders, et à son tour nécessitant plus de shader changements de sélection).
MaulingMonkey
1
(les données cartographiques normales ne peuvent généralement pas être réutilisées à plusieurs endroits sur un maillage si elles se
trouvent
+1; le dernier para est la clé de la question - si la surface sur laquelle ils se trouvaient était censée être complètement plate, ils seraient bleus. Si la surface était supposée avoir une certaine rugosité, la carte normale modélise cette rugosité sans avoir besoin de spécifier une géométrie supplémentaire.
Maximus Minimus
2

La réponse simple est que c'est à cause du biais de gamme.

Les normales ont une plage de -1,0 à 1,0 pour chaque composant (x, y, z). La carte normale, stockée sous forme d'image RVB 24 bits, d'autre part, a une plage de 0 à 255 pour chaque composant.

Cela signifie que tous les composants qui étaient nuls deviennent 127,5 (le milieu exact) dans la carte normale (qui arrondit à 128).

Le vecteur normal (0,0,1) devient (128,128,255) dans l'image normale de la carte, qui est une couleur violacée, plutôt que du bleu pur (0,0,255).

GraphixGuy
la source