CHRONIQUE : La genèse d’Alpha Waves

Publicité d'Alpha Waves

Préface du rédac’ chef (G. Verdin) : Alors que je tenais à publier en avril un article sur Mortal Kombat pour surfer sur l’actualité (y compris celle de l’association), mon ami SSeb22 venait de réaliser plusieurs traductions de son côté. Celle concernant Alpha Waves (1990) me semblait la plus intéressante, mais il s’avère qu’elle est en plus d’actualité puisqu’un dossier vient d’être consacré à ce pionnier de la 3D dans le dernier Pix’n Love. Celui-ci totalisant vingt pages, la chronique qui suit ne rend en rien sa lecture superflue, bien au contraire, d’autant que son auteur Guillaume Montagnon est allé à la rencontre du créateur du jeu, Christophe de Dinechin, qui n’est autre que l’auteur de l’article (en anglais) dont nous vous proposons la traduction.

L’Aube de la 3D

Par Christophe de Dinechin, publié sur son blog Grenouille Bouillie en novembre 2007
Traduit de l’anglais par SSeb22

J’ai récemment rejeté un œil à mon premier travail payé en tant que programmeur, Alpha Waves, qui apparemment pourrait aussi s’avérer être le premier jeu de plateformes 3D.

Que d’autres personnes écrivent sur ce jeu plus de quinze ans après m’a fait réaliser que mes souvenirs de cette période pourraient être une page d’histoire de l’informatique suffisamment intéressante pour être partagée (si les trucs d’un vieux schnock ne vous intéressent pas, n’hésitez pas à zapper cet article !). Une partie a été documentée ailleurs, mais d’autres pourraient ne jamais avoir été écrits avant.

Quoi qu’il en soit, c’est le genre d’histoire qui pourrait intéresser mes enfants – ne fût-ce qu’eux…

Inspiration : Starglider 2

Si je me souviens bien d’une chose, c’est l’inspiration qui m’a amené à écrire Alpha Waves. Tout a commencé avec un jeu appelé Starglider 2 (1988) qui, pour la première fois sur Atari ST et Amiga (et dans l’histoire des micro-ordinateurs, à ma connaissance (*)), présentait des graphismes en 3D à peu près réalistes. Ce qui les rendait crédibles, c’est que pour la première fois, ce jeu avait des graphismes à ombrage plat (flat shading) animés. Les jeux plus anciens comme le premier Starglider (1986) se contentaient de dessiner des lignes. Cacher les lignes arrières des polygones était déjà considéré comme un truc avancé. Alors, des polygones à ombrage plat ? C’était presque surréel !

Ma première réaction en voyant Starglider 2 fut « Ouah ! » Ma deuxième réaction fut « Comment ils font ça ? » Finalement, ça s’est transformé en « Est-ce que je peux faire mieux ? » Comme vous pouvez le voir sur [la vidéo] ci-dessus, Starglider 2 affichait ses graphismes sur une petite partie de l’écran et seul un petit nombre d’objets étaient visibles en même temps. Par conséquent, les étapes suivantes furent évidemment de voir jusqu’à quelle portion de l’écran on pouvait utiliser et combien d’objets on pouvait animer en même temps.

Les graphismes 3D d’aujourd’hui sont générés par du matériel capable de délivrer des pétagazillions de pixels par seconde, donc les jeunes lecteurs auront du mal à se rendre compte que la bande passante de la mémoire à l’époque était telle que le simple fait de remplir l’écran de polygones plus de quelques fois par seconde était déjà un défi en soi. Starglider était fluide !… Mais à l’époque, ça ne voulait pas dire soixante images par seconde mais plutôt quelque chose comme dix à quinze quand l’écran commençait à se remplir. N’oubliez pas que nous sommes à une époque où la démo Boing était considérée comme super cool :

