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?
11
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.
vec3 colour = vec3(0.5) + normal * 0.5;
convertit-il RVB en XYZ?vec3 normal = (colour - vec3(0.5)) * 2.0;
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:
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.
la source