Introduction à la 3D
[20 mn de lecture - paru le 5/14/2004 6:18:05 PM - Public : Débutant]
|
   
|
Auteur
2. Les principaux effets des cartes 3D
2.1. Antialiasing
Sur nos écrans, l'image est constituée d'un grand nombre de points élémentaires,
les pixels. Ces derniers sont carrés, ou du moins rectangulaires. Çela convient très bien
lorsque l'on veut afficher des lignes verticales ou
horizontales: pas de problèmes pour empiler ou aligner des carrés, mais
lorsqu'il s'agit de faire des lignes obliques ou des courbes, ça ne va plus.
C'est là qu'apparaissent les célèbres "effets d'escalier", sur les bords de tout
ce qui n'est pas bien droit et bien vertical, ou horizontal. En anglais, on
appelle ça l'aliasing, en français le crénelage. Comme on ne peut pas changer la
forme de nos pixels, ces imperfections sont inévitables, on y peut rien. Ce
qu'on peut faire par contre, c'est les rendre invisibles, ou du moins très
difficiles à voir. L'antialiasing, ou anticrénelage, c'est ça.
En pratique, ça se fait avec des techniques de filtrage, en jouant sur la
couleur des pixels. On va tout simplement modifier la couleur des pixels sur les
bords des formes, pour qu'ils se fondent progressivement dans la couleur qui se
trouve autour d'eux. Et comme notre oeil est surtout sensible au contraste de
couleurs, on est supposé ne rien voir. Sauf si l'effet est un peu trop appuyé ou
calculé un peu bêtement: dans ce cas les contours nous sembleront moins nets,
voire carrément flous.
L'antialiasing, comme le reste des fonctions graphiques, peut être fait par
l'application elle-même, ou bien par la carte graphique directement. Et comme
l'anticrénelage demande pas mal de calculs, lorsqu'il s'agit d'afficher des
scènes en temps réel, il vaut
nettement mieux que ça soit fait par le matériel directement, plutôt que par le
logiciel.
Désormais, l'antialiasing se retrouve sous une nouvelle forme plus complète
appelée :
FSAA (Full Screen Anti Aliasing).
Le FSAA consiste tout simplement à appliquer des techniques d'anti-crénelage à
l'image entière, en temps réel, pour chaque image affichée. C'est fait
généralement en "dessinant" une version agrandie de l'image dans la mémoire de
la carte graphique (sans l'afficher), puis en calculant l'anti-crénelage sur
cette image agrandie entière. Ensuite, l'image transformée est réduite à sa
dimension originale, et enfin affichée.
On imagine bien qu'un tel processus demande énormément de calculs et coûte cher
en performance. Très cher même et c'est pour çela qu'on ne trouve jamais cette
option ailleurs qu'en hardware dans les cartes.
2.2. MIP Mapping
Le problème avec une scène en 3D vue en perspective comme depuis notre écran,
c'est qu'en général les objets bougent, ou le point de vue se déplace. La taille
relative des objets que l'on voie change donc: ils sont gros quand ils sont
près, et tout petits quand ils sont loin, sauf que les textures, elles, sont de
taille fixe. Si on les agrandit ou on les réduit en fonction des changements de
taille apparente, de trop près ça devient hideux, peu détaillé, et plein
"d'escaliers", et de loin, si on réduit trop, tout ce qui reste est une vague
partie de pixels qui ne ressemble plus à rien. C'est là que le MIP Mapping, ou
Mappage MIP en français,
entre en jeu.
Le MIP Mapping consiste à disposer de plusieurs versions d'une même texture, de
différentes tailles, correspondant à différentes distances de vue. Lorsque
l'objet texturé est loin, c'est la "petite" texture qui est utilisée pour
l'affichage. Et lorsque l'objet est près, c'est la grande texture bien détaillée
qui est affichée.
L'inconvénient de cette technique, c'est qu'elle nécessite plus de mémoire sur
la carte: non seulement il faut pouvoir stocker toutes les textures à afficher
dans une scène, mais en plus il va falloir stocker plusieurs versions de chaque.
Mais les gros avantages, c'est que non seulement la qualité de l'image est
grandement améliorée, mais en plus ça réduit la charge de transfert mémoire de
la machine (puisque les différentes tailles de texture sont stockées une bonne
fois dans la carte, au lieu de faire l'aller-retour en permanence).
2.3. Texture Filtering
Le filtrage de texture est l'opération la plus importante pour pouvoir présenter
à l'écran une belle image 3D. Elle sert à plusieurs choses, comme par exemple
faire que les textures adjacentes se fondent les unes avec les autres sans que
l'on voie le raccord ou permettre un affichage propre de celles qui sont vue
avec un angle important, comme un panneau ou une enseigne qui serait vu
pratiquement de profil.
Les techniques les plus courantes de filtrage de texture sont l'échantillonage
de point (point sampling), le filtrage bilinéaire (bilinear filtering), le
filtrage trilinéaire (trilinear filtering), et le filtrage anisotropique (anisotropic
filtering). Juste après nous verrons les 2 principales techniques de filtrage,
trilinéaire et anisotropique.
Plus on
veut de bons résultats, plus c'est coûteux en calcul. La liste ci-dessus est
ordonnée de la méthode la plus économique, et qui donne les moins bons
résultats, à la méthode la plus coûteuse, mais qui donne les meilleures images:
le filtrage anisotropique.
Ne pas oublier non plus que le coût en temps de calcul est relatif, et que ce
que l'on peut se permettre ou pas dépend beaucoup de la résolution d'écran
choisie. Plus la résolution est élevée, plus il y a de pixels et de textures, et
donc plus il y a de travail à faire pour les filtrer. Ainsi, la pénalité de
performance du filtrage anisotropique pourra être minimale et indolore à basse
résolution, mais complètement prohibitive en 1600x1200.
2.4. Trilinear Filtering
Cette méthode est une variante haute qualité du filtrage bilinéaire, basée sur
le MIP Mapping. La technique consiste à échantillonner 8 texels: les 4 du
filtrage bilinéaire, et les 4 texels correspondants appartenant au prochain
niveau de MIP mapping, et à interpoler le tout. Un texel est un pixel texturé.
Comme le pixel, qui est la plus petite partie possible d'une image, le texel est
la plus petite partie d'une texture. Ça permet d'adoucir les
transitions entre les différents jeux de texture des différents niveaux de MIP
mapping: la couleur qu'on a calculé se fond non seulement dans le niveau actuel,
mais se fondra bien aussi dans le suivant. On évite ainsi des anomalies
visuelles irritantes lors des changements de niveau de texture.
La plupart des cartes 3D modernes savent faire du filtrage trilinéaire
matériel avec une pénalité de performance négligeable.
2.5. Anisotropic Filtering
Anisotropic Filtering est la meilleure méthode et aussi largement la plus
coûteuse, évidemment. Le filtrage anisotropique permet certes de produire des
images de grande qualité, mais ça n'est quand même pas la panacée pour toutes
les circonstances.Le filtrage anisotropique analyse une zone carrée, et dans
pas mal de cas c'est loin d'être idéal. Il échantillonne une zone plus grande
que les 8 texels du filtrage trilinéaire. Il existe différents niveaux dans
l’anisotropie, permettant de prendre plus ou moins de texels en compte (en
moyenne 64) mais il est clair que le résultat final est toujours meilleur.
Le nombre et quels texels sont échantillonnés dépend de l'angle sous lequel on
voit la surface, depuis l'écran. La technique donne des résultats
particulièrement remarquables pour afficher des caractères vus sous un angle.
2.6. Transform & Lighting (T&L)
Dans l'espace 3D, pour l'essentiel ce que l'on trouve, ce sont des objets, qui
ont des positions, des distances entre eux, et des sources de lumière
(éventuellement assorties de propriétés particulières). Ce qui ne nous fait pas
une image affichable. Nos écrans, plus ou moins plats, sont à deux dimensions,
eux. Il va donc falloir calculer ce que l'on voit effectivement, vu de l'endroit
ou on se trouve dans le monde virtuel, par la fenêtre de notre écran, avec
l'éclairage de la scène tel qu'il doit être en fonction des sources lumineuses.
Le Transform & Lighting, c'est ça.
Les objets d'une scène 3D sont composés de polygones. Pour animer la scène,
des transformations sont appliquées à ces polygones. Ces transformations ne
demandent pas de calculs complexes, mais sont répétés des milliers de fois par
seconde. Ces opérations sont normalement effectués par le processeur central.
Avec le T&L (Transform And Lighting), elles sont laissées à la puce graphique ;
le processeur central pouvant être utilisé pour développer la complexité des
scènes et augmenter le niveau d'intelligence artificielle dans les jeux par
exemple.
2.7. Pixel Shader
Le Pixel Shader sert à créer de l'ambiance sur les surfaces et les matériaux
qui se rapprochent de la réalité. Ainsi, un nombre infini de matériaux
remplacent désormais l'effet artificiel informatisé par des surfaces organiques
à haut réalisme. Grâce à l'accroissement du contrôle des effets, les
programmeurs ne sont plus limités dans ce qu'ils peuvent appliquer à leurs
scènes. Des personnages réalistes avec effet de peau jamais vue auparavant tel
que de la barbe et des blêmissements sont maintenant possibles. On pourra
désormais apercevoir les alvéoles sur les balles de golf, la texture du cuir sur
les divans et la texture et le grain du bois pour ne nommer que ceux-là.
|