Hemos escuchado infinidad de veces cosas como «los efectos de post-procesado de ese juego son muy buenos» o «la nueva Nintendo 3DS permite efectos de post-procesado«, pero ¿Sabemos qué significa?¿Sabemos los costes de recursos de la máquina que requieren?¿O el porqué esa máquina lo puede hacer y aquella otra no?
Desde Game It, vamos a intentar explicarlo de la mejor manera que podamos, mostrándoos ejemplos de esos efectos tan chulos que podéis ver en los juegos, cómo se hacen, qué coste tienen. Cuando acabe este artículo, esperamos que sepáis valorar mejor el trabajo que lleva hacer ese efecto o aquel otro, para poder sopesar mejor los pros y los contras de cada juego.
¿Qué es el post-procesado?
El proceso de renderizado de un juego.En el artículo número 1 de GameDev os hablábamos del pre-render o pre-procesado, en el que se conseguía la vista del reflejo y se usaba para montar la escena que luego veíamos por pantalla. Pues bien, el post-procesado o post-render consiste en aplicar un proceso a la imagen antes de dibujarla por pantalla. Al igual que se dibujaba el reflejo sobre una textura para poder usar esa información en el dibujado principal, también necesitaremos dibujar este en una textura para poder aplicar este segundo proceso.
Por lo tanto tenemos un pre-render en el que se obtiene la información necesaria para renderizar la escena, y a su vez, la escena se renderiza sobre una textura para poder ser tratada posteriormente antes de mostrarla por pantalla. Para estos efectos de post-renderizado, se pueden usar a su vez, datos obtenidos en el pre-renderizado, pero siempre se aplicarán sobre la imagen, como si fuese un filtro de photoshop, sin entrar ya a dibujar objetos 3D. Así, para detectar efectos de post-procesado, podemos fijarnos si el efecto influye a toda la imagen o solo a algunos objetos. Si vemos que el efecto mezcla objetos y fondo, seguro que es un efecto de post-procesado, como podemos ver en el «radial blur» de más arriba.
¿Qué coste tiene?¿Qué implica?
En Resident Evil Revelations de Nintendo 3DS podemos ver efectos de post-procesado como el brillo de las lámparas.Como hemos visto en el párrafo anterior, para realizar efectos de post-procesado, en indispensable dibujar en render principal sobre una textura. Esto implica que es necesaria suficiente memoria RAM para alojar tanto el programa en sí, como la textura a post-procesar. Pero además, el post-proceso siguiente se aplica a nivel de pixel, con lo que, cuanto más resolución tenga la el render, mayor será el coste del post-procesado, requeriendo más tiempo de GPU (Unidad de procesado gráfico). Por lo tanto, tenemos que el post-procesado tiene un coste tanto de memoria como de proceso bastante importante, y que la resolución del juego tiene un impacto directo sobre el rendimiento de este.
¿Por qué la Nintendo 3Ds sí permite el post-procesado de imágenes? Para empezar, porque permite el renderizado a textura, sin el cual, sería imposible este tipo de efectos, y es algo que debe permitir el kit de desarrollo de la consola, pero además, tiene suficiente memoria RAM como para alojar la textura de renderizado, además del resto de texturas que posea el juego. Por supuesto, permite otros tipos de efectos, como las sombras en tiempo real, ya que el renderizado a textura también es necesario para realizar técnicas de pre-renderizado.
Efectos de post-procesado: Combinación de imágenes
Este efecto consiste en dibujar sobre la textura obtenida del render principal, una imagen en su mayoría transparente, que hace un efecto de cortinilla al plasmarlo en pantalla. Por ejemplo:
Vignetting: Consiste en superponer una imagen que oscurezca las esquinas, dando un aspecto más realista. Coste cero, y un recurso muy utilizado en los juegos de esta generación. Lo podemos ver por ejemplo en juegos como el Battlefield 3, entre muchos otros.
Sangre: Esto lo vemos en la mayoría de FPS para indicar que estamos sufriendo daños. Como podemos ver en la imagen de la izquierda, que pertenece a Call of Duty, no es más que una textura superpuesta. Se pueden tener varias texturas para ir variando. La resolución de esta puede ser muy baja, para ahorrar recursos.
Lluvia: Una forma muy sencilla de representar la lluvia en los videojuegos es con una animación de lluvia sobre la imagen principal. Pueden ser tan solo de 3 texturas que se van alternando para dar un efecto de lluvia en movimiento.
Efectos de post-procesado: Glow
a)Imagen original. b)Renderizado de las zonas que se iluminan. c)Difuminado de la imagen b. d)Se suman las imágenes a y c.Este es uno de los efectos más utilizados en esta generación de consolas. Consiste en hacer brillar objetos de forma que parezca que generan luz, aunque en realidad no sea así. Se utiliza tanto para el brillo de las farolas, como para hacer brillar los leds de los trajes futuristas de los personajes de Gears of War, o el mismo brillo del sol. Estos brillos, según la potencia, se deben «comer» parte de los objetos que tengan alrededor, de ahí que sea necesario un post-procesado para ello.
Este efecto glow, lo tenéis explicado a fondo en la web de Gamasutra. Básicamente, consiste en obtener una imagen en la fase de pre-render con las zonas que se iluminan, mostrando lo demás en negro. Esta imagen, ya sea en fase de post-render o pre-render, se difumina. Ya en fase de post-render, se suma la imagen de la iluminación con el render principal. Es muy importante la forma de combinar las imágenes, se deben sumar, ya que la imagen de iluminación es luz, y por lo tanto debe volver la imagen original más clara.
Conclusión final
Bionic Commando cuenta con un efecto «depth of field» muy sutil, pero muy bien implementado.En este artículo solo habéis visto una pequeña parte de todo lo que se puede hacer mediante el post-procesado de la imagen. Otras mejoras como el «anti-aliasing», «depth of field», «motion blur»,etc. se han convertido casi en un indispensable para considerar un juego puntero a nivel tecnológico. Pero los recursos no son infinitos. Al igual que hemos visto para el efecto glow, el anti-aliasing o depth of field requieren un renderizado con información especial para tratar la imagen en el post-render. Lógicamente, todo suma, estamos hablando de renderizar la escena varias veces y aplicar gran cantidad de filtros antes de mostrar por pantalla un solo frame, y esto lo tenemos que hacer, como mínimo, 30 veces por segundo.
Hay optimizaciones, como renderizar esos datos necesarios del pre-render en texturas de baja resolución, pero claro, luego pasan cosas como los dientes de sierra en las sombras por ejemplo, una consecuencia de la optimización que hay que sufrir en muchos juegos. La mayoría de veces hay que elegir, no se puede hacer todo, y hay que ajustar los efectos a la ambientación del juego. Si es una ambientación futurista con niveles llenos de lucecitas, el efecto glow es indispensable. En cambio si es un RPG con mucho bosque, quizás prefiramos prescindir del efecto glow para implementar un «depth of field» que de más profundidad.
Los efectos de post-procesado son absolutamente indispensables hoy día, pero hay que tener en cuenta que el coste es muy alto, de algunos más que otros, pero lo que está claro es que no se pueden hacer todos, al menos en esta generación.