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.
|