Iluminación rápida con múltiples luces.

10

¿Cómo puedo implementar una iluminación rápida con múltiples luces?

No quiero restringir al jugador, puede colocar un número ilimitado y posiblemente luces superpuestas (puntos) en el nivel.

El problema es que los sombreadores que contienen bucles dinámicos que serían necesarios para calcular la iluminación tienden a ser muy lentos.

Tuve la idea de que si fuera posible en tiempo de compilación compilar un sombreador n veces donde n es el número de luces. Si se conoce el número n en tiempo de compilación, los bucles se pueden desenrollar automáticamente. ¿Es posible generar n versiones del mismo sombreador con solo un número diferente de luces?

En el tiempo de ejecución, podría decidir qué sombreador usar para qué parte del nivel.

codymanix
fuente
Si el jugador agrega dinámicamente las luces, ¿cómo puede un sombreador "compiletime" ser la respuesta correcta?
Seth Battin
Como escribí, el compilador podría generar sombreadores para 1,2,3 ... luces y, en tiempo de ejecución, podría decidir cuál usar para qué parte del nivel
codymanix
los sombreadores de tiempo de compilación necesitan saber dónde se colocarán las luces, cualquier dinámica de las luces los arruinará
monstruo de trinquete
solo el número de luces debe ser dinámico. Las posiciones se proporcionarán como parámetro.
codymanix
1
Parece que tienes tu respuesta. Conoces el número máximo de luces y el rango de posiciones posibles.
cenizas999

Respuestas:

8

Creo que lo que estás buscando se llama Renderizado diferido. Es una técnica de renderizado que escala extremadamente bien con muchas luces, tan bien que puede usarse para iluminación indirecta dinámica. Eso significa miles de luces en la pantalla.

Básicamente es una técnica en la que primero representa todos sus datos de geometría (posición, normal, profundidad) en un búfer de píxeles intermedio (llamado G-Buffer). Luego, en una segunda pasada, representa una forma de luz junto con sus parámetros. El sombreador de este segundo pase toma la información del G-Buffer, aplica el cálculo de la luz y luego la combina en la imagen final.

Puede encontrar detalles de implementación aquí

akaltar
fuente