Por que os mapas normais são azuis e roxos?


11

Estou aprendendo sobre mapeamento normal. Entendi que os valores RGB são convertidos em XYZ, mas minha pergunta é como ele é convertido e por que o mapa normal é azul e roxo?

Respostas:


12

Como um mapa normal cobre vetores de -1 a 1, faz sentido estender esse intervalo para 0-> 1, para que tudo possa caber dentro do intervalo de RGB.

Geralmente, aplicamos uma transformação no normal para convertê-la em algo que podemos ver.

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

A cor azul é porque os mapas normais devem ser usados ​​em relação ao normal primitivo (triângulo / etc) com uma direção padrão (0,0,1) para indicar nenhum desvio do triângulo normal. Normalmente, o sombreador de fragmento precisa girar esse normal em relação ao normal por pixel atual em tempo de execução.


Este código vec3 colour = vec3(0.5) + normal * 0.5;está convertendo RGB para XYZ?
Abhinay Singh Negi 13/09/18

1
@AbhinaySInghNegi não, a cor é RGB e o normal é XYZ, então isso está convertendo XYZ em RGB. Se você quiser RGB para XYZ você usavec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101

20

Apenas os mapas normais do espaço tangente são principalmente azuis. Isso ocorre porque a cor azul representa um normal de (0,0,1) que seria um normal inalterado quando o triângulo se encontra no plano x e y, ou seja, perpendicular à superfície. A tangente, xe bi-tangente, y (também denominada bi-normal) são codificadas nos canais vermelho e verde e formam-se para criar um espaço tangente normal para um ponto na superfície do triângulo.

Se um mapa normal do espaço tangente codificasse uma cor apenas em vermelho (1.0, 0.0, 0.0), isso geraria um espaço normal tangente paralelo à superfície do triângulo. Isso nunca é visto, porque isso significaria que o triângulo só seria aceso a 90 graus da superfície e visualizaria o vetor em que ponto você não seria capaz de ver o triângulo.

Os mapas normais do espaço mundial codificam a unidade normal sobre uma esfera; portanto, pode haver cores principalmente diferentes uma vez codificadas de [-1, 1] a [0, 1] por canal.

Uma comparação pode ser vista aqui:

insira a descrição da imagem aqui

Na prática, os mapas normais são geralmente codificados em um formato de 2 canais, como o BC5, que na verdade só armazena xey com o z sendo reconstruído, pois sabemos que é um vetor unitário. Isso permite que você mantenha maior precisão com mais bits sem aumentar o tamanho do arquivo.


Os espaços tangentes não são parametrizados de maneira única, mas ainda encontro muitas imagens de malha + mapa normal no espaço tangente. Existe uma maneira convencional de definir a base do espaço tangente?
Alec Jacobson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.