En 1994 et 1995, le programmeur de Naughty Dog Andy Gavin a développé Crash Bandicoot, le premier jeu de plateforme 3D du studio, pour la toute nouvelle PlayStation de Sony. La console n'offrait que 2 Mo de RAM système rapide et un lecteur de CD lent mais de grande capacité, et les niveaux étaient énormes pour l'époque. Dans une interview vidéo War Stories d'Ars Technica, Gavin a expliqué comment il a surmonté ce déséquilibre.
L'astuce centrale était une technique avancée d'échange de mémoire virtuelle : chaque niveau était divisé en blocs de 64 Ko qui se chargeaient indépendamment depuis le CD uniquement lorsqu'ils étaient nécessaires pour l'environnement immédiat de Crash à l'écran. Le résultat, selon Gavin, était un niveau de détail 20 à 30 fois supérieur à celui d'un jeu contemporain comme Tomb Raider.
L'animation expressive à la Warner Bros. constituait le second combat. Crash disposait de 600 des 1 500 polygones que la PlayStation rendait par image, mais l'animation squelettique 3D standard paraissait trop robotique. L'équipe a donc précalculé et stocké les données d'animation de position pour les 500 sommets de chaque animation, et écrit un algorithme de compression personnalisé qui écartait les données des sommets peu mobiles — une compression de 50 ou 80 pour 1, de mémoire de Gavin. L'équipe a également modifié les bibliothèques de code intégrées de la PlayStation pour maximiser la mémoire disponible et la vitesse de calcul sur un matériel largement non testé.
Traiter la RAM comme un cache : découper les niveaux en blocs de 64 Ko diffusés depuis le CD uniquement lorsqu'ils sont à l'écran, et précalculer l'animation des sommets avec une compression personnalisée de 50 à 80:1.
La PlayStation ne disposait que de 2 Mo de RAM, si bien qu'aucun niveau entier ne pouvait tenir — la diffusion par blocs depuis le CD était le seul moyen d'obtenir le niveau de détail qu'exigeait l'art de Rubin.
Le lecteur de CD était lent mais de grande capacité, ce qui le rendait viable comme dispositif d'échange une fois les données découpées en tranches indépendantes de 64 Ko.
L'animation squelettique de l'époque paraissait robotique ; précalculer les positions par sommet permettait d'obtenir l'étirement et l'écrasement cartoonesques au prix de données volumineuses, que seule une compression personnalisée pouvait faire tenir.
Modifier les bibliothèques de code intégrées de Sony permettait de gagner de la mémoire et de la vitesse de calcul sur un matériel sur lequel personne n'avait encore livré de jeu.
Lorsque la plateforme ne peut pas contenir votre monde, restructurez les données pour que seule la tranche visible doive être résidente — la diffusion par blocs depuis un stockage lent, désormais standard dans les jeux en monde ouvert.
Crash Bandicoot est sorti en septembre 1996 et est devenu la réponse de Sony, à l'échelle d'une mascotte, à Mario et Sonic, selon Ars Technica. Des techniques similaires de gestion dynamique de la mémoire sont aujourd'hui standard dans les jeux vidéo en monde ouvert, et le média crédite le travail de Gavin sur Crash comme leur preuve de concept.
VÉRIFIEZ LES SOURCES
Les sources
- War Stories: How Crash Bandicoot hacked the original PlayStation Ars Technica · arstechnica.com ·