Un mapa de luz es una estructura de datos utilizada en el mapa de luz , una forma de almacenamiento en caché de superficies en la que el brillo de las superficies en una escena virtual se calcula previamente y se almacena en mapas de textura para su uso posterior. Los mapas de luz se aplican con mayor frecuencia a objetos estáticos en aplicaciones que utilizan gráficos de computadora en 3D en tiempo real , como los videojuegos , para proporcionar efectos de iluminación como la iluminación global a un costo computacional relativamente bajo.
Historia
John Carmack 's Quake fue el primer juego de ordenador para utilizar mapas de luz para aumentar la representación . [1] Antes de que se inventaran los mapas de luz, las aplicaciones en tiempo real se basaban exclusivamente en el sombreado de Gouraud para interpolar la iluminación de vértices para las superficies. Esto solo permitía información de iluminación de baja frecuencia y podía crear artefactos de recorte cerca de la cámara sin una interpolación de perspectiva correcta. El mallado de discontinuidad a veces se usaba especialmente con soluciones de radiosidad para mejorar de manera adaptativa la resolución de la información de iluminación de vértices, sin embargo, el costo adicional en la configuración primitiva para la rasterización en tiempo real era generalmente prohibitivo. El rasterizador de software de Quake usó el almacenamiento en caché de superficie para aplicar cálculos de iluminación en el espacio de textura una vez cuando los polígonos aparecen inicialmente dentro del frustum de visualización (creando efectivamente versiones "iluminadas" temporales de las texturas actualmente visibles a medida que el espectador negocia la escena).
A medida que el hardware de gráficos 3D de consumo capaz de texturizar múltiples , el mapeo de luz se hizo más popular y los motores comenzaron a combinar mapas de luz en tiempo real como una capa secundaria de textura de mezcla múltiple ...
Limitaciones
Los mapas de luz se componen de lumels [2] (elementos de iluminación ), análogos a los texels en Texture Mapping . Los lúmenes más pequeños producen un mapa de luz de mayor resolución , proporcionando detalles de iluminación más finos al precio de un rendimiento reducido y un mayor uso de la memoria. Por ejemplo, una escala de mapa de luz de 4 lúmenes por unidad mundial daría una calidad más baja que una escala de 16 lúmenes por unidad mundial. Por lo tanto, al utilizar la técnica, los diseñadores de niveles y los artistas 3D a menudo tienen que hacer un compromiso entre rendimiento y calidad; Si se utilizan mapas de luz de alta resolución con demasiada frecuencia, la aplicación puede consumir recursos del sistema excesivos, lo que afectará negativamente al rendimiento. La resolución y el escalado del mapa de luz también pueden estar limitados por la cantidad de espacio de almacenamiento en disco, el ancho de banda / tiempo de descarga o la memoria de textura disponible para la aplicación. Algunas implementaciones intentan empaquetar múltiples mapas de luz en un proceso conocido como atlasing [3] para ayudar a eludir estas limitaciones.
La resolución y la escala del mapa de luz son dos cosas diferentes. La resolución es el área, en píxeles, disponible para almacenar uno o más mapas de luz de la superficie. La escala determina el número de superficies individuales que pueden caber en un mapa de luz. Los valores de escala más bajos significan mayor calidad y más espacio ocupado en un mapa de luz. Los valores de escala más altos significan menor calidad y menos espacio ocupado. Una superficie puede tener un mapa de luz que tiene la misma área, por lo que una proporción de 1: 1 o menor, por lo que el mapa de luz se estira para ajustarse.
Los mapas de luz en los juegos suelen ser mapas de texturas de colores o colores por vértice. Por lo general, son planos, sin información sobre la dirección de la luz, mientras que algunos motores de juegos usan múltiples mapas de luz para proporcionar información direccional aproximada para combinar con mapas normales. Los mapas de luz también pueden almacenar componentes precalculados separados de información de iluminación para iluminación semidinámica con sombreadores, como oclusión ambiental y sombreado de luz solar.
Creación
Al crear mapas de luz, se puede utilizar cualquier modelo de iluminación, ya que la iluminación se calcula previamente y el rendimiento en tiempo real no siempre es una necesidad. Por lo general, se utilizan una variedad de técnicas que incluyen la oclusión ambiental , la iluminación directa con bordes de sombra muestreados y soluciones de luz de rebote de radiosidad total [4] . Los paquetes 3D modernos incluyen complementos específicos para aplicar coordenadas UV de mapas de luz, hacer atlas de múltiples superficies en hojas de textura única y renderizar los propios mapas. Alternativamente, las canalizaciones del motor del juego pueden incluir herramientas de creación de mapas de luz personalizados. Una consideración adicional es el uso de texturas DXT comprimidas que están sujetas a artefactos de bloqueo; las superficies individuales no deben colisionar en trozos de texel de 4x4 para obtener mejores resultados.
En todos los casos, las sombras suaves para la geometría estática son posibles si se utilizan pruebas de oclusión simples (como el trazado de rayos básico ) para determinar qué lúmenes son visibles para la luz. Sin embargo, la suavidad real de las sombras está determinada por la forma en que el motor interpola los datos de lumeles en una superficie, y puede dar como resultado un aspecto pixelado si los lumeles son demasiado grandes. Ver filtrado de texturas .
Los mapas de luz también se pueden calcular en tiempo real [5] para obtener efectos de iluminación de colores de buena calidad que no sean propensos a los defectos del sombreado de Gouraud, aunque la creación de sombras aún debe realizarse utilizando otro método, como los volúmenes de sombras de la plantilla o el mapeo de sombras , como real. El trazado de rayos en el tiempo es demasiado lento para funcionar en hardware moderno en la mayoría de los motores 3D.
El mapeo de fotones se puede utilizar para calcular la iluminación global para mapas de luz.
Alternativas
Iluminación de vértice
En la iluminación de vértices , la información de iluminación se calcula por vértice y se almacena en atributos de color de vértice . Las dos técnicas pueden combinarse, por ejemplo, valores de color de vértice almacenados para mallas de alto detalle, mientras que los mapas de luz solo se utilizan para geometría más gruesa.
Mapeo de discontinuidad
En el mapeo de discontinuidades , la escena puede subdividirse y recortarse a lo largo de cambios importantes en la luz y la oscuridad para definir mejor las sombras.
Ver también
- Hornear (gráficos por computadora)
- Mapa del entorno
- Oclusión ambiental del espacio de la pantalla
- Shader
- Mapeado de texturas
Referencias
- ^ Abrash, Michael. "Modelo de iluminación de Quake: Caché de superficie" . www.bluesnews.com . Consultado el 7 de septiembre de 2015 .
- ^ Channa, Keshav (21 de julio de 2003). "Flipcode - Light Mapping - Teoría e implementación" . www.flipcode.com . Consultado el 7 de septiembre de 2015 .
- ^ "Libro blanco sobre texturas de Atlas" ( PDF ) . nvidia.com . NVIDIA . 2004-07-07 . Consultado el 7 de septiembre de 2015 .
- ^ Jason Mitchell, Gary McTaggart, Chris Green, Sombreado en el motor fuente de Valve . ( PDF ) Consultado el 7 de junio de 2019.
- ^ 16 de noviembre de 2003. Dynamic Lightmaps en OpenGL . Joshbeam.com Consultado el 7 de julio de 2014.