¿Cómo funciona realmente el mapeo normal?

10

Estoy tratando de comprender el concepto de mapeo normal, pero estoy confundido por algunas cosas. En resumen, no estoy seguro de si un mapa normal depende o no del punto de vista (es decir, si obtendrá un mapa normal diferente del mismo objeto cuando lo gire). En segundo lugar, no entiendo por qué el color azulado es el color predominante en los mapas normales.

Lo que pienso sobre las normales y su relación con los colores RGB es el siguiente. La esfera de la unidad representa cualquier unidad normal posible; en otras palabras, los componentes X, Y y Z de un vector normal unitario varían de -1 a 1. Las componentes de un color RGB varían de 0 a 255. Por lo tanto, tiene sentido para asignar -1 (componente normal) a 0 (componente de color), 0 a 127 o 128 y 1 a 255. Cualquier valor intermedio se interpola linealmente.

La aplicación de este mapeo a las normales de un objeto 3D arbitrario da como resultado una imagen muy colorida, nada predominantemente azul. Por ejemplo, al tomar un cubo, las seis caras tendrían un color diferente pero uniforme. Por ejemplo, la cara con la normal (1,0,0) sería (255,128,128), la cara con la normal (0,0, -1) sería (128,128,0) y así sucesivamente.

Sin embargo, por alguna razón, los mapas normales de un cubo que encontré son completamente azulados, es decir (128,128,255). Pero claramente, las normales no están todas en la dirección z positiva, es decir (0,0,1). ¿Como funciona esto?

[Editar]

Ok, entonces el enfoque descrito anteriormente parece ser referido como el mapa normal del espacio objeto o el mapa normal del espacio mundial . El otro se llama el mapa normal del espacio tangente . Entiendo cómo se puede usar un mapa normal de espacio tangente para modificar las normales de una geometría, pero todavía no estoy completamente seguro de cómo se calcula realmente (ver mi comentario en la respuesta de Nicol Bolas).

[Editar 2]

Probablemente debería mencionar que estoy trabajando con superficies paramétricas por partes. Estas superficies consisten en un conjunto de parches de superficie , donde cada parche está asociado con su propio espacio paramétrico (u, v) = [0,1] x [0,1]. En cualquier punto de la superficie, lo normal se puede calcular exactamente. Aparentemente, los vectores T ( tangente ) y B ( bi-tangente ), necesarios para abarcar el espacio tangente, no son simplemente las derivadas parciales del parche de superficie en la dirección de u y v ...

Ailurus
fuente
¿Alguna vez ha intentado implementar phong o al menos sombreado difuso? ¿Conoces fórmulas básicas como punto (a, b) = cos (ángulo (a, b)) para los vectores unitarios a, b? Pocas horas de implementación le ahorrarían años de dificultades.
Ivan Kuckir
@Ailurus: vea mi comentario / respuesta sobre cómo abordar el mismo problema para objetos de terreno / campos de altura. Se vuelve un poco más complicado para otros objetos, pero los conceptos no deberían diferir.
teodron
El caso particular de la cartografía normal del terreno: gamedev.stackexchange.com/questions/43894/…
teodron

Respuestas:

14

Una asignación de textura es la asignación entre puntos en la superficie 3D y sus puntos correspondientes en una imagen de textura. Si tiene un mapeo de textura 1: 1, entonces cada punto en la superficie 3D se mapea a un punto específico y único en la imagen de textura (aunque lo contrario no tendría que ser cierto. Algunas ubicaciones en la textura no necesariamente se mapearían a ubicaciones en la superficie).

Con tal mapeo, podría atravesar la superficie 3D y almacenar cada normal distinto en la ubicación correspondiente en la textura.

Vale, bien, hagámoslo. Recorreremos una superficie 3D y generaremos normales de espacio de objetos en las ubicaciones mapeadas, y luego las pegaremos en la textura. Entonces, cuando queremos renderizar, simplemente buscamos el espacio de objetos normal de la textura y listo. ¿Derecho?

Pues sí, eso funcionaría. Pero también significa que las normales de la textura solo se pueden usar con ese objeto en particular. Y también significa que las normales de la textura solo se pueden usar con ese objeto y con ese mapeo de textura específico . Entonces, si desea rotar el mapeo de texturas de alguna manera, o alterarlo con alguna transformación UV, no tiene suerte.

Entonces, en general, lo que la gente usa son mapas normales donde las normales están en "espacio tangente". El espacio tangente es el espacio relativo al punto mapeado en la superficie 3D, donde la normal no modificada está en la dirección + Z, y los ejes X e Y apuntan a lo largo de los ejes U y V en relación con la superficie.

El espacio tangente esencialmente regulariza las normales. En el espacio tangente, el normal (0, 0, 1) siempre significa "sin modificar"; es lo normal que se obtiene al interpolar el vértice normal. Esto lleva a una serie de cosas útiles que puede hacer , una de las más importantes es almacenarlos en menos datos.

Dado que la Z siempre será positiva, puede calcularla en su sombreador a partir de los componentes X e Y. Como solo necesita 2 valores, puede usar (en la nomenclatura del formato de imagen OpenGL ) GL_RG8, un formato de 2 bytes por píxel en lugar de GL_RGBA8un 4 bytes por píxel ( GL_RGB8seguirá siendo 4 bytes por píxel). , ya que las GPU rellenarán cada píxel a 4 bytes). Aún mejor, puede comprimir esos dos valores , lo que lleva a un formato de 1 byte por píxel. Así que ha reducido el tamaño de su textura al 75% del mapa normal del espacio de objetos.

