
Inclinación : -10 °
Guiñada : -10 °
Campo de visión : 80 °
En gráficos por computadora , el mapeo cúbico es un método de mapeo de entornos que utiliza las seis caras de un cubo como forma del mapa. El entorno se proyecta sobre las caras del cubo y se almacena como seis texturas cuadradas, o bien se despliega en seis regiones de una sola textura.
El mapa cúbico se genera renderizando primero la escena seis veces desde un punto de vista, con las vistas definidas por un tronco de visión de 90 grados que representa cada cara del cubo. [ 1 ] O si primero se considera que el entorno se proyecta sobre una esfera , entonces cada cara del cubo es su proyección gnomónica .
En la mayoría de los casos, se prefiere el mapeo cúbico al método anterior de mapeo esférico, ya que elimina muchos de los problemas inherentes a este último, como la distorsión de la imagen, la dependencia del punto de vista y la ineficiencia computacional. Además, el mapeo cúbico ofrece una capacidad mucho mayor para admitir la renderización en tiempo real de reflejos en comparación con el mapeo esférico, dado que la combinación de ineficiencia y dependencia del punto de vista limita considerablemente la aplicación del mapeo esférico cuando el punto de vista cambia constantemente.
Las variantes del mapeo cúbico también se utilizan comúnmente en la proyección de vídeo de 360 grados . [ 2 ]
Historia
El mapeo cúbico fue propuesto por primera vez en 1986 por Ned Greene en su artículo "Mapeo de entornos y otras aplicaciones de proyecciones mundiales" [ 3 ] , diez años después de que Jim Blinn y Martin Newell presentaran el mapeo de entornos . Sin embargo, las limitaciones de hardware en la capacidad de acceder a seis imágenes de textura simultáneamente hicieron inviable la implementación del mapeo cúbico sin mayores avances tecnológicos. Este problema se solucionó en 1999 con el lanzamiento de la Nvidia GeForce 256. Nvidia promocionó el mapeo cúbico en hardware como "una característica revolucionaria de calidad de imagen de la GeForce 256 que ... permitirá a los desarrolladores crear reflejos precisos en tiempo real. Acelerado por hardware, el mapeo de entornos cúbicos liberará la creatividad de los desarrolladores para usar reflejos y efectos de iluminación especular para crear entornos interesantes e inmersivos" [ 4 ] . Hoy en día, el mapeo cúbico todavía se utiliza en una variedad de aplicaciones gráficas como un método preferido de mapeo de entornos.
Ventajas
El mapeo cúbico se prefiere a otros métodos de mapeo de entornos debido a su relativa simplicidad. Además, produce resultados similares a los obtenidos mediante el trazado de rayos , pero es mucho más eficiente computacionalmente : la moderada reducción en la calidad se compensa con grandes mejoras en la eficiencia.
El mapeo esférico, anterior al mapeo cúbico , presentaba numerosos defectos inherentes que lo hacían poco práctico para la mayoría de las aplicaciones. El mapeo esférico depende del punto de vista, lo que implica la necesidad de una textura diferente para cada perspectiva. Por lo tanto, en aplicaciones con puntos de vista móviles, sería necesario generar dinámicamente un nuevo mapeo esférico para cada perspectiva (o pregenerar un mapeo para cada una). Además, una textura mapeada sobre la superficie de una esfera debe ser estirada y comprimida, lo que provoca deformaciones y distorsiones (especialmente en los bordes). Si bien estos defectos de imagen pueden reducirse mediante ciertas técnicas como el preestiramiento, esto añade una mayor complejidad al mapeo esférico.
El mapeo con paraboloides ofrece cierta mejora respecto a las limitaciones del mapeo con esferas; sin embargo, requiere dos pasadas de renderizado, además de operaciones especiales de deformación de imágenes y cálculos más complejos.
Por el contrario, el mapeo cúbico requiere solo una pasada de renderizado y, debido a su simplicidad, resulta muy fácil de comprender y generar para los desarrolladores. Además, el mapeo cúbico utiliza la resolución completa de la imagen de textura, a diferencia del mapeo esférico y parabólico, lo que permite usar imágenes de menor resolución para lograr la misma calidad. Si bien el manejo de las uniones del mapa cúbico presenta dificultades, se han desarrollado algoritmos para gestionar su comportamiento y obtener una reflexión sin fisuras.
Desventajas
Las desventajas incluyen discontinuidad, un alto volumen de indexación, interpolación lineal de vectores (cuando se calcula en hardware), filtrado a través de los límites del mapa de texturas y posiblemente la necesidad de múltiples texturas. [ 5 ]
Aplicaciones
Resaltados especulares estables
Los programas de diseño asistido por ordenador (CAD) utilizan reflejos especulares como indicadores visuales para transmitir la curvatura de la superficie al renderizar objetos 3D. Sin embargo, muchos programas CAD presentan problemas en el muestreo de reflejos especulares, ya que los cálculos de iluminación especular se realizan únicamente en los vértices de la malla que representa el objeto, y se utiliza la interpolación para estimar la iluminación en toda la superficie del objeto. Los problemas surgen cuando los vértices de la malla no son lo suficientemente densos, lo que resulta en un muestreo insuficiente de la iluminación especular. Esto, a su vez, produce reflejos con un brillo proporcional a la distancia desde los vértices de la malla, comprometiendo en última instancia los indicadores visuales que señalan la curvatura. Sin embargo, este problema no se puede solucionar simplemente creando una malla más densa, ya que esto puede reducir considerablemente la eficiencia de la renderización del objeto.
Los mapas cúbicos ofrecen una solución bastante sencilla y eficiente para renderizar reflejos especulares estables. Se pueden codificar múltiples reflejos especulares en una textura de mapa cúbico, a la que se puede acceder interpolando el vector de reflexión de la superficie para obtener las coordenadas. En comparación con el cálculo de la iluminación en vértices individuales, este método proporciona resultados más nítidos que representan la curvatura con mayor precisión. Otra ventaja es su buena escalabilidad, ya que se pueden codificar reflejos especulares adicionales en la textura sin aumentar el coste de renderizado. Sin embargo, este enfoque tiene la limitación de que las fuentes de luz deben ser distantes o infinitas, aunque esto suele ser habitual en los programas CAD.
Cajas de cielo