En résumé, faire mieux que Starglider signifiait quelque chose comme remplir deux tiers de l’écran, avoir quinze objets affichés au lieu de quatre et rester au dessus de dix images par seconde. Au final, Alpha Waves irait bien au-delà de l’objectif initial : plein écran, pas un seul sprite bitmap à l’horizon (même le joueur était dessiné en 3D) et parfois jusqu’à cinquante objets affichés. La version Atari ST a même fini avec un mode deux joueurs dans lequel les deux adversaires s’affrontaient simultanément (une fonctionnalité qui n’est jamais arrivée sur PC).

Élaborer les algorithmes 3D

Évidemment, pour faire mieux que Starglider, il fallait d’abord que je comprenne comment on dessine des graphismes en 3D à l’écran. J’ai vite redécouvert les formules mathématiques mais ce n’était que le début. La vraie question était comment le faire vite. À nouveau, pour comprendre le problème, il faut se rappeler que nous parlons d’un temps où le Motorola 68000 utilisé dans l’Atari ST et l’Amiga était considéré comme un processeur plutôt rapide. Non seulement ce processeur n’avait pas la possibilité de faire des calculs en virgule flottante mais c’était très coûteux (NdT : en temps machine) de faire une multiplication ! J’ai donc dû reformuler le problème de la façon suivante : « Comment je peux dessiner en 3D en utilisant surtout des additions ? »

La solution paraîtrait extraordinairement obsolète maintenant. Le code précalculait les déplacements le long des axes X, Y ou Z, de façon à pouvoir pivoter ces vecteurs une fois seulement et décrivait ensuite tous les objets en utilisant un codage qui ressemblait à « fais un pas vers la droite, ensuite deux pas vers le haut puis un pas en arrière ». Chaque pas était enregistré dans un tableau temporaire et l’objet 3D final était créé en connectant certains des points enregistrés entre eux. À nouveau, cela peut ressembler à un algorithme vraiment idiot à l’heure où la 3D utilise quotidiennement des choses comme les quaternions pour calculer les transformations de coordonnées. Mais, purée, qu’est-ce que c’était rapide !

Bien sûr, il y avait quelques autres astuces dans le genre. Par exemple, en l’absence de calcul en virgule flottante, impossible de calculer un cosinus. On pouvait facilement régler ce problème en stockant un tableau précalculé avec les cosinus et les sinus qui retourne des amplitudes entières (de -32767 à 32767). Avec ça, il était possible d’utiliser une autre micro-optimisation. Sur le 68000, l’opération de multiplication avait besoin de deux arguments de 16 bits et retournait une valeur en 32 bits. Multiplier une coordonnée signée en 16 bits par une amplitude signée en 16 bits me donnait une valeur en 32 bits. N’importe qui aujourd’hui décalerait ça pour obtenir une valeur en 16 bits mais le 68000 n’avait pas de barrel shifter, ce qui signifiait que le décalage serait coûteux. D’un autre côté, il disposait d’une instruction swap qui échange les deux parties 16 bits haute et basse d’un registre 32 bits. Donc, après avoir appliqué swap au résultat de la multiplication, j’obtenais une coordonnée en 14 bits.

Dessiner des polygones

Maintenant que le problème des transformations de coordonnées était résolu, le prochain en termes de difficulté était de dessiner des polygones rapidement sur l’écran. Cela incluait plusieurs étapes : le clipping, la décomposition du résultat en un nombre de triangles et de trapézoïdes et le dessin de chaque morceau. Les détails de ce genre de techniques sont maintenant bien connus et illustrés ici (voir la figure 9.6 également ci-dessous).

Mon algorithme original pour dessiner les polygones était déjà relativement rapide mais les gens d’Infogrames (NdT : l’éditeur d’Alpha Waves) insistèrent plus tard pour que j’utilise leur routine maison pour faciliter le portage sur Amiga (sur lequel ils avaient déjà ces routines). Ils avaient au moins deux personnes dédiées au développement de bibliothèques de routines graphiques maison sur des machines diverses et variées et ils basculaient lentement vers le langage C pour les architectures haut niveau en utilisant le C, un peu comme on emploie les langages de script maintenant, pour les trucs lents. Et honnêtement, la version Atari ST de leur routine de polygones était un peu plus rapide que la mienne car elle utilisait du code s’auto-modifiant pour optimiser la boucle interne à mesure qu’elle s’exécutait.