Antes de poder hablar sobre cualquier tipo de mapa normal, primero debe saber qué almacena. ¿Es un mapa normal de espacio de objetos, un mapa normal de espacio de tangente o algo más?

Nicol Bolas
fuente
Muy bien, entonces el primer tipo de mapa que describe es un mapa normal de espacio de objetos , ¿verdad? Este es el más colorido, porque almacena los componentes reales X, Y y Z de las normales. El segundo tipo, el mapa normal de espacio tangente , parece almacenar algo así como las perturbaciones de las normales en lugar de las normales. Leeré sobre el concepto de un espacio tangente y volveré a consultar más tarde.
Ailurus
Ok, entonces el espacio tangente de un punto en la superficie es simplemente el espacio de todos los vectores tangentes de ese punto. Sin embargo, en ese caso, no veo cómo lo normal como se ve desde el espacio tangente puede ser otra cosa que (0,0,1). En otras palabras, siempre esperaría que el mapa normal sea uniformemente azul (128,128,255). Sin embargo, el ejemplo que se muestra en la página de wikipedia ( en.wikipedia.org/wiki/Normal_mapping#How_it_works ) contiene otros colores. Entiendo cómo se puede usar este mapa para cambiar las normales, pero no cómo se calcula realmente.
Ailurus
@Ailurus: " Ok, entonces el espacio tangente de un punto en la superficie es simplemente el espacio de todos los vectores tangentes de ese punto " . No, no lo es. Es el espacio definido por la normalidad (no modificada) y la dirección de las coordenadas de textura en ese punto de la superficie. Regularizó el normal almacenado en la textura como relativo al mapeo de textura y el normal actual antes de las modificaciones.
Nicol Bolas
Probablemente la parte más difícil de un mapa normal es el mapeo en sí mismo (que incluye cómo calcular los vectores tangentes). ¿No está el cálculo de los vectores tangentes intrínsecamente ligados al mapeo / envoltura UV de la textura difusa Y a la geometría del objeto por completo? Dicho de otra manera: tiene dos mapas normales diferentes para un objeto, pero solo se calcula un campo tangente (y normal). Puede descubrir que no puede usar el campo tangente de manera consistente con dos texturas normales diferentes (aunque geométricamente podría encontrar asignaciones uv adecuadas, lo cual no es una tarea trivial).
teodron
@NicolBolas Ah, me confundí porque algunas fuentes afirman que los vectores T, B y N forman una base ortonormal, mientras que otros mencionan que esto no es necesariamente cierto.
Ailurus
3

Los mapas normales se mapean utilizando el llamado espacio tangente, que es esencialmente un espacio local basado en el espacio de textura del modelo. Esto debería responder a sus dos preguntas.

No depende del punto de vista porque este espacio no tiene nada que ver con la cámara. En el mapa normal, Z es la dirección hacia arriba. Si observa las normales de un modelo, la mayoría de los vectores normales apuntarán directamente desde la malla. La superficie de la malla es el espacio de textura del que estaba hablando, así que en ese sistema de coordenadas local, hacia arriba está la dirección "hacia afuera".

mazo
fuente
¡Gracias por aclarar esto! Sin embargo, no estoy usando una malla poligonal como superficie, sino una superficie paramétrica suave por partes . Por lo tanto, todas las normales se guardarían como apuntando en la dirección (0,0,1), ¿verdad?
Ailurus
1

Desplácese hacia abajo en esta página

Mire el dibujo B / N de la derecha debajo de los conjuntos de datos: esto (o al menos solía ser) conocido como dibujo de erizo, una representación de una superficie con cada una de sus normales dibujadas

Entonces, para comprender un mapa normal tradicional, piense en un erizo molesto con todas sus espinas sobresaliendo: cada una de esas espinas es normal a la superficie del erizo debajo de él.

Con respecto a su pregunta de esfera, si estuviera viviendo puramente en un espacio paramétrico, como con los trazadores de rayos, entonces el conjunto infinito de normales a la esfera simplemente crearía una esfera más grande, en un espacio teselado, es decir, el mundo que la computadora nos impone si queremos tiempo real, entonces tienes una aproximación puntiaguda de una esfera.

Ahora, este ejemplo se centró en un mapa normal del OBJETO: está definiendo las normales con respecto al objeto, y esto es invariable bajo cualquier rotación, traslación o escala, ya sea del objeto o la cámara o cualquier otra cosa, como se mencionó anteriormente, esto es solo un tipo de mapa normal pero es el más común

Mark Mullin
fuente
0

Creo que puede tener algunas ideas erróneas sobre lo que son los mapas normales. Básicamente, es una forma de simular el aspecto de algo lleno de baches cuando, de hecho, la geometría es completamente plana.

Los colores de un mapa normal son interpretados por un sombreador tecnológico y procesados ​​en función de la intensidad y dirección de la luz, así como la vista de su cámara. Esto significa que podría tener un piso de ladrillo, por ejemplo, que es completamente plano, con una textura plana, pero debido a que tiene un mapa normal con la misma forma de ladrillo, cuando mira a su alrededor, la luz parece rebotar hacia un lado de los ladrillos haciendo que parezca más 3D de lo que es.

Por supuesto, esto es solo una ilusión, pero es mucho más barato que tener una geometría compleja. Y no, los colores del mapa normal no cambian. Realmente solo representan valores para comparar en el sombreador. Estoy seguro de que alguien aquí podrá contactarte con mucho más detalle.

Sir Yakalot
fuente
Lo sé, pero gracias de todos modos por tu respuesta :)
Ailurus