martes, octubre 28, 2008

El mito de las sombras

Este post nada tiene que ver con "el mito de la caverna" de Platón. Hoy me voy a poner un poco técnico y hablar de iluminación en PS3. El tema viene a cuento de que mi colega Ryoga se quejó hace un tiempo de que en las sombras del Metal Gear Solid 4 aparecían "dientes de sierra". Él se imaginó que tal "glitch" se solucionaría con alguna actualización del firmware de PS3, gracias a los prodigios de Sony. En el momento no le quise revelar que los Reyes Magos no existen y que Chuck Norris es gay. Pero ha llegado el momento de hacerse adulto (y parar el ojete), Ryoga.

El problema en cuestión no es exclusivo del Metal Gear Solid 4, ni de PS3. En XBOX 360 o en PC aparecen los mismos "glitches", o peores. Ultimamente estoy jugando al "Assassin's Creed" y muchas veces hay sombras "intermitentes", que aparecen y desaparecen. Si algún juego parece no tener el problema, seguramente es porque el escenario es pequeño o la imagen está filtrada. El problema de las sombras viene de una técnica llamada Shadow Mapping. Lo intentaré explicar en un lenguaje sencillo.

Lo que hace el "shadow mapping" es almacenar la información de las "sombras" en una textura en la tarjeta gráfica o GPU (en concreto, lo que se almacena es la información de la distancia de un foco de luz a la escena), para poder calcular la proyección de las sombras en tiempo real. Como la textura es una imagen con una resolución finita, si la cámara se acerca mucho a la sombra de un objeto lejano pues es probable que se vea el "aliasing" (dientes de sierra). Si la sombra es muy delgada, incluso puede desaparecer con pequeñas variaciones de cámara. Hay varios métodos para solucionar esto, como usar Logarithmic Shadow Maps, pero es algo que se empieza a introducir ahora en las GPU. Por ejemplo, el famoso Larrabee de Intel incluirá un Irregular Z-Buffer para solventar esto. Os recomiendo el libro Real Time Rendering si queréis más información del asunto.

De todas maneras, estos métodos no resuelven el problema del todo, simplemente lo disimulan mejor. Pixar no tiene ninguno de estos problemas porque no generan fotogramas en tiempo real, sino resolviendo el problema de Iluminación Global a base de raytracing. ¿Pero sería posible olvidarse de texturas y aplicar iluminación global en tiempo real? Pues en parte, es posible, y lo veremos pronto en algunos juegos. Con middleware como Enlighten, es posible calcular Radiosidad en tiempo real. Aunque no resuelve todos los problemas de iluminación global, es un buen comienzo ;)

¿Pero entonces, la PS3 se quedará a dos velas? Pues no. El tal middlewear "Enlighten" está disponible para PS3. Pero además, en teoría sería posible implementar las otras técnicas que he mencionado más arriba, haciendo el cálculo en alguna de las SPU del procesador CELL. La idea original del procesador Cell es precisamente esa: tener libertad para programar tus propios módulos y no depender de la arquitectura de la GPU. Esa es a lo bestia la filosofía de Larrabee: dar total libertad al programador para cambiar todo el funcionamiento de la GPU, al fusionar la GPU con la CPU.

Y la respuesta a lo que Ryoga se está preguntando, ¿se verán mejor las sombras en el Metal Gear Solid 4? Pues va a ser que no. No va a haber ningun update milagroso que cambie la GPU. Lo que he dicho antes significa que se lo tienen que currar los programadores, o usar algún middleware. Aunque el middleware lo sacara Sony, significa de todos modos tener que adaptar todo el código del juego al nuevo sistema de rendering. Dudo que Kojima Productions se curre un mega-patch que cambie todo el juego.... Para eso, mejor trabajar en la siguiente entrega!

Ufff, que rollazo he soltao. Espero que haya servido de algo ;)

1 comentario:

lorco dijo...

salludos jefe,
de momento vamos a ver si dormimos un poco antes de poder ver las fotos, pero encuantito podamo las tienes saturando tu correo.......

un abrazo