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 ...
fuente
Respuestas:
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 deGL_RGBA8
un 4 bytes por píxel (GL_RGB8
seguirá 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?
fuente
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".
fuente
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
fuente
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.
fuente