Les cartes 3D sous Linux : Comment fonctionne une carte accélératrice 3D ?

Comment fonctionne une carte accélératrice 3D ?

     Pour comprendre à quoi sert une carte 3D et pourquoi certaines peuvent être bien plus rapides que d'autres que d'autres, il est nécessaire de rappeler comment se déroule la réalisation d'une scène 3D par un ordinateur :

  • En premier, il faut calculer la position de chaque objet 3D, lire la souris ou le clavier, appliquer l'algorithme permettant de déplacer les objets, etc... Simple si on se contente d'afficher une scène 3D statique autour de laquelle on tourne. Beaucoup plus complexe si on gère un univers virtuel ou les joueurs se lancent des roquettes à la tête :-)

  • En second, il faut transformer les coordonnées 3D en coordonnées écran en fonction de la position de l'observateur et du point regardé. Si on fait tourner un cube, ça ne fait jamais que 6 projections 3D -> 2D. Pour représenter une surface gauche, c'est infiniment plus complexe puisque tout doit être subdivisé en petits polygones, seul objet que savent traiter (pour l'instant) les cartes 3D.

  • Pour chaque polygone visible à l'écran il faut, pour chacun de ses pixels, déterminer s'il est visible ou non par rapport aux autres (Z-Buffer) puis calculer l'illumination et la couleur à chacun de ses sommets et faire une interpolation pour remplir le polygone (rendu de Gouraud ou Phong). Si une texture est appliquée sur le polygone, c'est aussi à ce moment qu'il faut la projeter en tenant compte de l'éclairage.
Sans carte 3D, le processeur calcule tout et envoie l'image à la carte vidéo. Même avec un processeur très rapide, il faudrait environ 3 à 5 secondes de calcul par image pour un jeu moderne comme Quake III !

Toutes les cartes 3D de première génération (toutes les cartes sauf les NVidia GeForce et l'ATI Radeon) ne traitent que le dernier item. Les calculs de projection 3D->2D sont toujours effectués par le processeur principal. Pour avoir des jeux fluides, les développeurs ont donc optimisé les jeux en utilisant une géométrie assez "cubique" (avec le moins de polygones possibles) et en simplifiant les algorithmes du jeu (pour libérer le processeur central au maximum pour le calcul de polygones).

Les dernières générations de cartes 3D embarquent des unités de calcul de projections 3D->2D, ce qui libère d'autant le processeur et permet de programmer des jeux plus complexes et créer des scènes constituées de plus de polygones.

Pour la petite histoire, la première "puce" intégrant le calcul de projections 3D->2D (Geometry Engine) a été crée en 1979 par Jim Clark, fondateur de la société... Silicon Graphics (et de Netscape plus tard mais c'est une autre histoire :-). Pour la petite histoire encore, les sociétés 3Dfx et NVidia ont été fondées par des anciens de Silicon Graphics, le monde est petit :-)

Mais revenons à nos moutons ! Qu'est-ce qui limite la performance 3D dans une machine moderne ?
  • La bande passante mémoire de la carte vidéo (fill rate) : Un certain nombre d'opérations sont réalisées au niveau du pixel et la bande passante limite le quantité de mémoire pouvant être accédée à la seconde, donc le nombre de pixels traités à la seconde. Si c'est le point bloquant, il suffit de diminuer la résolution et/ou le nombre de couleurs affichées pour aller plus vite.
  • La quantité de mémoire : les jeux modernes utilisent de très gros volumes de textures. Si les textures nécessaires au jeu ne tiennent pas dans la mémoire de la carte, il faudra aller les chercher dans la Ram de l'ordinateur, ce qui est plus lent.
  • Le bus où est branché la carte vidéo : il est utilisé pour transférer les coordonnées des polygones à afficher mais aussi et surtout les textures ! 2 cas se présentent : bus PCI et bus AGP. Le bus AGP permet à la carte d'accéder à la mémoire de l'ordinateur comme si il sagissait de mémoire interne à la carte. Suivant la rapidité du bus AGP (1x, 2x, 4x), ce sera plus ou moins rapide bien sur. Le bus PCI ne permet pas cela, la carte doit alors faire le vide dans les textures déjà présentes sur la carte et aller chercher la nouvelle en Ram, c'est encore pire !
  • Le processeur : c'est lui qui fait tourner le jeu et éventuellement réalise les calculs de projection.
Il faut faire attention à tous ces paramètres et "gonfler" énormément le processeur par exemple pourra ne servir à rien avec une vieille carte 3D car le processeur attendra la carte.


Page suivante : Sécurité, Direct Rendering et performances...

Table des matières :

Projet Mesa 3D Projet Utah-GLX DRI pour XFree86 Site officiel OpenGL Drivers Linux Nvidia