¿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.
Respuestas:
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í
fuente