Le T-Buffer de 3dfx, le motion blur et Quake 3

Il y a… longtemps, 3dfx vantait une fonction dans ses dernières cartes (au sens propre du terme), les Voodoo 5 : le T-Buffer. Cette fonction permettait de faire du motion blur facilement, et elle m’a toujours intriguée. Du coup, j’ai testé récemment.

Avant de parler du T-Buffer, parlons de la carte. Un très sympathique lecteur, Dominique, m’a offert une carte graphique adaptée pour cet usage : une Voodoo 5 5500 en PCI. Plus exactement, la version Mac de la carte, qui a la particularité d’avoir une sortie DVI en plus de la sortie VGA. Le problème, c’est que la version Mac ne marche évidemment pas dans un PC par défaut, et que la seule démo compatible T-Buffer est pour PC. La solution ? Flasher la carte (c’est réversible).

La boîte de la version Mac


La carte

J’ai dû chercher un peu, mais on trouve encore les BIOS compatibles. La méthode nécessite un PC avec une carte vidéo AGP, avec un BIOS réglé pour démarrer sur la carte AGP par défaut (attention, sur mon vieux PC, c’était le PCI en premier). J’ai donc démarré sous DOS – vous pouvez utiliser le prompt de Windows 98, en tabassant F8 au démarrage – et installé un BIOS « PC ». Il suffit de taper flash lebios.rom, le programme va sauver l’actuel et mettre le nouveau. Pour être franc, j’ai dû faire la procédure deux fois, mais ça a fonctionné et j’ai obtenu un bel écran de démarrage. Attention, il y a plusieurs BIOS, mais il faut une version 1.18 avec la prise en charge du DVI.

Un joli logo au boot


DVI et VGA

Une fois sous Windows 98, j’ai installé les pilotes. Comme souvent avec ce vieil OS, ça a été un peu compliqué, mais en forçant manuellement les Amigamerlin 2.9 ça a fonctionné. Dans les trucs à savoir, c’est que si la carte a une sortie DVI et qu’elle fonctionne avec un moniteur, c’est un peu plus compliqué avec ma carte d’acquisition, pensée pour du HDMI. Pour tout dire, même avec un adaptateur vers HDMI, je n’ai pas réussi à capturer une image. Une carte spécialisée pour le DVI serait probablement plus efficace, mais je n’en ai pas.

La carte bien reconnue

Le T-Buffer et le motion blur

Je ne vais pas faire un article (trop) technique, mais l’idée du T-Buffer est de pouvoir générer plusieurs images qui vont être mixée, d’une façon ou d’une autre. Dans un processus normal de l’époque, on calculait une image et on l’affichait (en simplifiant). Avec le T-Buffer, on pouvait calculer plusieurs images, les accumuler, puis les afficher (en une seule). L’article d’Anandtech de l’époque explique bien ça. La technique permettait beaucoup de choses, mais la principale (la plus mise en avant), c’est évidemment l’anti-aliasing. Au début des années 2000, nous n’avions pas les techniques actuelles et nVidia et ATi utilisaient une solution très basique : du multisampling. L’idée est de calculer l’image en haute définition (par exemple du 1 600 x 1 200) puis de réduire l’image pour adoucir l’image, donc afficher du 800 x 600. Le problème principal, c’est que les GeForce 2 GTS et autres Radeon avaient des limites sur la bande passante et qu’elles ne pouvaient pas réellement animer un jeu en 1 600 x 1 200, donc c’était assez lent. Et comme c’est basique, ça ne règle pas les soucis habituels sur les lignes droites, par exemple. Avec le T-Buffer, 3dfx pouvait générer deux images subtilement décalée, mixer les deux et obtenir une image plus propre. L’avantage évident, c’est qu’au lieu de calculer 4x plus de données (en multipliant la définition dans les deux sens, on a quatre fois plus de pixels), on peut se contenter de deux images… donc aller plus vite. Comme la puce VSA100 des Voodoo 5 restait assez lente tout de même (du niveau d’une nVidia TNT2), une carte avec deux puces comme la Voodoo 5 5500 pouvait faire de l’anti-aliasing 2x en 800 x 600 avec un débit d’image raisonnable, et c’était plus propre qu’en 1 024 x 768 ou en 1 280 x 960.

L’autre option est le motion blur, soit le flou de mouvement vu au cinéma. En 2022, c’est un peu anachronique, dans le sens ou le motion blur est un effet de cinéma intrinsèquement lié au fait que le cinéma est à 24 images/s. A l’époque, c’était intéressant pour garder une impression de fluidité, une sorte d’effet cinéma. Mais actuellement, on essaye de faire tourner les jeux à 60 ou 120 images/s, donc on évite ce genre de flou de bougé. Mais c’est un effet possible avec le T-Buffer, en utilisant des images précédentes ou en créant les images décalées, et dans certains cas, c’est très cinématographique.