Bon, cette optimisation la rendait incompatible avec le nouveau et formidable Atari TT à base de 68020 (parce que vous deviez dire à la partie instructions du processeur d’aller chercher à nouveau la donnée que vous veniez d’écrire dans la partie donnée, ce que le code ne faisait pas). Assez titillé par la différence de 2% entre leur code et le mien, j’ai créé une routine hybride combinant le meilleur des deux en utilisant une variante en Assembleur de la technique du « Duff’s device » en langage C qui, si ma mémoire est correcte, était meilleure que la leur et tournait également sur Atari TT. Mais cela arriva bien après, quand nous étions en phase finale de développement du jeu.

Des polygones aux mondes

Les premières étapes du développement d’Alpha Waves étaient bien plus modestes. Je ne faisais que commencer à pouvoir dessiner et pivoter des objets en 3D simple. Ça a commencé avec un gros cube montrant les limites des coordonnées spatiales en 16 bits, les limites de mon « monde ». Ensuite, à l’intérieur de ce cube, j’en plaçai un autre et encore un autre, afin de tester comment les objets en cachaient d’autres, etc.

Alpha Waves (MS-DOS)

Bientôt, j’avais environ une douzaine de cubes flottant dans l’espace. Et puis encore plus et encore plus. Et c’est alors qu’il m’a lentement semblé clair que j’étais proche de mon rêve original. C’était vraiment plus rapide que Starglider. Même avec tous ces objets dessinés à l’écran, et sur l’écran entier qui plus est, c’était toujours fluide. J’étais aux anges, j’étais fier ! Cela peut sembler ridicule quand maintenant n’importe qui peut faire tourner Second Life et avoir accès à un monde stockant quelques 24 téraoctets de données mais, à l’époque, c’était des graphismes 3D de niveau mondial.

Mais tout bien considéré, faire tourner des cubes sur un écran devient ennuyeux assez vite. Donc, pour tester mes routines graphiques, j’ai commencé à explorer des façons de bouger à l’intérieur de mes petits mondes en 3D. Le premier fut le plus évident : une sorte de simulateur de vol qui vous laisserait voler à travers le monde. On tournait à gauche et à droite, en bas et en haut avec le manche du joystick et on avançait en appuyant sur le bouton (NdT : dans les années 1980, les joysticks n’en avaient souvent qu’un seul). Cela me permettait de tester les rotations autour de tous les axes. Pour éviter les bugs lorsque les coordonnées dépassent les limites des valeurs en 16 bits, j’ajoutai du code me gardant à l’intérieur des coordonnées du cube. C’était comme si on rebondissait sur ses parois.

Croyez-le ou non mais je trouvais très amusant de rebondir ainsi contre les murs et je commençais donc à tester toutes sortes de dynamiques marrantes. L’étape suivante, évidente, était de rebondir contre les autres cubes qui se trouvaient à l’intérieur du monde au lieu de passer à travers comme c’était le standard dans l’industrie… Ces cubes vous repoussaient et rebondir contre eux permettait d’accélérer, par exemple pour grimper tout en haut du monde. Ajoutez un peu de gravité, des plates-formes sur le sol pour commencer à rebondir quand vous tombez et Alpha Waves était né !

Dans mon esprit, j’étais en train de recréer les sensation d’être un Schtroumpf qui, dans la bande dessinée, bondit depuis le sol pour atteindre la table et ainsi de suite. Et je me suis dit que je pourrais peut-être fabriquer une espèce de jeu d’aventure basé sur Les Schtroumpfs autour de cette technologie graphique. À cet effet, je commençais à créer un petit mécanisme pour passer d’une « salle » du jeu à une autre à travers des « portes » situées sur les murs. Le truc était d’atteindre la porte et vous passiez à la salle suivante. De cette façon, je pouvais explorer un monde encore plus grand.

