Estoy comenzando con GLSL e implementé un sombreado diferido simple que genera G-buffer con posiciones, normales y albedo.
También he escrito un simple sombreador de luz puntual.
Ahora dibujo una esfera para el punto de luz y la salida entra en un búfer de iluminación.
El problema es, ¿cómo combino los resultados del búfer de iluminación al dibujar varias luces?
Por ejemplo, cuando estoy dibujando la segunda luz en el buffer de luz usando el sombreador de luz puntual, ¿cómo agrego la primera luz a la segunda luz en el buffer de iluminación? Quiero decir, ¿no puedes leer y escribir en el mismo búfer de salida?
opengl
shaders
glsl
deferred-rendering
JBeurer
fuente
fuente
Para mi renderizador diferido, agrego todas las luces en un objetivo de renderizado de luz usando la información del g-buffer y luego muestro ese objetivo de render para la intensidad de la luz mientras creo mi imagen final de backbuffer.
Básicamente, ejecuto toda la geometría de mi juego a través de mi pase de geometría para construir los g-buffers. Desde allí, alimento los g-buffers a mi sombreador de paso de luz. Cada luz se ejecuta a través del pase utilizando un quad de pantalla completa. De esta manera, mi sombreador de píxeles puede calcular la intensidad de la luz para todas las superficies visibles desde el búfer g y luego agregarlas al objetivo de representación de luz. Simplemente agregue la intensidad de la luz para cada luz al búfer de luz, pero asegúrese de ajustar la intensidad de 0 a 1.
Todo lo que necesitaría hacer para manejar diferentes tipos de luces (punto, foco, paralelo) es hacer que la luz pase más robusta posiblemente utilizando un búfer constante para designar qué procedimientos de iluminación ejecutar.
fuente
Es probable que haya una respuesta mejor que esta, pero sé que si en su sombreador repite el código necesario para hacer una segunda luz, puede procesar dos luces en un solo objeto en lugar de uno. Es necesario agrupar una gran cantidad de código para la segunda luz y parece un poco redundante, pero sé que funciona. Sin embargo, creo que, como es de esperar que alguien le señale, podría haber una solución más elegante.
fuente