Quizás la aplicación más avanzada del mapeo cúbico consiste en crear imágenes panorámicas del cielo prerrenderizadas, que luego el motor gráfico renderiza como caras de un cubo a una distancia prácticamente infinita, con el punto de vista ubicado en el centro del cubo. La proyección en perspectiva de las caras del cubo, realizada por el motor gráfico, deshace los efectos de la proyección del entorno para crear el mapa cúbico, de modo que el observador experimenta la ilusión de estar rodeado por la escena que se utilizó para generar el cielo. Esta técnica se ha popularizado en los videojuegos, ya que permite a los diseñadores añadir entornos complejos (aunque no explorables) a un juego prácticamente sin afectar al rendimiento.
Iluminación de tragaluces
Los mapas cúbicos pueden ser útiles para modelar con precisión la iluminación exterior. Modelar la luz solar como una única fuente de luz infinita simplifica demasiado la iluminación exterior y da como resultado una iluminación poco realista. Si bien el sol proporciona mucha luz, la dispersión de los rayos en la atmósfera hace que todo el cielo actúe como fuente de luz (a menudo denominada iluminación del cielo). Sin embargo, mediante el uso de un mapa cúbico, se puede capturar la contribución difusa de la iluminación del cielo. A diferencia de los mapas de entorno, donde se utiliza el vector de reflexión, este método accede al mapa cúbico basándose en el vector normal de la superficie para proporcionar una aproximación rápida de la iluminación difusa del cielo. La única desventaja de este método es que calcular mapas cúbicos para representar adecuadamente un cielo es muy complejo; un proceso reciente consiste en calcular la base de armónicos esféricos que mejor representa la iluminación difusa de baja frecuencia del mapa cúbico. No obstante, se ha realizado una cantidad considerable de investigación para modelar eficazmente la iluminación del cielo.
Reflexión dinámica

El mapeo de entorno básico utiliza un mapa cúbico estático : aunque el objeto se puede mover y distorsionar, el entorno reflejado permanece constante. Sin embargo, una textura de mapa cúbico se puede actualizar continuamente para representar un entorno que cambia dinámicamente (por ejemplo, árboles meciéndose con el viento). Una forma sencilla, aunque costosa, de generar reflejos dinámicos consiste en construir los mapas cúbicos en tiempo de ejecución para cada fotograma. Si bien esto es mucho menos eficiente que el mapeo estático debido a los pasos de renderizado adicionales, aún se puede realizar a velocidades interactivas.
Sin embargo, esta técnica no funciona bien cuando hay varios objetos reflectantes. Generalmente, se requiere un mapa de entorno dinámico único para cada objeto reflectante. Además, surgen complicaciones adicionales si los objetos reflectantes pueden reflejarse entre sí : se pueden generar mapas de cubos dinámicos de forma recursiva, aproximando los efectos que normalmente se generan mediante el trazado de rayos.
Iluminación global
En ICCVG 2002 se presentó un algoritmo para el cálculo de la iluminación global a velocidades interactivas utilizando una estructura de datos de mapa cúbico. [ 6 ]
Texturas de proyección
Otra aplicación que se ha popularizado en los videojuegos es el mapeo de texturas proyectivas . Este método se basa en mapas cúbicos para proyectar imágenes de un entorno sobre la escena circundante; por ejemplo, una fuente de luz puntual se vincula a un mapa cúbico que es una imagen panorámica tomada desde el interior de una jaula de linterna o el marco de una ventana a través de la cual se filtra la luz. Esto permite a los desarrolladores de videojuegos lograr una iluminación realista sin tener que complicar la geometría de la escena ni recurrir a costosos cálculos de volumen de sombras en tiempo real .
Direccionamiento de memoria

