¿Por qué los mapas normales son predominantemente azules?

44

¿Por qué los mapas normales son predominantemente azules en lugar de un color aleatorio?

Supongo que los vectores normales de un objeto 3D pueden apuntar en todas las direcciones, como:

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

ingrese la descripción de la imagen aquí

Jinbom Heo
fuente

Respuestas:

71

Hay dos tipos de mapas normales comúnmente utilizados en el desarrollo del juego. La forma en que piensas que deberían funcionar es la forma en que funciona un tipo (mapas normales de espacio modelo), pero la mayoría de los juegos usan otro tipo (mapas normales de espacio tangente) por lo que asocias texturas principalmente azules con mapas normales.

Ejemplo de mapa normal de espacio modelo

Con los mapas normales del espacio modelo , cada canal codifica el valor preciso de la normal utilizando el mismo sistema de coordenadas que los vértices del modelo con el que se utiliza. Esto significa que diferentes partes del mapa normal tendrán diferentes matices, pero los píxeles cercanos entre sí generalmente tendrán colores similares. Un ejemplo de un mapa normal de espacio modelo aparece arriba ( fuente ).

Los mapas normales de espacio tangente son generalmente de color azul claro. Este tipo de mapa define las normales en un espacio de coordenadas único para la posición de cada píxel en la superficie de la malla. Utiliza el vértice (interpolado) normal como eje Z, y otros dos vectores ortogonales, llamados tangente y bitangente, como los ejes X e Y. Esencialmente, puede pensar en las normales en el mapa como un "desplazamiento" de la normal para ese píxel calculado al interpolar las normales del vértice. Los vectores tangente y bitangente también se interpolan a partir de datos de vértice, y determinan qué dirección en la malla corresponde a "arriba" y "izquierda" en el mapa normal. La imagen proporcionada en la pregunta proporciona un excelente ejemplo de cómo se ve un mapa normal de espacio tangente típico, por lo que no proporcionaré otro ejemplo aquí.

Los componentes de una normal normalmente (sin juego de palabras) van desde [-1, 1]. Pero los componentes de un color en una imagen varían de [0, 1](o, [0, 255]aunque generalmente están normalizados [0, 1]). Por lo tanto, las normales se escalan y se compensan de manera que lo normal se (0, 0, 1)convierte en el color (0.5, 0.5, 1). Este es el color azul claro que se ve en los mapas normales, e indica que no hay desviación del vértice interpolado normal cuando se usan normales de espacio tangente.

La razón por la que se prefieren las normales de espacio tangente a las normales de espacio modelo se debe al hecho de que son más fáciles de crear y pueden usarse para múltiples mallas. Además, si se usa con una malla animada, las normales de espacio tangente siempre se usan, porque las normales cambian constantemente.

bcrist
fuente
66
Me encanta esta explicación: concisa, incluye las matemáticas, elabora los diferentes tipos utilizados para los mapas normales y por qué se usan.
Tom 'Blue' Piddock
Gracias por obtener la distinción entre bitangenty binormalcorrecto.
imallett
2
@imallett Sí, las superficies tienen una normal, tangente y bitangente, mientras que las curvas tienen una tangente, normal y binormal. Al menos eso entiendo.
bcrist
8

El mapa normal apunta principalmente hacia afuera desde una superficie. Suponiendo que sigue con el mapeo habitual del componente Z de los vectores normales XYZ que es la dirección de "profundidad" y ese mapeo con el componente B del espacio de color RGB, terminará con la mayoría de los vectores normales principalmente azules.

Si la textura fuera, por ejemplo, roja, eso significaría que el mapa normal es una superficie que apunta principalmente hacia la derecha. Puede ver esa característica en su imagen de muestra ya que el borde más a la derecha de las protuberancias tiene un tinte rojizo.

Una superficie completa de color rojizo no tendría ningún sentido. Eso indicaría una superficie que está completamente orientada hacia la derecha. Eso solo se modelaría con geometría, no parte de un mapa normal.

Sean Middleditch
fuente
3
Para aclarar esto un poco más, el mapa normal NO contiene el vector normal desde su punto de vista, pero mantiene el vector normal desde el punto de vista de las caras, por lo que después de obtener su normal de la cara, mezcla esto con el normalmaps-normalvector. Y dado que es principalmente azul, que es (0, 0, 1), esto significa que el vector normal que ya tiene no cambia. (Piense en esto, como si pusiera todas las caras planas en el piso antes de dibujarlo, y luego use el vector normal del mapa normal, esto será principalmente hacia arriba, si es correcto o izquierdo, algo está mal con su malla).
tkausl