En gráficos por computadora en 3D , el mapeo normal o mapeo de protuberancias Dot3 es una técnica de mapeo de texturas que se utiliza para simular la iluminación de protuberancias y abolladuras, una implementación del mapeo de protuberancias . Se utiliza para agregar detalles sin usar más polígonos . [1] Un uso común de esta técnica es mejorar en gran medida la apariencia y los detalles de un modelo de polígonos bajos al generar un mapa normal a partir de un modelo de polígonos altos o un mapa de altura .
Los mapas normales comúnmente se almacenan como imágenes RGB regulares donde los componentes RGB corresponden a las coordenadas X, Y y Z, respectivamente, de la normal de la superficie .
En 1978, Jim Blinn describió cómo las normales de una superficie podrían ser perturbadas para hacer que las caras geométricamente planas tengan una apariencia detallada. [2] La idea de tomar detalles geométricos de un modelo de alto polígono fue introducida en "Fitting Smooth Surfaces to Dense Polygon Meshes" por Krishnamurthy y Levoy, Proc. SIGGRAPH 1996, [3] donde este enfoque se utilizó para crear mapas de desplazamiento sobre nurbs . En 1998, se presentaron dos artículos con ideas clave para transferir detalles con mapas normales de mallas de alto a bajo polígono: "Appearance Preserving Simplification", por Cohen et al. SIGGRAPH 1998, [4] y "A general method for preserving attribute values on simplifyes" por Cignoni et al. IEEE Visualization '98. [5] El primero introdujo la idea de almacenar normales de superficie directamente en una textura, en lugar de desplazamientos, aunque requería que el modelo de bajo detalle fuera generado por un algoritmo de simplificación restringido particular. Este último presentó un enfoque más simple que desacopla la malla poligonal alta y baja y permite la recreación de cualquier atributo del modelo de alto detalle (color, coordenadas de textura , desplazamientos , etc.) de una manera que no depende de cómo se creó el modelo de bajo detalle. La combinación de almacenar normales en una textura, con el proceso de creación más general, todavía se utiliza en la mayoría de las herramientas disponibles actualmente.
La orientación de los ejes de coordenadas difiere según el espacio en el que se codificó el mapa normal. Una implementación sencilla codifica las normales en el espacio de objetos de modo que los componentes rojo, verde y azul se correspondan directamente con las coordenadas X, Y y Z. En el espacio de objetos, el sistema de coordenadas es constante.
Sin embargo, los mapas normales del espacio de objetos no se pueden reutilizar fácilmente en varios modelos, ya que la orientación de las superficies difiere. Dado que los mapas de textura de color se pueden reutilizar libremente y los mapas normales tienden a corresponderse con un mapa de textura particular, es deseable para los artistas que los mapas normales tengan la misma propiedad.
La reutilización normal de mapas es posible gracias a la codificación de mapas en el espacio tangente . El espacio tangente es un espacio vectorial , que es tangente a la superficie del modelo. El sistema de coordenadas varía suavemente (según las derivadas de la posición con respecto a las coordenadas de textura) a lo largo de la superficie.
Las funciones normales del espacio tangente se pueden identificar por su color violeta dominante, que corresponde a un vector que mira directamente hacia afuera desde la superficie. Ver Cálculo.
Las normales de superficie se utilizan en gráficos de computadora principalmente con fines de iluminación, mediante la imitación de un fenómeno llamado reflexión especular . Dado que la imagen visible de un objeto es la luz que rebota en su superficie, la información de luz obtenida de cada punto de la superficie se puede calcular en su espacio tangente en ese punto.
Para cada espacio tangente de una superficie en el espacio tridimensional, hay dos vectores que son perpendiculares a cada vector del espacio tangente. Estos vectores se denominan vectores normales y la elección entre estos dos vectores proporciona una descripción de cómo está orientada la superficie en ese punto, ya que la información de la luz depende del ángulo de incidencia entre el rayo y el vector normal y la luz solo será visible si . En tal caso, la reflexión del rayo con dirección a lo largo del vector normal viene dada por
Intuitivamente, esto significa que solo se puede ver la cara exterior de un objeto si se mira desde fuera, y solo se puede ver la cara interior si se mira desde dentro. Hay que tener en cuenta que la información luminosa es local, por lo que la superficie no tiene por qué ser orientable en su conjunto. Por eso, aunque espacios como la banda de Möbius y la botella de Klein no sean orientables, es posible visualizarlos.
Las normales se pueden especificar con una variedad de sistemas de coordenadas. En gráficos de computadora, es útil calcular las normales en relación con el plano tangente de la superficie. Esto es útil porque las superficies en las aplicaciones experimentan una variedad de transformaciones, como en el proceso de renderización o en animaciones esqueléticas, y por lo tanto es importante que la información del vector normal se conserve bajo estas transformaciones. Algunos ejemplos de tales transformaciones incluyen transformación, rotación, corte y escala, proyección en perspectiva [6] o las animaciones esqueléticas en un personaje con detalles finos.
Para fines de gráficos de computadora, la representación más común de una superficie es una triangulación y, como resultado, el plano tangente en un punto se puede obtener mediante la interpolación entre los planos que contienen los triángulos que intersecan ese punto. De manera similar, para superficies paramétricas con espacios tangentes, las parametrizaciones producirán derivadas parciales, y estas derivadas se pueden usar como base de los espacios tangentes en cada punto .
Para encontrar la perturbación en la normal, el espacio tangente debe calcularse correctamente. [7] La mayoría de las veces, la normal se perturba en un sombreador de fragmentos después de aplicar las matrices de modelo y vista [ cita requerida ] . Normalmente, la geometría proporciona una normal y una tangente. La tangente es parte del plano tangente y se puede transformar simplemente con la parte lineal de la matriz (el 3x3 superior). Sin embargo, la normal debe transformarse mediante la transposición inversa . La mayoría de las aplicaciones querrán que la bitangente coincida con la geometría transformada (y las UV asociadas). Entonces, en lugar de forzar que la bitangente sea perpendicular a la tangente, generalmente es preferible transformar la bitangente como la tangente. Sea t tangente, b bitangente, n normal, M 3x3 la parte lineal de la matriz del modelo y V 3x3 la parte lineal de la matriz de vista.
Para calcular la iluminación lambertiana (difusa) de una superficie, el vector unitario desde el punto de sombreado hasta la fuente de luz se puntea con el vector unitario normal a esa superficie, y el resultado es la intensidad de la luz en esa superficie. Imagine un modelo poligonal de una esfera: solo puede aproximarse a la forma de la superficie. Al utilizar un mapa de bits de 3 canales texturizado a lo largo del modelo, se puede codificar información de vector normal más detallada. Cada canal en el mapa de bits corresponde a una dimensión espacial (X, Y y Z). Estas dimensiones espaciales son relativas a un sistema de coordenadas constante para mapas normales del espacio de objetos, o a un sistema de coordenadas que varía suavemente (basado en las derivadas de la posición con respecto a las coordenadas de la textura) en el caso de mapas normales del espacio tangente. Esto agrega mucho más detalle a la superficie de un modelo, especialmente junto con técnicas de iluminación avanzadas.
Los vectores de la unidad normal correspondientes a las coordenadas de textura u,v se asignan a mapas normales. Solo están presentes los vectores que apuntan hacia el observador (z: 0 a -1 para la orientación para zurdos ), ya que los vectores de las geometrías que apuntan en dirección contraria al observador nunca se muestran. La asignación es la siguiente:
X: -1 a +1 : Rojo: 0 a 255 Y: -1 a +1 : Verde: 0 a 255 Z: 0 a -1 : Azul: 128 a 255
verde claro amarillo claro cian oscuro azul claro rojo claro azul oscuro magenta oscuro
Dado que se utilizará una normal en el cálculo del producto escalar para el cálculo de la iluminación difusa, podemos ver que {0, 0, –1} se reasignaría a los valores {128, 128, 255}, lo que da ese tipo de color azul cielo que se ve en los mapas normales (la coordenada azul (z) es la coordenada de perspectiva (profundidad) y las coordenadas planas RG-xy en la pantalla). {0,3, 0,4, –0,866} se reasignaría a los valores ({0,3, 0,4, –0,866}/2+{0,5, 0,5, 0,5})*255={0,15+0,5, 0,2+0,5, -0,433+0,5}*255={0,65, 0,7, 0,067}*255={166, 179, 17} ( ). El signo de la coordenada z (canal azul) debe invertirse para que coincida con el vector normal del mapa normal con el del ojo (el punto de vista o la cámara) o el vector de luz. Dado que los valores z negativos significan que el vértice está delante de la cámara (en lugar de detrás de ella), esta convención garantiza que la superficie brille con la máxima intensidad precisamente cuando el vector de luz y el vector normal coinciden. [8]
La representación interactiva de mapas normales originalmente solo era posible en PixelFlow, una máquina de representación paralela construida en la Universidad de Carolina del Norte en Chapel Hill . [ cita requerida ] Más tarde fue posible realizar el mapeo normal en estaciones de trabajo SGI de alta gama utilizando operaciones de renderizado de múltiples pasadas y framebuffer [9] o en hardware de PC de gama baja con algunos trucos utilizando texturas con paleta. Sin embargo, con la llegada de los sombreadores en las computadoras personales y las consolas de juegos, el mapeo normal se generalizó a principios de la década de 2000, y algunos de los primeros juegos en implementarlo fueron Evolva (2000), Giants: Citizen Kabuto y Virtua Fighter 4 (2001). [10] [11] La popularidad del mapeo normal para la renderización en tiempo real se debe a su buena relación calidad-requisitos de procesamiento en comparación con otros métodos para producir efectos similares. Gran parte de esta eficiencia es posible gracias al escalado de detalles indexado por distancia , una técnica que disminuye selectivamente el detalle del mapa normal de una textura determinada (cf. mipmapping ), lo que significa que las superficies más distantes requieren una simulación de iluminación menos compleja. Muchos procesos de creación utilizan modelos de alta resolución integrados en modelos de juego de resolución baja o media aumentados con mapas normales.
El mapeo normal básico se puede implementar en cualquier hardware que admita texturas paletizadas. La primera consola de juegos en tener hardware especializado en mapeo normal fue Sega Dreamcast . Sin embargo, la Xbox de Microsoft fue la primera consola en usar ampliamente el efecto en juegos minoristas. De las consolas de sexta generación [ cita requerida ] , solo la GPU de PlayStation 2 carece de soporte de mapeo normal incorporado, aunque se puede simular utilizando las unidades vectoriales del hardware de PlayStation 2. Los juegos para Xbox 360 y PlayStation 3 dependen en gran medida del mapeo normal y fueron la primera generación de consolas de juegos en hacer uso del mapeo de paralaje . Se ha demostrado que Nintendo 3DS admite el mapeo normal, como lo demuestran Resident Evil: Revelations y Metal Gear Solid 3: Snake Eater .