Una textura cúbica indexa seis mapas de textura del 0 al 5 en orden: X positivo, X negativo, Y positivo, Y negativo, Z positivo, Z negativo. [ 7 ] [ 8 ] Las imágenes se almacenan con el origen en la esquina inferior izquierda de la imagen. Las caras X e Y positivas deben invertir la coordenada Z y la cara Z negativa debe negar la coordenada X. Si se dan la cara y las coordenadas de textura, el vector no normalizadose puede calcular mediante la función:
void convert_cube_uv_to_xyz ( int index , float u , float v , float * x , float * y , float * z ) { // convierte el rango de 0 a 1 a −1 a 1 float uc = 2.0f * u - 1.0f ; float vc = 2.0f * v - 1.0f ; switch ( index ) { case 0 : * x = 1.0f ; * y = vc ; * z = - uc ; break ; // X positivo case 1 : * x = -1.0f ; * y = vc ; * z = uc ; break ; // X negativo case 2 : * x = uc ; * y = 1.0f ; * z = - vc ; break ; // Y positivo case 3 : * x = uc ; * y = -1.0f ; * z = vc ; break ; // Caso Y negativo 4 : * x = uc ; * y = vc ; * z = 1.0f ; break ; // Caso Z positivo 5 : * x = - uc ; * y = vc ; * z = -1.0f ; break ; // Z negativo } }Asimismo, un vectorse puede convertir al índice de cara y a las coordenadas de texturacon la función:
void convert_xyz_to_cube_uv ( float x , float y , float z , int * index , float * u , float * v ) { float absX = fabs ( x ); float absY = fabs ( y ); float absZ = fabs ( z );int esXPositivo = x > 0 ? 1 : 0 ; int esYPositivo = y > 0 ? 1 : 0 ; int esZPositivo = z > 0 ? 1 : 0 ;flotar maxAxis , uc , vc ;// X positivo si ( isXPositive && absX >= absY && absX >= absZ ) { // u (0 a 1) va de +z a −z // v (0 a 1) va de −y a +y maxAxis = absX ; uc = - z ; vc = y ; * index = 0 ; } // X negativo si ( ! isXPositive && absX >= absY && absX >= absZ ) { // u (0 a 1) va de −z a +z // v (0 a 1) va de −y a +y maxAxis = absX ; uc = z ; vc = y ; * index = 1 ; } // Y positivo si ( isYPositive && absY >= absX && absY >= absZ ) { // u (0 a 1) va de −x a +x // v (0 a 1) va de +z a −z maxAxis = absY ; uc = x ; vc = - z ; * index = 2 ; } // Y negativo si ( ! isYPositive && absY >= absX && absY >= absZ ) { // u (0 a 1) va de −x a +x // v (0 a 1) va de −z a +z maxAxis = absY ; uc = x ; vc = z ; * index = 3 ; } // Z positivo si ( isZPositive && absZ >= absX && absZ >= absY ) { // u (0 a 1) va de −x a +x // v (0 a 1) va de −y a +y maxAxis = absZ ; uc = x ; vc = y ; * index = 4; } // Z negativo si ( ! isZPositive && absZ >= absX && absZ >= absY ) { // u (0 a 1) va de +x a −x // v (0 a 1) va de −y a +y maxAxis = absZ ; uc = - x ; vc = y ; * index = 5 ; }// Convertir el rango de −1 a 1 a 0 a 1 * u = 0.5f * ( uc / maxAxis + 1.0f ); * v = 0.5f * ( vc / maxAxis + 1.0f ); }Véase también
Referencias
- ↑ Fernando, R. y Kilgard MJ (2003). El tutorial de gráficos por computadora: La guía definitiva para gráficos programables en tiempo real. (1.ª ed.). Addison-Wesley Longman Publishing Co., Inc. Boston, MA, EE. UU. Capítulo 7: Técnicas de mapeo de entorno
- ↑ stevewhims (06/01/2021). "Mapeo de entorno cúbico (Direct3D 9) - Aplicaciones Win32" . learn.microsoft.com . Consultado el 21/08/2024 .
- ↑ Greene, N (1986). "Mapeo ambiental y otras aplicaciones de proyecciones mundiales". IEEE Comput. Graph. Appl . 6 (11): 21– 29. doi : 10.1109/MCG.1986.276658 . S2CID 11301955 .
- ↑ Nvidia, enero de 2000. Informe técnico: Reflejos perfectos y efectos de iluminación especular con mapeo de entorno cúbico. Archivado el 4 de octubre de 2008 en Wayback Machine.
- ↑ Zimmons, Paul (10 de diciembre de 1999). COMP238: Gráficos rasterizados (mapeos ambientales esféricos, cúbicos y parabólicos) (PDF) . UNC-Chapel Hill .
- ↑ http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.95.946
- ↑ "Introducción a las texturas en Direct3D 11 - Aplicaciones Win32 | Microsoft Docs" . 23 de agosto de 2019.
- ↑ "Capítulo 19. Iluminación basada en imágenes" .
- Mapeo de texturas