Je commençais à voir le potentiel ludique de mon code mais je ne considérais pas cette petit démo comme un jeu à proprement parler, plutôt comme les fondations de ce qui pourrait un jour devenir un vrai jeu d’aventure en 3D. Bien sûr, ça m’amusait beaucoup de rebondir contre les murs, mais qui d’autre trouverait ça marrant ?

Je ne pouvais pas plus me tromper !

Infogrames

Alpha Waves, je te présente Infogrames

Je le compris quand je présentai mon code à Infogrames (qui a racheté la marque Atari et utilise ce nom depuis 2009). À ce moment-là, c’était encore une entreprise plutôt petite occupant seulement un étage d’un immeuble de Villeurbanne. Je ne saurais dire combien ils étaient, mais je dirais entre vingt et trente personnes. Mais ce nouveau bâtiment marquait un net progrès par rapport aux bureaux que j’avais visités un an auparavant, lors de ma première interaction avec eux. Et je dois vous expliquer que cette première interaction était la raison m’ayant fait revenir chez Infogrames.

La première fois, je cherchais un job d’étudiant et ils cherchaient quelqu’un pour traduire un livre sur des systèmes experts. Ne me demandez pas pourquoi mais j’imagine que Bruno Bonnell (fondateur d’Infogrames et son patron de 1983 à 2004) pensait que c’était une bonne idée de diversifier les activités de l’entreprise avec des « trucs sérieux » comme l’intelligence artificielle ou une sorte de système expert pour Papa et Maman. Je vous jure ! C’était une autre époque.

Quoi qu’il en soit, j’effectuais le travail mais au moment d’être payé… ils s’étaient déjà rendu compte que les systèmes experts étaient une idée folle et avaient changé d’avis. Ils n’avaient donc plus besoin de ma traduction et, dans ce cas, pourquoi me payer ? Devinez quoi, quand vous avez moins de vingt ans, vous êtes pas mal naïf et vous avez tendance à faire confiance aux gens. En clair, il n’y avait pas de contrat écrit, juste un accord verbal qu’ils étaient plus que contents de rompre. Je n’ai pas eu un centime.

Donc un an plus tard, quand j’y suis retourné, c’était surtout dans l’intention de compenser cette perte en travaillant là-bas comme stagiaire pendant un mois, en faire le moins possible et en apprendre le plus possible. Pourquoi je pensais que c’était une bonne idée ? Je ne sais pas. Je voulais qu’il me payent quelque chose, j’imagine.

Hé ! Mais c’est un jeu !

Bref, pour les convaincre de m’engager pendant les mois d’été, j’avais préparé une sorte de portfolio professionnel avec différents petits programmes. C’étaient des expériences à moitié finies figurant certaines technologies comme le scrolling en 2D, du son, de l’affichage de texte, … Pas un seul d’entre eux était un vrai jeu mais je voulais surtout leur montrer que je savais coder.

Time Bandit (Amiga)

Le code qui, je le pensais, allait le plus les impressionner était une sorte de petit clone de Time Bandit (1983) avec quelques ajouts comme l’affichage de texte à taille proportionnelle, qui rendait bien mieux que les polices à taille fixe de l’époque. Il n’y avait pas vraiment d’histoire, seulement quelques mondes mais je pensais que ça démontrait que je savais suffisamment coder pour décrocher un stage d’été. Quand je montrai ça au directeur technique d’Infogrames, il a surtout baillé. Je voyais les chances de récupérer mon argent filer…

Déçu, je pris la dernière disquette de ma pile. C’était celle contenant la démo Cube. Mais si mon merveilleux clone ne les avait pas impressionnés, cette démo allait sûrement être un flop. Quoi qu’il en soit, je la lançai, donnai le joystick au directeur technique… et une heure plus tard, il l’avait toujours entre les mains, rebondissant de gauche à droite comme un fou ! Dans ma tête, il ressemblait comme deux gouttes d’eau au type sur l’image (NdR : il fait référence à une image de l’article dont le lien est aujourd’hui cassé), fasciné par ce nouveau et étrange jeu…

