¿Por qué los mapas normales son de color azul y morado?

11

Estoy aprendiendo sobre el mapeo normal. Comprendí que los valores RGB se convierten en XYZ, pero mi pregunta es cómo se convierte y por qué el mapa normal es de color azul y púrpura.

Abhinay Singh Negi
fuente

Respuestas:

12

Debido a que un mapa normal cubre vectores de -1 a 1, tiene sentido estirar este rango a 0-> 1 para que todo pueda ajustarse dentro del rango de RGB.

Por lo tanto, generalmente aplicamos una transformación a lo normal para convertirla en algo que podamos ver.

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

El color azul se debe a que se supone que los mapas normales deben usarse en relación con la primitiva (triángulo / etc.) normal con una dirección predeterminada (0,0,1) para indicar que no hay desviación del triángulo normal. Por lo general, el sombreador de fragmentos necesita rotar esta normal en relación con la normal por píxel actual en tiempo de ejecución.

PaulHK
fuente
¿Este código vec3 colour = vec3(0.5) + normal * 0.5;está convirtiendo RGB a XYZ?
Abhinay Singh Negi
1
@AbhinaySInghNegi no, el color es RGB y lo normal es XYZ, por lo que esto convierte XYZ a RGB. Si desea RGB a XYZ, usevec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101
20

Solo los mapas normales del espacio tangente son principalmente azules. Esto se debe a que el color azul representa una normal de (0,0,1) que sería una normal sin cambios cuando el triángulo se encuentra en el plano x e y, es decir, perpendicular a la superficie. La tangente, xy bi-tangente, y (también conocida como bi-normal) se codifican en los canales rojo y verde y se forman para crear un espacio tangente normal para un punto en la superficie del triángulo.

Si un mapa normal de espacio tangente codificara un color solo en rojo (1.0, 0.0, 0.0) esto generaría un espacio tangente normal paralelo a la superficie del triángulo. Esto nunca se ve porque significaría que el triángulo solo se iluminará a 90 grados de la superficie y el vector de vista, en cuyo punto no podrá ver el triángulo de todos modos.

Los mapas normales del espacio mundial codifican la unidad normal sobre una esfera, por lo que pueden tener colores principalmente diferentes una vez codificados de [-1, 1] a [0, 1] por canal.

Una comparación se puede ver aquí:

ingrese la descripción de la imagen aquí

En la práctica, los mapas normales generalmente se codifican en un formato de 2 canales, como BC5, que en realidad solo almacena x e y con la reconstrucción de z, ya que sabemos que es un vector unitario. Esto le permite mantener una mayor precisión con más bits sin aumentar el tamaño del archivo.

Syntac_
fuente
Los espacios tangentes no están parametrizados de forma exclusiva, pero encuentro muchas imágenes de malla + mapa-normal-en-espacio-tangente alrededor. ¿Existe una forma convencional de definir la base del espacio tangente?
Alec Jacobson