240 likes | 520 Views
Deferred Shading. Ariel Brunetto Director Aquadize Studios abrunetto@aquadize.com. Agenda. Forward Rendering vs Deferred Rendering G-Buffers Fuentes Locales vs Fuentes globales Lighting pass y Convex Hulls Efectos de postproceso Materiales Objetos transparentes
E N D
Deferred Shading Ariel BrunettoDirectorAquadize Studios abrunetto@aquadize.com
Agenda • Forward Rendering vs Deferred Rendering • G-Buffers • Fuentes Locales vs Fuentes globales • Lighting pass y Convex Hulls • Efectos de postproceso • Materiales • Objetos transparentes • Conclusiones: Ventajas y Desventajas
Single-pass Lighting • Se utiliza un unico shader que aplica todas las luces por cada objeto renderizado en la misma pasada. • El problema radica en la cantidad de combinacion que se producen al combinar los shaders con los distintos tipos de luces. • Existe un gasto de procesamiento innecesario sobre los pixels que sufren redraw. • Existen problemas con la integracion con shadows debido al consumo de VRAM. • Recomendando para escenas con pocas luces. • Es facil alcanzar el limite de instrucciones por shader.
Multipass Lighting • Se realiza una pasada por cada luz. La complejidad es O(cantObjetos * cantLuces). • Al igual que en simple-pass, los pixeles ocultos generan procesamiento innecesario. • Dificultad el batching, debido a que deben enviarse diferentes objetos dependiendo de las luces que lo afectan. Ordenar por luz o por objeto es mutuamente excluyente. • Por cada pasada que se envia el mismo objeto, este es procesado nuevamente por el vertex shader, generando el mismo resultado. Se vuelve a transformar, se vuelven a aplicar filtros anisotropicos, etc…
Deferred Shading • La informacion de shading de cada objeto es almacenada en un G-Buffer. • Luego se utiliza el G-Buffer como entrada al shader de lighting. Las luces se aplican producto de un postproceso utilizando la informacion del G-Buffer como entrada. • Mejora notablemente el batching, procesando cada objeto exactamente 1 vez. • La evaluacion de la pasada de lighting se mantiene constante respecto de la cantidad de objetos (n), convirtiendose de O(n) a O(1). • Permite combinar varias fuentes de luces con baja incidencia en una unica fuente.
Que es un G-Buffer? • Un G-Buffer contiene toda la informacion necesaria para evaluar la ecuacion de per pixel lighting. • Normal • Position • Diffuse color (con ambient oclussion) • Specular factor • Reflection factor • Shadow amount • Material ID
G-Buffer: Requerimientos • Floating-point textures • Multiple Render Targets (MRT), permitiendo almacenar todos los atributos del G-Buffer en una unica pasada. • Floating-point blending. • Limita la cantidad de parametros de la BRDF (Spherical Harmonics se dificultan).
G-Buffer: Primera pasada • Se utiliza para almacenar la informacion de los objetos necesaria para el calculo de la BRDF. • Se busca mantener al minimo la utilizacion de memoria. Existen varias tecnicas para packear informacion. • Almacenar unicamente pos.z en viewspace y luego reconstruir la posicion a partir de screenPos.x, screenPos.y y el FOV angle. • Almacenar normal.xy y computar normal.z = sqrt(1-x^2-y^2). Para evitar el overhead de procesamiento se pueden almacenar los resultados en una textura.
MRT • Deben posee la misma cantidad de bits, osea: • RT0: R8G8B8A8 • RT1: R32 • La cantidad de targets activos simultaneamente se encuentran limitados por la GPU.
Fuentes Locales y Globales • Globales: Afectan todos los pixels de la pantalla. Se renderizan a traves de un screen aligned. • Locales: Afectan una porcion de pixeles de la pantalla. Se utiliza geometria creada en author time para definir los pixels afectados.
Lighting • Se renderiza un convex hull por cada fuente, proyectandolo en screen space. De esta forma solo se procesan los pixels afectados. El hull es definido en author time: • Point light: esfera • Spot light: cono • Directional light: box • Se lee la informacion desde el G-Buffer. • Se evalua la BRDF. • Se blendea la informacion en el framebuffer.
Light Convex Hulls • Solo se evaluan los pixels afectados por light volume.
Efectos de postproceso • El G-Buffer y el accumulation buffer se pueden utilizar como entrada para varios efectos de postproceso: • Glow • Edge-smoothing • HDR • Heat haze
Multiples materiales • No escala para multiples materiales. La cantidad de terminos que se pueden almacenar en el G-Buffer son limitados debido a la memoria. • Una solucion seria almacenar las propiedades de un material determinado en una textura de materiales. • Se utiliza una unica BRDF en todo el proceso de lighting. • Se puede utilizar un material id y branching (pixel shader 3.0 hardware) para seleccionar una BRDF distinta por pixel.
Objetos transparentes • No se encuentran directamente soportandos por deferred shading. • Opciones? • Depth peeling, como ultimo recurso, ya que involucra ejecutar el path completo de deferred varias veces. • Utilizar forward rendering para objetos transparentes y luego realizar blending con el resultado de deferred. • Utilizar Screen Door Transparency.
ConclusiónDesventajas del Deferred Shading • Objetos transparentes. • VRAM. • AA. • Una unica BRDF por escena. • Materiales limitados a una cantidad fija de terminos. • High fill rate.
ConclusiónVentajas del Deferred Shading • Geometry batching • Procesar cada geometria exactamente una vez • Calcular el color de cada pixel visible exactamente una vez. • Al igual que las luces, realizar efectos de postproceso es sencillo: simplemente se utilizan como entrada el G-Buffer y el accumulation buffer.
Gracias!! (ya pueden descansar ^_^)