sábado, marzo 14, 2009

Deferred Rendering en Killzone 2

Algo que ya sabemos es que por Internet pululan muchas "noticias" que en realidad no son noticias, sino artículos de opinión salidos de blogs como éste. Esto es un blog, y no pretendo que sea nada más. El caso es que no deja de sorprenderme que en sitios como News for Gamers pongan cosas que ni son "News" ni son nada. Pongo un ejemplo que me dejó perplejo la semana pasada: Killzone 2: Smoke and mirrors from a CGI artist.
Lo primero avisaros que no hace falta que perdáis el tiempo leyendo el artículo. Básicamente, un supuesto "artista" (en cierto sentido, es un verdadero "artista") deja por los suelos a Killzone 2, en cuanto a gráficos se refiere. Cito textualmente una de sus explicaciones:

"The first thing that caught my eye was that the game is shadow cheating, a very sad sad technique that dates back to the PS1 days. Shadow cheating is where the shadows in the game are not being generated by a real light source. They are faked by painting a dark shadow with the texture map. If you do not believe me put in the game as you read my comments and see for yourself. "

Sí, sí. Te creemos. Yo lo primero que pensé al jugar la demo fue, "ostias! una PS1!"...

Por los comentarios, parece que la gente no le hace mucho caso, pero no deja de dejarme mal sabor tanta desinformación... No voy a perder el tiempo escribiendo comentarios al blog, pero por lo menos dejo en el mio mi opinión.

1. "shadow cheating".... ejem. Este artista no se ha dado cuenta que todos los gráficos por computador consisten en hacer trucos. Sin trucos, no existirian los gráficos en tiempo real. Incluso complejas simulaciones gráficas usan algún que otro truco...
2. las luces tienen mala pinta en Killzone 2??? Lo mejor de Killzone 2 es la iluminación. Killzone 2 usa una técnica llamada Deferred Rendering, o Deferred Shading. En el libro que comenté en un post anterior, Real Time Rendering 3a edición, precisamente usan a Killzone 2 de ejemplo en el capítulo de Deferred Rendering. También tenéis un documento de una conferencia en la página de Guerrilla Games.

Básicamente, en vez de hacer los cálculos de luz "hacia delante" (forward), los retrasan hasta el final (deferred). Los típicos algoritmos calculan iluminación por cada polígono, incluso si no es visible. Contra más luces pongas, más lento va todo. En cambio, usando "deferred rendering", lo que se calcula es información (albedo, normales, etc., los G-buffers) en el espacio de coordenadas de la imagen final (Screen-Space). Al final, se calcula la iluminación, que depende del número de pixels, o sea, es constante: no depende del número de luces. En Killzone 2 hay cientos de luces en cada escena (creo que unas 200 de media), por lo que la técnica les viene al pelo. Y el resultado es brillante (aunque claro, la técnica es la misma mismísima que se usaba en PS1.... que "artistazo"...).

El principal problema de usar Deferred Rendering es que no es fácil aplicarla para objetos transparentes. Con forward rendering, a cada paso puedes ir comprobando si un objeto es transparente o no para obtener un valor correcto, pero en Deferred Rendering no iluminamos hasta el final, y ya es demasiado tarde para saber que valor de iluminación queda detrás del objeto transparente. Otro problema relacionado es el de antialiasing. Pero bueno, mejor miréis el libro, jeje. El caso es que estos problemas se pueden solventar (con más "trucos", que es de lo que van los Computer Graphics; perdón si me repito....). Añaden más complejidad de cálculo, que si vas a poner 4 luces mejor te quedes con "forward rendering". Pero compensa usar Deferred Rendering si vas a poner cientos de luces.

En fin, no me extiendo más, que al final acabaré diciendo tonterías como el pedazo "artista" ese, jeje.

2 comentarios:

Benat dijo...

Thanks por explicar que es cada cosa, y explicarlo BIEN y elegantemente, hazte profe!

Lo malo de esto es que este caballero tendrá algún seguidor y cogerá ese argumento para machacar a killzone...

Y mira que no tengo la ps3, pero su última frase "PS3’s only hope is in 2010- God of War III", anda que...

cotaku dijo...

:D gracias ;)
Sí, y luego cuando salga el God of War III el "artista" dirá que le faltan polígonos :p