Por que os mapas normais são predominantemente azuis?

44

Por que os mapas normais são predominantemente azuis em vez de uma cor aleatória?

Eu acho que vetores normais de um objeto 3D podem apontar em todas as direções, como:

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

insira a descrição da imagem aqui

Jinbom Heo
fonte

Respostas:

71

Existem dois tipos de mapas normais comumente usados ​​no desenvolvimento de jogos. O modo como você pensa que eles devem funcionar é o modo como um tipo funciona (mapas normais do espaço do modelo), mas a maioria dos jogos usa outro tipo (mapas normais do espaço tangente), e é por isso que você associa texturas principalmente azuis a mapas normais.

Exemplo de mapa normal de espaço de modelo

Com modelo de espaço mapas normais , cada canal codifica o valor preciso do normal usando o mesmo sistema de coordenadas como os vértices do modelo é usado com. Isso significa que partes diferentes do mapa normal terão tons diferentes, mas os pixels próximos um do outro geralmente terão cores semelhantes. Um exemplo de um mapa normal do espaço de modelo aparece acima ( fonte ).

Os mapas normais do espaço tangente são geralmente azul claro. Esse tipo de mapa define normais em um espaço de coordenadas exclusivo para a posição de cada pixel na superfície da malha. Ele usa o vértice (interpolado) normal como eixo Z e dois outros vetores ortogonais, chamados tangente e bitangente, como os eixos X e Y. Essencialmente, você pode pensar nas normais no mapa como um "deslocamento" da normal para esse pixel calculado interpolando as normais dos vértices. Os vetores tangente e bitangente também são interpolados a partir dos dados do vértice e determinam qual direção na malha corresponde a "para cima" e "esquerda" no mapa normal. A imagem fornecida na pergunta fornece um excelente exemplo de como é um mapa normal de espaço tangente típico, portanto, não fornecerei outro exemplo aqui.

Os componentes de um normal normal (sem trocadilhos) variam de [-1, 1]. Mas os componentes de uma cor em uma imagem variam de [0, 1](ou [0, 255]normalmente são normalizados [0, 1]). Portanto, os normais são redimensionados e deslocados de modo que o normal (0, 0, 1)se torne a cor (0.5, 0.5, 1). Essa é a cor azul claro que você vê nos mapas normais e indica que não há desvio do vértice interpolado normal ao usar normais de espaço tangente.

A razão pela qual os normais do espaço tangente são preferidos aos normais do espaço do modelo é devido ao fato de serem mais fáceis de criar e poderem ser usados ​​para várias malhas. Além disso, se usado com uma malha animada, os normais do espaço tangente sempre são usados, porque os normais estão constantemente mudando.

bcrist
fonte
6
Adoro esta explicação - concisa, inclui matemática, detalha os diferentes tipos usados ​​para mapas normais e por que eles são usados.
Tom 'Blue' Piddock
Obrigado por obter a distinção entre bitangente binormalcorreto.
precisa saber é o seguinte
2
@imallett Sim, as superfícies têm uma tangente normal, tangente e bitangente, enquanto as curvas têm uma tangente, normal e binormal. Pelo menos esse é o meu entendimento.
usar o seguinte comando
8

O mapa normal aponta principalmente para fora de uma superfície. Supondo que o mapeamento habitual do componente Z dos vetores normais XYZ seja a direção "profundidade" e que, ao mapear o componente B do espaço de cores RGB, você acabará com a maioria dos vetores normais sendo principalmente azuis.

Se a textura fosse, digamos, vermelha, isso significaria que o mapa normal é uma superfície que está apontando para a direita. Você pode ver esse recurso na imagem de amostra, pois a borda mais à direita dos inchaços tem uma tonalidade avermelhada.

Uma superfície completa de uma cor avermelhada não faria sentido. Isso indicaria uma superfície totalmente voltada para a direita. Isso seria modelado apenas com geometria, não parte de um mapa normal.

Sean Middleditch
fonte
3
Para esclarecer um pouco mais, o mapa normal NÃO contém o vetor normal do seu ponto de vista, mas mantém o vetor normal do ponto de vista das faces, portanto, depois de obter o normal da face, misture isso com o normalmaps-normalvector. E como é principalmente azul, que é (0, 0, 1), isso significa que o vetor normal que você já possui não muda. (Pense nisso, como se você colocasse todas as faces no chão antes de desenhá-las e, em seguida, usasse o vetor normal do mapa normal, isso geralmente será para cima, se estiver à direita ou à esquerda, algo estiver errado com sua malha).
precisa saber é