Introduction
Il y a à peu prés un an la société 3Dfx Interactive a annoncé que son nouveau composant 3D changerait la perception de la 3D sur PC. Avant la venue du composant de 3Dfx, il n'y avait pas de proposition raisonablement tarifée sur un PC domestique pour le graphisme 3D de haut niveau. On ne pouvait trouver des systèmes graphiques performants que sur les stations de travail comme celles de SGI ou de SUN qui utilisent des composants spécialisés trés couteux. Les fabricants de carte vidéo comme Number Nine, Diamond multimedia, et Matrox avaient des cartes vidéo bon marché avec quelques capacités 3D, mais ces capacités étaient trés limitées en comparaison de celles offertes par les cartes spécialisées sur SGI ou sur d'autres stations de travail.
Avec la sortie du composant de 3Dfx, appelé Voodoo 3Dfx, le graphisme 3D haut de gamme est devenu abordable pour l'utilisateur moyen. Les performances de ce composant sont un grand pas en avant dans l'éternel effort pour apporter des graphismes 3D haut de gamme au PC domestique. Avant cela les composants vidéo avaient leur capacités limitées au z-buffer et aux ombrages de gouraud (certains moins primitifs permettaient un mapage de texture limité), mais ces capacités n'étaient souvent utilisables que dans certaines résolutions ou profondeurs de couleur. Et malheureusement le processeur était largement mis à contribution pour l'utilisation de ces capacités.
Limitation de la 3D dans les cartes vidéo
Voici un exemple concernant les limites d'une carte vidéo. Cette carte peut implémenter une fonction de z-buffer, mais cela peut n'être qu'une possibilité du pilote vidéo à mémoriser les coordonnées en z des pixels dans une zone mémoire de la carte qui ne serait pas utilisé autrement. On ne peut alors utiliser le z-buffer que dans les basses résolutions et avec un petit nombre de couleur car les modes plus élevés utilisent plus de mémoire. Dans les modes plus élevés il n'y a plus assez de mémoire pour mémoriser les coordonnées en z. Même avec le stockage de ces coordonnées en mémoire vidéo, le logiciel a encore besoin d'utiliser le processeur pour comparer les coordonnées en z des nouveaux pixels avec ceux présent dans le z-buffer. Puisque ces comparaisons utilisent une part non négligeable du temps processeur, la possibilité de z-buffer de cette carte n'élimine pas vraiment le classique goulot d'étranglement du z-buffer. Si ces explications vous parraissent confuses ce n'est pas grave... c'est trés technique et vous n'en avez pas vraiment besoin pour voir les différences entre des cartes graphiques qui prétendent à la 3D et les composants 3Dfx.
Capacités du composant Voodoo 3Dfx
Il suffit de dire que le composant Voodoo 3Dfx a des possibilités qui ne peuvent être atteinte par aucun autre fabricant de circuits vidéo. Ce jeu de composant améliore les fonctions 3D générales comme l' ombrages de gouraud, depth buffer (z-buffer et w-buffer), l'alpha blending, le brouillard, le chroma keying, et le dithering. Il est aussi capable de mapage de texture en vrai perspective, de trilinear mip mapping, d'éclairage de texture, de sub-pixel correction, et de decompresser les texture space. Toutes ces fonctions sont réalisées au niveau matériel sans intervention (ou presque) du logiciel. La tache du logiciel consiste simplement à mettre en place l'environement graphique, et d'initialiser les coordonnées. Actuellement le composant Voodoo 3Dfx n'est pas capable d'initialiser les coordonnées, mais les proceseurs réçent sont tout à fait capables d'effectuer ces opérations. A noter que la prochaine génération de ce composant, appelé Voodoo2, benificiera de cette possibilité donnant encore plus de puissance pour le graphisme. Les prototypes actuels de carte vidéo utilisant le Voodoo2 dépassent des records de vitesse! Plus important, le ratio prix/performance du composant Voodoo est sa caractéristique la plus marquante.
Limitations du composant Voodoo 3Dfx
Malheureusement le composant Voodoo 3Dfx a ses limitations. La première limitation de ce composant est qu'il ne peut fonctionner qu'en plein écran et qu'il ne peut être utilisé comme la seule carte vidéo de l'ordinateur. Les cartes vidéo qui utilisent un composant Voodoo travaillent de concert avec une autre carte vidéo "normale", mais quand le logiciel veut utiliser le composant Voodoo il accède au pilote 3Dfx pour initialiser le composant. Le composant prends alors le control et commence à afficher conformément aux fonctions Glide appelées par le logiciel.
Dans une configuration normale sans carte 3Dfx, la carte vidéo est dans son propre slot sur la carte mère et sa sortie est connectée au moniteur. Le signal de sortie de la carte est affiché sur le moniteur. Les cartes vidéo 3Dfx comme la Monster 3D et la Pure 3D se connectent entre le moniteur et la carte vidéo d'origine, les deux cartes peuvent donc utiliser le même moniteur. Une configuration comme celle là consiste à ce que les deux cartes vidéo aient chacune leur slot sur la carte mère. La sortie de la carte vidéo d'origine est connectée à l'entrée de la 3Dfx via un cable qui accompagne généralement la carte 3Dfx. Le moniteur est alors relié à la sortie de la carte 3Dfx. Lors d'une utilisation normale, le signal de la carte vidéo traverse la carte 3Dfx et le signal est affiché par le moniteur. Quand une application initialise le composant 3Dfx, la carte 3Dfx coupe le signal de la carte vidéo, et le composant 3Dfx commence à envoyer son propre signal vidéo au moniteur. Tout l'affichage fait par la carte 3Dfx va au moniteur jusqu'a ce qu'une commande de fin d'affichage soit envoyée par le pilote 3Dfx, la carte vidéo reprends alors le controle.
Malheureusement, dans cette configuration le signal de sortie de la carte vidéo n'est pas visible et cela peut poser certains problèmes lors de l'utilisation d'un système de fenétrage comme celui d'Xwindows. Une autre méthode peut être utilisée, mais elle demande un second moniteur. Si vous disposez de deux moniteurs, vous pouvez en connecter un à la sortie de la carte vidéo d'origine et un autre à la sortie de la carte 3Dfx. De cette façon vous disposez toujours d'un moniteur afficant le sytème de fenêtre et l'autre n'est activé que pendant l'utilisation de la carte 3Dfx.
Un nouveau composant de 3Dfx appelé 3Dfx RUSH est lui capable d'afficher dans une fenêtre. Les cartes vidéo basées sur ce composant contiennent aussi un composant d'affichage 2D qui est connecté au même framebuffer que le composant 3Dfx. Il n'y a pas encore de pilote sous Linux pour ce type de composant, mais le developpement est en cours.
Une autre limitation du composant 3Dfx est qu'il ne peut atteindre les trés hautes résolution aujourd'hui supportées par les cartes 2D. Tandis que les cartes vidéo peuvent afficher en 1280x1024, 1600x1200 et même plus, les cartes 3Dfx n'affichent en général pas plus de 640x480. Ce n'est cependant pas une si grande limitation. Avec les techniques d'anti-aliasing et de filtrage de texture du 3Dfx on peut mettre un grand nombre d'objet dans une résolution de 640x480 sans aucune pixelisation ou presque. En fait, il est trés difficile d'identifier la résolution d'une application utilisant le composant 3Dfx juste en regardant l'écran. Les cartes les plus courantes comme la Monster3D atteignent seulement 640x480. Je pense que certaines peuvent être poussées jusqu'en 800x600 mais dans cette résolution la carte ne peut plus faire ni depth buffer ni alpha buffer puisque la mémoire normalement réservée à ces fonctions est utilisé pour l'affichage. Des cartes 3Dfx haut de gamme comme celle de Quantum3D peuvent utiliser le mode 800x600 sans compromis.
Les fabricants OEM utilisent le composant 3Dfx
3Dfx Interactive est le fabricant du composant 3Dfx, mais il ne fabrique pas de carte. D'autres sociétés comme Diamond Multimedia, Orchid Technology, et Canopus Corporation fabriquent les cartes qui utilisent ce composant. Diamond fabrique la Monster3D, Orchid fabrique la Righteous3D, et Canopus fabrique la Pure3D. Une société appelé Quantum3D séparé de 3Dfx offre des cartes qui utilisent des configurations avancées du composant Voodoo 3Dfx (plusieurs unité PixelFX et TexelFX, plus de mémoire de framebuffer ou de texture, ect). Ces modeles sont appelés Obsidian 3D. Regardez sur le site 3Dfx Interactive (www.3dfx.com) pour une liste complète des fabricants de carte vidéo qui utilisent le composant 3Dfx.
Fonctionnement interne du Voodoo 3Dfx
Le composant Voodoo peut être vu comme un assemblage flexible de différents sous systèmes. Il peut y avoir plusieures combinaisons de ces sous systèmes, la plus simple étant de n'avoir qu'un sous système. Chaque sous système est compoosé de deux processeurs appelés: PixelFX et TexelFX. Le PixelFX est le processeur en charge des opérations au niveau d pixel comme le depth-buffer et le gouraud shading. Le TexelFX est le processeur en charge des opérations sur les textures comme le texture filtering la projection. Ensemble ces processeurs peuvent produirent des effets comme l' éclairage de texture. Chacun de ces processeur peut disposer de sa propre RAM. Le PixelFX utilise sa RAM pour stocker les pixels pour le framebuffer et le TexelFX utilise sa RAM pour stocker les textures.
Chaque sous système Voodoo contient un processeur PixelFX, mais il peut y avoir des sous sytèmes qui contiennent une, deux, ou trois processeurs TexelFX séparés pour accroitre la vitesse de gestion des textures. De même un composant Voodoo peut contenir plusieurs sous système et utliser l'entrelacement de ligne pour effectivement doubler la vitesse d'affichage. Ces configurations avancées peuvent être plus puissante que des stations SGI haut de gamme, ce qui a été prouvé lors de test. Bien sur ces configurations sont plus chères que dans les cartes Voodoo standard, et sont pour la pluspart des utilisateurs inutiles.
Programmation du 3Dfx
Par crainte du reverse engineering 3Dfx Interactive ne publie pas la documentation pour la programmation au niveau registre du composant. Au lieu de ça ils distribuent un SDK appelé Glide, qui agit comme une couche d'abstraction au dessus du matériel. Glide est un jeu de fonctions organisées dans une librairie qui fournit une API relativement facile à programmer tout en cachant la couche matérielle. Ces librairies ont été portées sur les plateformes choisies par 3Dfx Interactive (dont Linux) et viennent avec une documentation détaillée. Les developpeurs peuvent utiliser l'API comme une interface leurs applications 3D avec la carte 3Dfx. Glide est une librairie graphique de trés bas niveau au contraire de Direct3D ou OPenGL. Elle ne fournie aucune fonction avancée comme la transformation ou l'affichage de listes. Elle fournit plutôt une légère abstraction par rapport au registres matériels, et toutes les fonctions sont directements traitées par le composant. J'ai discuté avec la personne qui a porté Glide sur Linux et il a dit que la librairie était vraiment trés simple et qu'approximativement, on passe les paramètres correctes à la fonction et la fonction mets les parametres dans les bons registres et dit à la carte d'afficher.
Il va sans dire que les programmeurs OpenGL ou Direct3D ne peuvent pas développer des applications 3DFx. Des pilotes OpenGL et Direct3D ont été développé pour utiliser Glide de cette façon les developpeurs peuvent utiliser les API OpenGL ou Direct3D et le pilote traduira les fonctions de haut niveau en fonctions Glide qui utiliseront les commandes 3DFx. C'est une méthode rapide et efficace de développement.
Utiliser Mesa avec 3Dfx
Un pilote qui interface Mesa (l'implémentation gratuite d'OpenGL disponible sur de nombreux systèmes) avec Glide a été développé pour permettre aux applications OpenGL d'utiliser l'accélération matérielle sous Linux ou Windows 95. Linux est gratuit, les compilateurs sous Linux sont gratuits, Mesa est gratuit, et le SDK Glide de 3DFx est gratuit, cette configuration offre donc une plateforme de développement OpenGL à prix imbatable.
Malheureusement le SDK Glide n'a pas été porté sous Linux/Alpha ni sous Linux/Sparc cela ne s'applique donc qu'aux plateformes i386. Au momment de l'écriture de cet article la dernière version de Mesa est la 2.5 et la version 2.6 est en test. Le pilote Mesa est trés avancé et il est capabe d'accélérer le rendu des point, lignes, et polygones avec du flat shading et gouraud shading ainsi que du mappage de texture, depth buffering, brouillard, et blending. Bien que j'ai mentionné que le Voodoo 3DFx n'était capable que de faire du plein écran, il est possible d'avoir un rendu fenétré grace à une astuce dans le pilote Mesa. Cette astuce consiste à prendre les données du frame buffer de la 3DFx et de les transférer à travers le bus PCI dans la RAM de la carte vidéo. Bien que cela ne soit pas aussi rapide qu'un rendu plein écran, c'est beaucoup plus rapide qu'un redu purement logiciel.
Mesa peut être téléchargé depuis le site ftp://iris.ssec.wisc.edu/pub/Mesa . Mesa est distribué en deux packages séparés. Le premier contient la librairie principale et les fichiers include, il commence avec le nom MesaLib, le deuxième est juste une collection de démos. Pour l'installer il suffit de détarer le package et de changer de répertoire dans le répertoire qui à été créé par tar. Il y a plusieurs choix possible pour compiler la librairie. Depuis Mesa 2.5 certaines routine ont été écrites directement en assembleur 386 pour accroitre la rapidité. Malheureusement ces routines sont un peu buggées mais cela a été réparé dans la version béta 2.6. Pour compiler Mesa avec le support 3DFx mais sans les routines en assembleur, vous pouvez invoquer "make linux-glide", pour compiler Mesa avec 3DFx et les routines en assembleur il faudra invoquer "make linux-386-glide". A partir de Mesa 2.6 le fichier ../../common/January1998/Makefile comporte des directives de compilation pour optimiser Mesa en utilisation avec GlQuake et QuakeII. Si vous voulez les optimisations pour GlQuake il faut invoquer "make linux-386-quake-glide" pour compiler Mesa.
Aprés la compilation de Mesa il y a plusieures manières de l'installer. Une alternative est de mettre les fichiers qui se trouvent dans les répertoires include et lib dans les répertoires /usr/lib et /usr/include ou éventuellement dans les répertoires /usr/local/lib et /usr/local/include. Ou bien vous pouvez les mettre dans n'importe quel répertoire à condition que le linker dynamique puisse les trouver. Les répertoires où le linker dynamique regarde peuvent être configurés par le fichier /etc/ld.so.conf. Parceque le développement de Mesa est trés rapide et que j'aime tester les dernières bétas dés qu'elles sortent, je garde des répertoires séparé pour chaque version de Mesa. Pour choisir la version que j'utilise je change mon fichier ld.so.conf pour inclure le répertoire qui contient la version que je veux utiliser. En ce mommment j'ai /usr/local/Mesa-2.5 qui contient la version 2.5. Et pour les bétas 2.6 j'utilise /usr/local/Mesa-2.6b1 ou /usr/local/Mesa-2.6b2. Vous pouvez ne pas utiliser ce système, mais si vous l'utilisez rappelez vous d'exécuter ldconfig à chaque changement dans le fichier /etc/ld.so.conf. Si vous voulez savoir quel est la version qu'utilise actuellement le linker tapez:
ldconfig -p | grep Mesa
et cela affichera les librairies Mesa avec leur numéro de version.
Aprés avoir installé Mesa vous etes pret. Pour exécuter une application Mesa qui utilise le 3DFx vous devez être root. Vous devez aussi avoir un serveur X avec 65535 couleurs (16 bits/pixel). Si vous avez téléchargé et decompacté les démos elles ont été compilées en même temps que la librairie, vous pouvez donc les tester. Il y a trois façons différentes d'utiliser la librairie Mesa. Premièrement tout le rendu peut être fait par logiciel, c'est le mode par défaut. Pour que l'application utilise la carte 3Dfx en mode plein écron vous devez placer une variable d'environnement comme suit:
MESA_GLX_FX=fullscreen
et le programme utilisera la carte 3Dfx. Cependant utiliser un programme Mesa dans ce mode sous Xwindows n'est pas trés efficace. Quand vous lancez une application Mesa, le serveur X ne sait même pas que la carte 3Dfx existe. Si le curseur de la souris va en dehors de la fenêtre sur le serveur X, l'application Mesa ne recevra plus aucun évènement. Donc, si vous n'utilisez qu'un moniteur, il est conseillé d'utiliser le mode de placement interactif des fenêtres de votre gestionnaire de fenêtre. Sinon, quand vous lancez l'application Mesa, la carte 3Dfx va commence son affichage en plein écran et vous ne pouvez plus voir le bureau Xwindows, et par conséquent il est difficile de placer le curseur de la souris dans la bonne fenêtre. Il est possible d'écrire un programme Mesa de façon à ce que le curseur de la souris reste à l'intérieur de la fenêtre (mouse wrap).
Pour qu'une application utilise le mode fenêtré du 3Dfx il faut placer les variables d'environnement suivantes:
SST_VGA_PASS=1
SST_NOSHUTDOWN=1
Puis MESA_GLX_FX=window. Aprés avoir initialisé ces variables et lancé l'application vous aurez de meilleures performances durant l'affichage qu'en utilisant un rendu purement logiciel.
|