Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Novato (muy novato) en el tema de Deferred Rendering.

Iniciado por PIM, 02 de Marzo de 2014, 07:54:55 PM

« anterior - próximo »

PIM

Hola amigos de esta estupenda web.  De nuevo molestándolos con dudas respecto a este tema. Ya he leido varios tutoriales (en inglés y bastante escuetos y otros demasiado técnicos). Y me gustaría saber si alguien que tenga experiencia con el Deferred Rendering en OpenGL me pueda ayudar.

Más o menos tengo la idea básica del G-buffer pero donde de plano no doy es con las luces.

Sé que mediante el uso de los FBO´s debo almacenar los datos del color (difuso), las normales, la posición del vértice y el z-buffer. Hasta ahí más o menos pero y las luces... ¿Cómo las proceso y las incorporo en mi fragment shader?.

Si alguien se pudiera tomar la molestia de escribir código de manera que lo pueda entender, le estaría muy agradecido.

De antemano muchas gracias.
;)


XÑA

Las luces las procesas después. Una vez que tienes todas las texturas con la información lo que haces es renderizar un quad de toda la pantalla ( aquí puedes optimizar y restringirlo a la zona 2D que afecta esta luz) por cada luz. Por eso es tan rápido, porqué después cada luz sólo lee los valores que hay en cada pixel y le aplicas la iluminación. Bueno, es rápido si tienes muchas luces, si no....Pues....

Con Forward rendering sería así:

Activar el Blending
Para cada luz
   Renderizar polígonos afectados por esta luz

Con Deferred sería:

Renderizar la escena a GBuffers
Para cada luz
   Renderizar un Quad de la zona que afecta esta luz.
   En el Shader:

    float4 diffuse=texture(diffuse,xy);
    float4 normal=texture(normal,xy);
    float4 tangent=texture(tanget,xy);


PIM

#2
Mmmmm. Se oye fácil pero, ¿Cómo renderizo esa zona que es afectada por la luz? De hecho ¿Cómo sé el tamaño de la zona que ocupa?

Gracias por responder y ojalá me tengas paciencia.

Saludos.
^_^'

XÑA

Bueno, prueba primero con toda la pantalla. Piensa que en el cálculo de la luz tendrás la atenuación, así que las que están lejos no te afectarán al final.

Para calcular la zona 2D, lo que tienes que haces es proyectar el Bounding Box de la luz contra la pantalla. También puedes calcular la intersección de los cuatro planos del Bounding box con el plano que forma la pantalla. sé que hay estas dos maneras, pero nunca lo he llegado a programar.... :-\

PIM

#4
¡Puf! eso parece más complicado. Otra cosa que estaba leyendo es que esta técnica ocupa mucho ancho de banda del bus de la tarjeta gráfica. Creo que mientras no use más de ocho luces, mejor seguiré usando el "forward rendering".

Agradezco mucho tus respuestas.

Saludos.
;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.