En 1994 y 1995, el programador de Naughty Dog Andy Gavin desarrolló Crash Bandicoot, el primer juego de plataformas en 3D del estudio, para la recién estrenada PlayStation de Sony. La consola ofrecía apenas 2 MB de RAM de sistema rápida y una unidad de CD lenta pero de alta capacidad, y los niveles eran enormes para la época. En una entrevista en vídeo de Ars Technica War Stories, Gavin explicó cómo superó ese desajuste.
El truco central fue una avanzada técnica de intercambio de memoria virtual: cada nivel se dividía en fragmentos de 64 KB que se cargaban de forma independiente desde el CD solo cuando se necesitaban para el entorno inmediato de Crash en pantalla. El resultado, según Gavin, fue entre 20 y 30 veces el nivel de detalle de un juego contemporáneo como Tomb Raider.
La expresiva animación al estilo Warner Bros. fue la segunda batalla. Crash recibió 600 de los 1.500 polígonos que la PlayStation renderizaba por fotograma, pero la animación esquelética 3D estándar de la época parecía demasiado robótica. Así que el equipo precalculó y almacenó los datos de animación posicional de los 500 vértices en todas las animaciones, y escribió un algoritmo de compresión personalizado que descartaba los datos de los vértices que no se movían mucho —una compresión de 50 u 80 a 1, según el recuerdo de Gavin—. El equipo también modificó las bibliotecas de código integradas de la PlayStation para maximizar la memoria disponible y la velocidad matemática en un hardware en gran medida sin probar.
Tratar la RAM como una caché: dividir los niveles en fragmentos de 64 KB que se transmiten por streaming desde el CD solo cuando están en pantalla, y precalcular la animación de vértices con una compresión personalizada de 50–80:1.
La PlayStation solo tenía 2 MB de RAM, así que ningún nivel completo podía caber jamás: la transmisión por streaming en fragmentos desde el CD era la única forma de conseguir el detalle que exigía el arte de Rubin.
La unidad de CD era lenta pero de alta capacidad, lo que la hacía viable como dispositivo de intercambio una vez que los datos se conformaban en porciones independientes de 64 KB.
La animación esquelética de la época parecía robótica; precalcular las posiciones por vértice aportaba el estiramiento y aplastamiento caricaturesco a costa de enormes cantidades de datos, que solo una compresión personalizada podía encajar.
Modificar las bibliotecas de código integradas de Sony permitió exprimir memoria adicional y velocidad matemática en un hardware en el que nadie había lanzado nada antes.
Cuando la plataforma no puede contener tu mundo, reestructura los datos para que solo la porción visible deba residir en memoria: transmisión por streaming en fragmentos desde almacenamiento lento, hoy estándar en los juegos de mundo abierto.
Crash Bandicoot se lanzó en septiembre de 1996 y se convirtió en la respuesta de Sony a la altura de su mascota frente a Mario y Sonic, según Ars Technica. Técnicas similares de gestión dinámica de memoria son ahora estándar en los videojuegos de mundo abierto, y el medio atribuye al trabajo de Gavin en Crash su prueba de concepto.
CONSULTA LAS PRUEBAS
Las fuentes
- War Stories: How Crash Bandicoot hacked the original PlayStation Ars Technica · arstechnica.com ·