Deferred shading. Para amantes de gráficos y videojuegos.

Por Manuel Peliz

Si eres una persona a la que le gustan los videojuegos o simplemente te interesan los gráficos por ordenador en alguna ocasión te habrás encontrado con estas palabrejas en inglés que ni yo mismo entiendo muy bien aún. Es mi intención pues y hasta donde llegan mis limitaciones, explicar un poco qué significa esto y a ver si algunos se dan cuenta que esto de hacer aparecer cosas por pantalla no es sólo cosa de hacer click en un simple botón.

Pero, ¿qué es el deferred shading? Vamos al grano: a la hora de hacer aparecer nuestras “cosas” por pantalla existen un sinfín de técnicas y aproximaciones de otras técnicas. Una de ellas es el deferred shading, que a su vez puede ser interpretada de otras tantas maneras. Ahí está la diferencia entre juegos o aplicaciones 3d con gráficos malos, buenos e increíbles. No se me mal interprete con que el deferred shading excluya otras técnicas.

Sin meterme en historias de quién fue el inventor del concepto (para eso tenéis la Wikipedia), sí voy a comentar que su empleo llega de la evolución del hardware (tarjetas gráficas más modernas) que permitió su implementación de manera óptima gracias al MRT (multiple render target).

El deferred shading consiste en hacer un dibujado previo por separado de la información que necesitamos para la obtención final de la imagen. A diferencia del forward rendering (dibujamos directamente, uno a uno los objetos por pantalla). Es decir, en lugar de dibujar en pantalla lo que queremos, primero vamos a ir guardando en texturas (imágenes) la información de los objetos por separado y al final de todo el proceso lo combinamos.

Así pues, en un primer paso, se crea el G-Buffer que no es más que un grupo de texturas en donde se guarda la información que vamos a necesitar. Como el color, la posición de cada pixel en el espacio, la capacidad de reflejar la luz del material, etc.

En la siguiente foto muestro un ejemplo de un G-Buffer con composición final de una oclusión realizada aquí en BITTIA:

Como se puede ver tenemos 3 primeras texturas (imágenes pequeñas de la parte superior) con diferente información, color, dirección de las normales (dirección a la que mira el pixel) y distancia a la cámara representado en escala de grises. Esto último es como decir la posición x, y, z del pixel en el espacio obtenido mediante cálculos matemáticos que no me voy a poner a explicar. Pues bien, con ellas (en realidad sólo con las dos últimas) podemos generar una especie de sombreado (SSAO) que combinado con el color nos daría más realismo a la escena.

Esto es un simple ejemplo de uso del G-Buffer, será cosa de la imaginación de cada uno o del equipo de desarrollo del juego o aplicación lograr las impresionantes escenas cinematográficas que obtienen en sus costosos y multimillonarios proyectos.

Un punto muy a favor que tiene el deferred shading es a la hora de calcular las luces de la escena, permitiendo tener en un mismo momento cientos (esto tengo que testearlo, aún no me lo creo a excepción de que poseas un super-ordenador, yo lo dejaría en muchas más) de luces dinámicas funcionando mientras que en el forward rendering no es posible.

Como se puede observar el proceso que hemos de realizar a la hora de enseñarte algo por pantalla es muy grande, largo y costoso. Pasa por un montón de manos y NO ES NADA hasta que el último pintor da la última capa. De ahí la importancia en conocer la labor de cada uno de los miembros que intervienen en el proceso.

Documentación empleada:

http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf

http://cmpmedia.vo.llnwd.net/o1/vault/gdc09/slides/gdc09_insomniac_prelighting.pdf

http://developer.amd.com/gpu_assets/S2008-Filion-McNaughton-StarCraftII.pdf

Anuncios

Un pensamiento en “Deferred shading. Para amantes de gráficos y videojuegos.

  1. Putuca

    Estupendo artículo! Las cosas, no se les olvide a nadie, no salen de la nada. Hay mucho por detrás.

    Seguiré con atención estos artículos.

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s