Dans les faits, le T-Buffer a été très peu utilisé en dehors de l’anti-aliasing. Il y a quelques démos issues de chez 3dfx (on en trouve , je vous en mets une en vidéo), une version de démo de Quake 3 qui utilise le motion blur (le sujet du jour), visiblement quelques effets dans Serious Sam: The First Encounter (j’en parlerais probablement un jour) et a priori un émulateur de Nintendo 64 qui utilise les fonctions matérielles pour émuler ce que faisait la console. C’est peu, mais c’est logique : 3dfx a disparu à la fin de l’année 2000.

La démo vue ici est « Rocket Burger ». Elle propose trois effets : l’anti-aliasing, le motion blur et le depth of field (qui permet de rendre flou une partie de l’image, ou net une partie, selon le point de vue). D’abord avec les effets, ensuite sans les effets.

Quake 3 « test »

Le seul « jeu » qui utilise vraiment le motion blur est donc une version spécifique de Quake III Arena. Plus exactement, une démonstration technique : une variante modifiée de Q3Test 1.08. Cette version date d’août 1999 (le jeu est sorti en décembre de la même année) avec un moteur 3D à peu près finalisé, mais sans les bots, sans toutes les cartes, etc. C’est une version de test basique, donc. Selon la légende, elle a été modifiée en quelques heures par des ingénieurs de 3dfx pour une démonstration dans un salon, avec en ligne de mire la Voodoo 5 6000, c’est-à-dire la carte dotée de quatre puces VSA-100 (contre deux sur ma carte, la Voodoo 5 5500). dans les faits, Quake III n’est pas spécialement le meilleur client pour ce type d’effet, vu que c’est un jeu rapide, une simulation automobile aurait été un bien meilleur choix.

La version de test


Quelques options

La démo se trouve sur ce site, elle nécessite un PC avec un vieil OS (Windows 98 dans mon cas) et évidemment une Voodoo 5. Il faut lancer un fichier batch, qui fixe notamment l’anti-aliasing sur 4x. Dans les faits, c’est franchement lent, du coup : la Voodoo 5 5500 est un peu limitée. Au passage, pour passer en mode à la troisième personne, il faut taper cg_thirdperson 1 dans la console (²) puis relancer la démo avec demo q3demo1. Oui, parce que ce Q3Test 1.08 n’est qu’une démo : on peut essentiellement jouer en réseau (et je n’avais pas de quoi le faire).

J’ai enregistré plusieurs fois la démo, dans différentes définitions. Dans tous les cas, c’est assez lent : j’utilise un Pentium III à 600 MHz (Coppermine, bus 100 MHz) avec 256 Mo de RAM et une Voodoo 5 5500, donc. En 640 x 480 avec les effets (et de l’anti-aliasing 4x forcé), on peut espérer vaguement 30 fps. En 1 024 x 768, on descend vers 15 fps. En pratique, on peut noter un peu de flou de mouvement derrière les personnages, spécialement quand on passe en mode troisième personne. Il y a deux démos qui tournent en théorie : une partie enregistrée du point de vue du joueur, une seconde avec un mode spectateur, mais c’est remplis de bugs. Ce n’est pas très fluide, il y a des saccades liées au chargement (peut-être liée à ma config’) mais l’effet reste visible tout de même. La première vidéo est en 640 x 480 et c’est enregistré sur la sortie VGA.

La seconde vidéo montre bien l’effet sur le personnage, avec la vue à la troisième personne.

La suivante est la même, mais en 1 024 x 768. L’image est forcément plus propre, mais c’est nettement plus saccadé (et sans son).

La dernière est un cas particulier : elle est rendu en 512 x 384, ce qui désactive les effets. On a donc pas le motion blur, mais bien les images supplémentaires, c’est assez bizarre. Vous trouverez une version plus propre sur YouTube, qui est fluide. Ce n’est pas un bug : la personne a utilisé une carte graphique moderne avec un émulateur Glide, donc c’est rendu sans les effets (avec quatre image complète pour le motion blur).

Sans les effets, on a littéralement 4x le personnage en décalé

Je mets des captures, aussi, mais c’est évidemment très compliqué à montrer sur des captures fixes vu que le principe d’avoir un flou de mouvement.

On voit un peu l’effet sur le gars en face


Ici, on voit bien le flou de mouvement


Idem ici sur les deux


Le flou est aussi sur les armes

Pour terminer, il faut bien avouer que ce n’est pas spécialement impressionnant : c’est lent, pas si visible que ça et – surtout – 3dfx était déjà en perte de vitesse à ce moment là. Comme le T-Buffer était propriétaire et que la carte qui aurait pu effectuer tous les calculs de façon fluide (la Voodoo 5 6000) n’est jamais vraiment sortie, personne ne l’a utilisé.