Quand il quitta finalement la pièce, c’était pour revenir avec un contrat qui stipulait, essentiellement : « Christophe de Dinechin sera payé 5000 Frs (moins de 1000 €) pour un stage de deux mois sur le jeu InfogramesProject Cube″. » Eh bien, on peut tromper une fois mille personnes mais…. Ma réponse fut rapide : « Pas question ! Ce jeu n’est pas un projet Infogrames, il est pratiquement terminé (ce que j’avais réalisé seulement quelques minutes plus tôt). Si vous le voulez, ce sera via un contrat avec des royalties pour moi. » Il répondit : « C’est un contrat standard, signe-le et on l’ajustera plus tard ». Heureusement, j’avais déjà eu des expériences avec ce genre de « contrat » donc je refusai fermement.

Frédérick Raynal

Frédérick RaynalAprès ça, les choses allèrent assez vite. Négocier des royalties fut un calvaire pour moi et, selon lui, un plaisir pour Bruno Bonnell. Son commentaire fut quelque chose comme : « tous ces gusses me disent qu’ils n’ont pas besoin de grand-chose… Eh bien, c’est ce qu’ils obtiennent ! » Je me suis battu pour un taux de royalties qui me semblait décent. Au final, je fus très déçu quand je quittai la salle avec, si je me souviens bien, quelque chose comme 17%. Je partageai ma déception avec les développeurs présents. Je me souviens d’un long silence. Et puis on me dit que c’était en fait le meilleur taux qu’Infogrames avait jamais concédé à un auteur indépendant.

Je ne me souviens pas exactement comment Frédérick Raynal s’est retrouvé impliqué mais ce dont je me souviens, c’est qu’il a jeté un œil au code et qu’il a dit à sa hiérarchie qu’il pouvait être porté sur PC. C’était contre la politique d’Infogrames de l’époque qui était de ne jamais porter un jeu en Assembleur sur un CPU différent. Frédérick argua que mon code contenait des commentaires partout qui expliquaient bien ce qui se passait. Et donc il le porta sur PC. Il fit plus que le porter. La version PC incluait, par exemple, un tutoriel très sympa qui n’existait pas dans ma version. La seule chose qu’il oublia de faire fut de prendre en compte la vitesse du CPU, et donc Alpha Waves est injouable sur les machines d’aujourd’hui sans ralentir le jeu.

Plus que tout, Frédérick est vraiment sympa et nous échangeons toujours des mails d’une année sur l’autre. Comme l’Histoire le raconte, il créa ensuite Alone in the Dark (1992), un jeu qui connut un énorme succès puis plein d’autres jeux à succès. Alone in the Dark utilisait des graphismes en 3D pour les personnages, une première dans l’industrie. Frédérick a déclaré que cette utilisation de la 3D avait été la conséquence de son travail sur Alpha Waves.

Les répercussions

Le reste de l’histoire est, malheureusement, cohérent avec le comportement précédent d’Infogrames concernant le paiement. j’ai eu toutes les peines du monde à faire en sorte qu’ils me paient les royalties comme c’était prévu dans le contrat. Pendant un temps, j’ai songé à réutilisé mon moteur pour faire le jeu d’aventure sur Les Schtroumpfs. Mais après plusieurs notifications de retards de paiement, j’en ai eu marre d’Infogrames et j’abandonnai l’industrie du jeu vidéo pour de bon. Apparemment, Frédérick Raynal eut des problèmes similaires après le succès d’Alone in the Dark.

Alone in the Dark (MS-DOS)

Voici donc mon expérience personnelle des débuts de l’industrie vidéoludique et des tout premiers pas de la 3D dans le jeu vidéo. C’était dingo, c’était fun ! Grâce à Alpha Waves et à mon envie irrépressible de battre Starglider, j’ai pu rencontrer des personnes qui sont maintenant des légendes vivantes et être témoin des premiers jours d’une entreprise qui racheta plus tard l’icône américaine qu’est Atari.

Un grand merci à tous ceux qui nous soutiennent sur Tipeee

Lien Permanent pour cet article : https://mag.mo5.com/167867/chronique-la-genese-dalpha-waves/