Pourquoi les cartes normales sont-elles principalement bleues?

44

Pourquoi les cartes normales sont principalement bleues au lieu d'une couleur aléatoire?

Je suppose que les vecteurs normaux d’un objet 3D peuvent pointer dans toutes les directions, comme:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

entrez la description de l'image ici

Jinbom Heo
la source

Réponses:

71

Il existe deux types de cartes normales couramment utilisées dans le développement de jeux. La façon dont vous pensez qu'ils devraient fonctionner est la même qu'un type (cartes normales de l'espace modèle), mais la plupart des jeux utilisent un autre type (cartes normales de l'espace tangent), raison pour laquelle vous associez des textures généralement bleues à des cartes normales.

Exemple de carte normale d'espace modèle

Avec les mappages de normales dans l'espace modèle , chaque canal code la valeur précise de la normale en utilisant le même système de coordonnées que les sommets du modèle avec lequel il est utilisé. Cela signifie que différentes parties de la carte normale auront des teintes différentes, mais que les pixels proches les uns des autres auront généralement des couleurs similaires. Un exemple de carte normale d’espace modèle apparaît ci-dessus ( source ).

Les cartes normales à espace tangent sont généralement bleu clair. Ce type de carte définit les normales dans un espace de coordonnées unique à la position de chaque pixel sur la surface du maillage. Il utilise la normale au sommet (interpolée) comme axe Z et deux autres vecteurs orthogonaux, appelés tangente et bitangente, comme axes X et Y. Pour l'essentiel, vous pouvez considérer les normales de la carte comme un "décalage" par rapport à la normale pour ce pixel calculé en interpolant les normales au sommet. Les vecteurs tangent et bitangent sont également interpolés à partir de données de sommet et déterminent quelle direction sur le maillage correspond à "haut" et "à gauche" dans la carte normale. L'image fournie dans la question fournit un excellent exemple de ce à quoi ressemble une carte normale normale dans un espace tangent. Je ne donnerai donc pas d'autre exemple ici.

Les composants d’un corps normal (sans jeu de mots) vont de [-1, 1]. Mais les composants d'une couleur dans une image vont de [0, 1](ou [0, 255]habituellement, ils sont normalisés [0, 1]). Les normales sont donc mises à l’échelle et décalées de telle sorte que la normale (0, 0, 1)devienne la couleur (0.5, 0.5, 1). C'est la couleur bleu clair que vous voyez dans les cartes normales, et elle n'indique aucun écart par rapport à la normale au sommet interpolée lors de l'utilisation de normales à l'espace tangent.

La raison pour laquelle les normales d’espace tangent sont préférées aux normales d’espace est due au fait qu’elles sont plus faciles à créer et peuvent être utilisées pour plusieurs maillages. De plus, s’ils sont utilisés avec un maillage animé, les normales d’espace tangent sont toujours utilisées, car les normales changent constamment.

bcrist
la source
6
J'adore cette explication - concise, qui inclut les mathématiques, explique les différents types utilisés pour les cartes normales et explique pourquoi elles sont utilisées.
Tom 'Blue' Piddock
Merci d'avoir fait la distinction entre bitangentet binormalcorrect.
imallett
2
@imallett Oui, les surfaces ont une normale, tangente et bitangente, alors que les courbes ont une tangente, normale et binormale. Au moins c'est ce que j'ai compris.
bcrist
8

La carte normale est généralement orientée vers l’extérieur d’une surface. En supposant que la cartographie habituelle de la composante Z des vecteurs normaux XYZ soit la direction de la «profondeur» et une cartographie correspondant à la composante B de l'espace colorimétrique RVB, la plupart des vecteurs normaux sont principalement bleus.

Si la texture était rouge, par exemple, cela voudrait dire que la carte normale est une surface qui pointe principalement vers la droite. Vous pouvez voir cette fonctionnalité sur votre exemple d'image car le bord le plus à droite des reliefs a une teinte rougeâtre.

Une surface complète de couleur rougeâtre n'aurait aucun sens. Cela indiquerait une surface entièrement tournée vers la droite. Cela serait juste modélisé avec la géométrie, pas une partie d'une carte normale.

Sean Middleditch
la source
3
Pour clarifier cela un peu plus loin, la normalmap ne contient PAS le vecteur normal de votre point de vue, mais elle tient le vecteur normal du point de vue des visages. Ainsi, après avoir obtenu votre normale du visage, vous mélangez cela avec le normalmaps-normalvector. Et comme il est principalement bleu, ce qui correspond à (0, 0, 1), cela signifie que le vecteur normal que vous avez déjà obtenu ne change pas. (Pensez à cela, comme si vous étiez chaque visage à plat sur le sol avant de le dessiner, puis utilisez le vecteur normal de la carte normale, ce sera principalement vers le haut, si c'est à droite ou à gauche, quelque chose ne va pas avec votre maillage).
tkausl