retour à l'accueil dernière actualité articles interviews qcm dictionnaires bibliothèque forums inscription membre profile recherche sauvegardes contacts aides
entete 0titre de la page
menu du haut




Les différentes formes d'aliasing et leurs solutions
 Auteur : JF Maquiné Dernière révision : 15 Juillet 2005
Faire un commentaire :   0 message(s)








Introduction
   

Si l'on traduit le terme d'aliasing en français cela donne crénelage, c'est-à-dire l'apparition d'un effet escalier sur le bord des objets. L'anti-aliasing étant le remède à ce phénomène. Mais l'anti-aliasing a une vocation plus générale que de résoudre le seul effet d'escalier. On peut citer par exemple le 'pixel popping'. On a aussi différents problèmes qui ne requièrent pas tous la même solution d'anti-aliasing, comme l'aliasing de textures, des textures alpha, des shaders. L'aliasing est devenu un terme générique pour les problèmes générés par un manque de définition (nombre de pixels) et plus généralement d'informations. Ce sont ces différentes formes d'aliasing et leurs solutions que nous allons aborder de même que l'explication de techniques particulières comme le MSAA ou le SSAA. A propos, vous entendez souvent le terme FSAA, celui-ci est devenu en fait le terme générique pour les solutions d'anti-aliasing.

Pour vous donner tout de suite une idée du sujet de l'article, voici deux exemples. Le premier est un exemple de pixel popping dans le jeu Mafia et le second d'aliasing géométrique dans FarCry.

    

La première image montre l'aliasing le plus connu car le plus voyant dans un jeu. Le second se rencontre lorsqu'on a affaire à des objets fins comme du grillage, mais aussi des câbles (électrique, téléphonique). Tous ces types de problèmes ont aujourd'hui leurs solutions.

Bonne lecture





Pourquoi y a-t-il de l'aliasing dans le monde virtuel ?
   

Tous les objets du monde réel sont composés d'atomes. L'équivalent dans le monde virtuel est le pixel. La différence entre les deux d'un point de vue visuel, c'est l'énorme différence de taille. Dans le monde réel les objets sont définis avec une précision au minimum 1 million de fois plus importante. Or nos yeux sont incapables de voir avec une telle précision. Par contre ils peuvent voir des différences avec la précision beaucoup plus faible qu'offrent les pixels. Si nos yeux étaient des microscropes électroniques, on pourrait voir que dans le monde atomique il y a aussi de l'aliasing voire de la discontinuité. Bref le fait qu'on voit de l'aliasing est juste une histoire d'échelle et de précision.

Une manière de voir la chose est l'aliasing qui apparaît suite à différentes opérations mathématiques (transformation, calcul de fonction). On a une perte d'information qui génère des effets indésirables. Cette perte d'information peut être compensée si on utilise au départ plus d'informations. C'est la base même des techniques d'anti-aliasing que sont le MSAA et le SSAA, techniques que nous allons voir.





A quoi ressemble visuellement l'anti-aliasing
   

Dire que l'anti-aliasing consiste à utiliser plus d'informations pour solutionner l'aliasing est un peu théorique. Dans la pratique, que se passe-t-il ? L'anti-aliasing consiste à niveler par un dégradé de couleurs progressif chaque crénelage. Ce qui a pour effet (optique) de donner l'impression d'une continuité. Voici un exemple tiré du jeu BF2, ainsi qu'un zoom d'une zone aliasée et la même anti-aliasée. La première image montre une gru dans le jeu Battle Field 2 qui a subit un anti-aliasing de niveau 6 et un important zoom d'une partie de cette gru montrant comment le bord est nivellé pour donner l'illusion de continuité.







MSAA et SSAA : les deux principales techniques de FSAA
   

SSAA

Le SSAA pour Super Sampling Anti Aliasing est la meilleure méthode d'anti-aliasing dont nous disposons techniquement car elle filtre tout. Comme nous le verrons, elle filtre les bords des objets, l'intérieur des textures, les textures Alpha, ... Le problème c'est qu'elle consomme une énorme quantité de ressources qui la rendent, aujourd'hui encore même avec des cartes comme la 7800GTX de NVidia, difficile à utiliser sans une perte vertigineuse des FPS.

Elle repose sur un principe simple. Puisque l'aliasing est avant tout du à un manque d'informations, on augmente la définition de l'image puis on applique un filtre pour effectuer l'anti-aliasing. Dans un FSAAx4 par exemple on multiplie par 4 le nombre d'informations en rendant l'image 2 fois plus grande sur l'axe des X et 2 fois plus grande sur l'axe des Y. En pratique cela signifie que pour chaque pixel, on dispose à présent de 4 pixels dont on va faire la moyenne pour estimer la couleur. On nomme ces 4 pixels provisoires des échantillons. Dans le cas du FSAA, on a 4 échantillons pour 1 pixel final, pour le FSAAx6 on en a 6, etc ...

En théorie on utilise 4 fois plus de mémoire et 4 fois plus d'opérations pour filtrer la texture. En pratique due à la compression des textures, on n'utilise pas vraiment 4 fois plus de mémoire, mais la chute de performances reste quand même importante.

En résumé le SSAA consiste à :

  • Calculer l'image 3D dans une résolution double (axe X et Y) de la résolution finale souhaitée
  • Ramener l'image à la taille demandée en effectuant un filtrage particulier



On nomme parfois le SSAA l'oversampling. En fait originellement on appelait la méthode consistant à augmenter la taille de l'image l'oversampling. Ensuite sont apparues des variantes en particulier au niveau de la méthode de filtrage et on a donné à ces méthodes le terme générique de SSAA. L'oversampling correspond aujourd'hui à un SSAA ayant une méthode de filtrage très basique de type OGSS que nous verrons plus loin dans l'article.

MSAA
Le MSAA pour MultiSampling Anti-Aliasing est une technique qui a pour but de proposer de l'anti-aliasing mais sans avoir l'impact en terme de performance qu'a le SSAA. Comment ? Tout simplement en effectuant l'anti-aliasing que là où ça se voit le plus à savoir le bord des objets. Le reste ne subissant qu'aucune modification au contraire du MSAA. On nomme parfois le MSAA par un terme plus générique le 'Edge' FSAA, se traduisant par le FSAA de contour.

Le MSAA est bien une technique de supersampling c'est-à-dire qu'on travaille avec une image n fois plus grande, mais là s'arrête la similitude. Le MSAA a une méthode très particulière de faire son filtrage dans son principe que nous allons voir.

Le MSAA ne joue que sur l'aliasing de géométrie. La géométrie des objets est construite par des triangles dans lesquels on place les textures. Le MSAA ne s'occupe que de ce qui se passe aux bords de ces triangles.

Le mode opératoire est le suivant pour le MSAAx4 :

  • on double la taille de l'image
  • on groupe les échantillons (pixels) par groupe de 4.
  • on calcule la couleur moyenne des quatre échantillons
  • on teste pour chaque échantillon s'il intersecte le bord du triangle et on définit la transparence du pixel final en fonciton du résultat.
    • si aucun pixel ne touche le bord, la transparence vaut 100%.
    • si 1 touche le bord on applique une transparence de 75%
    • si 2 touchent le bord on applique une transparence de 50%
    • si 3 touchent le bord on applique une transparence de 25%
    • si 4 touchent le bord on applique une transparence de 0% (on applique donc totalement la couleur moyenne calculée précédemment).





FAA
   

Le FAA pour Fragment Anti-Aliasing est une technique de edge-FSAA comme le MSAA. Le FAA s'est fait connaître lorsque Matrox l'a intégré à ses cartes graphiques Parhelia. Sans entrer dans le détail, le FAA fonctionne de manière assez similaire au MSAA sauf qu'il utilise un masque pour déterminer les pixels qui sont intersectés par le triangle et ceux qui ne le sont pas et le résultat de ce masque (qui contient des 1 et des 0) est utilisé par la suite. L'intérêt principal du FAA est que en FSAAx4, un MSAA a besoin de 4 fois plus de mémoire pour le framebuffer, le FAA en a besoin seulement de 1,5 fois plus. La baisse de performance est donc assez faible avec le FAA. Ceci permet d'utiliser un anti-aliasing plus important de type FSAAx16

Alors pourquoi tous les constructeurs ne l'adoptent pas ? Parce que le principe même du FAA implique soit des contraintes d'utilisation pour les développeurs 3D pour éviter que certains contours ne soient pas anti-aliasés, de même le FAA pose des problèmes aux intersections des triangles qui forment la géométrie des objets d'une scène 3D.

Voici un exemple de FAA :

    

Le terme de fragment provient du fait que dans le cas du MSAA ou du SSAA, chaque échantillon est constitué de deux informations. La couleur est sa profondeur dans la scène 3D. Le FAA n'utilise et ne stocke qu'une fraction de ces informations d'ou Fragment Anti-Aliasing.





Le FSAA de 3DFX
   

Avant de disparaître, la société 3DFX avait produit un GPU,le VSA-100, qui intégrait le t-buffer permettant de nombreuses technologies qui ne sont apparues que bien des années plus tard chez ATI et NVidia. Le Depth Of field (profondeur de champ), le motion blur (flou de mouvement), ... et le FSAA. Le FSAA de 3DFX était de type SSAA et était surtout performant en terme de qualité. On le nommait SSAA mais il avait une particularité. Il ne se basait pas sur une image 4 fois plus grande (dans le cas du FSAAx4), mais sur4 images identiques. La quantité de mémoire utilisée est la même, mais la méthode diffère légèrement.





Le temporal AA
   

Le temporal AA n'est pas une technique particulière de FSAA comme le MSAA, le SSAA ou le FAA. Il consiste, à partir d'une technique de FSAA, à calculer et afficher une première partie du FSAA, puis à l'image suivante la seconde partie du FSAA. Cette technique fonctionne en étant basée sur la persistance rétinienne, si les images défilent assez vite vous aurez l'illusion d'un FSAAx4 (par exemple) alors que le travail effectué correspond à celui d'un FSAAx2.

Il y a quand même des restrictions. D'abord persistance rétinienne ou non, c'est un peu moins bon que de rendre complémentaire la totalité du FSAA dans une image. Ensuite il faut avoir un bon framerate, c'est-à-dire une vitesse de défilement des images suffisante pour que l'oeil se laisse tromper, dans le cas contraire un temporal AAx4 ressemble à peine à un FSAAx2. En gros en dessous de 50 fps le temporal AA n'est pas très intéressant. Il faut encore ajouter qu'avec le temporal AA il est préférable d'activer la synchronisation verticale pour obtenir le meilleur résultat, ce qui malhesuement tend à faire baisser le FPS moyen.

L'idée n'est pas nouvelle, et c'est ATI qui l'a mise en oeuvre dans ses drivers depuis environ 1 an. A l'origine dédiée pour sa nouvelle génération X800 de cartes graphiques, cette technologie a été étendue à sa gamme 9700 et 9800.

Le temporal AA est très adpaté a des techniques de edge-FSAA (MSAA, FAA). Dans le cas du SSAA, on risque d'avoir un effet désagréable de clignotement de l'ensemble de la scène.





OGSS et RGSS : Deux méthodes de choix des échantillons
   

Jusqu'à présent je vous ai expliqué les méthodes de SSAA ou MSAA en utilisant une seule méthode de choix des échantillons. Celle-ci consiste simplement à découper des carrés contenant les échantillons, voire des rectangles pour le FSAAx6. Cette méthode très ordonnée est la méthode la plus simple et se nomme OGSS (Ordered Grid SuperSamplig). Il en existe une autre la RGSS.

La RGSS pour Rotated Grid SuperSampling consiste à effectuer une rotation de la grille qui sélectionne les échantillons. (différents graphies de grille) Evidemment dans la pratique, le RGSS est plus complexe à mettre en oeuvre ce qui se traduit par un filtre qui ramène l'image à la dimension voulue, plus long à calculer. Mais l'avantage du RGSS est la supériorité de la qualité d'anti-aliasing finale. C'est pour ça que vous aurez peut-être entendu certains regretter à un moment la qualité du FSAA des dernière cartes de 3DFX. De même vous aurez entendu parler de la qualité du FSAA d'ATI depuis les 9700Pro. En fait le FSAAx6 d'ATI (qui est un MSAA RGSS) reste le FSAA qui offre le rapport qualité / performance le plus intéressant actuellement.





Aliasing de géométrie
   

L'aliasing de géométrie est le plus courant des aliasing, il concerne tous les personnages et la majorité des objets. C'est un aliasing dû à la géométrie des objets et personnages. La géométrie c'est quand on dessine point par point un objet, qu'on relie les points entre eux d'une certaine manière puis qu'on applique une texture sur chaque face de l'objet ainsi dessiné. Ce type d'aliasing concerne plus précisément les arrêtes des objets.

Les solutions à ce problème sont de deux types dans la pratique. La première consiste à augmenter la résolution. Il y a en effet moins d'aliasing géométrique avec une résolution de 1600x1200 qu'en 800x600. Toutefois cela ne fait que l'atténuer mais il reste des situations où il est encore très présent. Par exemple pour des marches d'escalier et sous certains angles, ou encore les antennes, ... l'augmentation de résolution n'est qu'une faible solution.

La deuxième solution est une technique qui consiste à tromper l'oeil. Pour ce faire on adoucit par un dégradé progressif de couleurs les arrêtes des objets. Cela donne un résultat nettement plus probant que l'augmentation de résolution. De manière générale, cette technique se nomme MSAA. Elle ne concerne que les arrêtes des objets. Elle fait partie d'une famille de techniques anti-aliasing dont le nom générique est FSAA.

La différence entre les deux tient au fait que l'augmentation de résolution ne cherche pas à supprimer l'effet d'aliasing mais le rend si petit qu'il devient impossible à un oeil humain de le voir. Alors que la technique FSAA tend à tromper l'oeil en établissant un dégradé de couleurs des arrêtes qui se donne l'illusion d'une ligne continue et non en escalier.





Aliasing de textures
   

Lorqu'on fait le placage des textures sur un objet, on doit effectuer généralement une déformation de la texture (étirement, cisaillement, ...). Cette opération de déformation provoque l'apparition d'aliasing tel qu'on peut le voir sur l'image suivante :

On peut se demander pourquoi il y a nécessité à déformer les textures. Il faut remonter à la source de la création des textures. Celles-ci sont faites par les designers du jeu. Ils font un fichier pour chaque texture. Charge ensuite à la carte 3D de faire les déformations nécessaires pour faire entrer la texture dans la face de l'objet. Les faces des objets varient en fonction des angles de vue et il y en a quasiment une infinité. On ne peut pas produire une infinité de textures pour chaque déformation possible. Si on pouvait le faire, on n'aurait pas la nécessité de déformer les textures, mais ce n'est pas le cas d'où les nécessaires déformations et donc apparition d'aliasing dans les textures.

Il y a une bonne et une mauvaise nouvelle avec cet aliasing. La bonne nouvelle c'est que l'aliasing n'est perceptible que s'il y a des dessins avec des bords nets, ce qui n'est pas si courant que ça en moyenne dans les jeux, mais ce n'est pas rare non plus. La mauvaise nouvelle c'est qu'il n'existe qu'une technique pour solutionner ce problème (l'augmentation de résolution n'ayant aucun effet ici) et que cette solution produit elle-même un inconvénient. Cette technique est le SSAA. Elle effectue un anti-aliasing sur l'ensemble de la scène ce qui inclut les textures, mais aussi les bords des objets. A priori c'est une technique supérieure au MSAA. En pratique pas vraiment car elle produit un léger flou sur les textures. Or comme les utilisateurs sont assez sensibles à la netteté des textures, les constructeurs de cartes graphiques lui ont préféré le MSAA qui, s'il n'apporte par une solution d'ensemble, améliore suffisamment la qualité globale de l'image pour être considéré comme supérieur. Il y a une autre raison au fait que pour l'instant le MSAA ait été préféré au SSAA. Il consomme nettement moins de ressource et en particulier de bande passante. Effectivement le SSAA est une technique tueuse de FPS.

Alors le SSAA inutile ? Des cartes comme les 8500 d'ATI utilisaient la technique de SSAA mais plus que le problème des performances, la technique a été fortement critiquée pour le flou qu'elle générait sur l'ensemble des textures. Le plus gênant c'est que plus on utilise un anti-aliasing fort, plus le flou est important. Des tentatives d'améliorations des algorithmes du SSAA ont été faites, mais toutes se sont révélées quand même insuffisantes face à ce problème de flou. Toutefois cela ne signifie pas qu'elle ne sera jamais utilisée. L'astuce qui semble se dessiner pour l'avenir c'est qu'on l'utilisera conjointement avec le MSAA qui restera le premier mode anti-aliasing et ce quel que soit le niveau d'anti-aliasing qu'il produit. Pour le SSAA il est envisagé de l'utiliser pour effectuer de petites corrections aliasing.





Aliasing des textures alpha
   

Une texture alpha est une texture qui comporte 4 informations par pixel. Trois pour la couleur (RVB) et une pour la transparence. On nomme ces textures alpha car le canal de transparence se nomme alpha. Dans cette catégorie de textures, il en existe une de particulière, les textures alpha binaires. C'est-à-dire que la valeur de transparence est soit à 100% soit à 0%. Le canal alpha pour chaque pixel fonctionne comme un interrupteur binaire qui indique les pixels à afficher de cette texture et ceux qui ne le sont pas. Prenons l'exemple des grillages dans HL2. Ce sont des textures où les pixels appartenant au grillage doivent être affichés, les autres non.

Quel est l'intérêt technique pour les développeurs des textures alpha binaires ? Elles évitent d'utiliser de la géométrie sur des objets qui impliqueraient d'en avoir beaucoup. Dans le cas du grillage, ou pourrait très bien faire le grillage par des tubes très fins. Mais la quantité d'informations géométriques que cela génèrerait mettrait à genou la majorité des cartes sinon toutes sur une scène remplie de grillages. En fait les textures alpha binaires sont utilisées pour remplacer des objets petits et/ou fins qui nécessiteraient une grande quantité d'informations.

L'inconvénient de ces textures : Vu sous un certain angle, les textures alpha permettent de découper le grillage de la texture. Ce faisant la découpe est nette et pas progressive pour les bords. On se retrouve finalement avec la même situation que les bords des objets. Le problème c'est que la technique de MSAA est totalement inutilisable puisqu'elle ne peut pas anti-aliaser l'intérieur d'une texture.

La solution consiste donc à utiliser le mode SSAA. Mais comme je l'ai déjà mentionné ce mode consomme énormément de ressource. Comment faire ? En fait on ne fait pas ou plutôt si, mais c'est apparu seulement avec la dernière carte graphique de NVidia : la 7800 GTX.





Le FSAA transparent de la 7800 GTX
   

Le MSAA est une solution qui en pratique donne des résultats suffisants, sauf sur certains points comme les textures alpha. La solution serait d'utiliser le SSAA, mais ça consomme trop. Comment faire pour résoudre le problème des textures transparentes ? Il suffit simplement que le processeur puisse clairement distinguer les textures alpha des autres et qu'il soit capable d'appliquer le SSAA uniquement à ces textures. C'est possible ? oui NVidia l'a fait et le résultat est probant. Voici un exemple tiré du jeu Half-Life 2 ou on voit une image sans anti-aliasing sur les textures alpha des grillages et avec.

    

Le problème c'est que les performances varient rapidement avec le nombre de textures alpha utilisées dans une scène. L'idéal serait de disposer d'un mode MSAA pour la transparence et la 7800 GTX en dispose bien d'un mais malheureusement il ne fonctionne que sous certaines conditions qui ne sont que rarement satisfaites. On peut envisager qu'à l'avenir les futurs jeux fassent en sorte que ces conditions soient remplies mais c'est un peu plus complexe que ça. En premier il faudra voir ce que proposera ATI. Faire un jeu pour un constructeur c'est toujours gênant. En second il existe en fait une solution purement logiciel à l'utilisation du MSAA et des textures transparentes. Une solution tellement simple et efficace que beaucoup de personnes se demandent aujourd'hui pourquoi personne ne l'a jusqu'à présent utilisée.





MSAA et textures transparentes par logiciel
   

Suite à une discussion sur les forums de Beyond3D, humus, un développeur de démo technologiques, a réalisé une démo montrant deux méthodes pour obtenir un anti-aliasing sur les textures alpha associées à du MSAA. Le résultat est probant avec un coût en FPS assez faible. Alors c'est la solution miracle ? Non, et ce pour deux raisons. La première c'est que la qualité du FSAA produit, si elle est satisfaisante, n'égale pas celle utilisant le SSAA. La seconde plus difficile à accepter, c'est qu'elle grossit les traits des éléments que les textures alpha sont censées représenter.

    

Si dans le cas du grillage, ça passe c'est parce que le grillage présente une géométrie assez aérée. Par contre si on devait représenter une grille ayant de fins interstices alors cette technique tendrait à couvrir les interstices et ce n'est plus une grille qu'on verrait mais une plaque.





Le pixel popping
   

Jusqu'à présent tous les effets d'aliasing que nous avons vu pouvaient être présentés avec un screenshot, c'est-à-dire de manière statique. Avec le pixel popping c'est plus complexe. Cet aliasing fait référence à deux problèmes le premier statique où on voit qu'il manque des parties graphiques comme le montre l'image ci-dessous, mais aussi en dynamique c'est-à-dire lorsqu'on est en mouvement dans une scène 3D. Il se passe alors un effet d'apparition et de disparition partiel de l'élément graphique concerné (grillage, ligne téléphonique,...).

L'augmentation de résolution est une aide pour le pixel popping, mais largement insuffisante. De même ce n'est pas spécifiquement l'augmentation du nombre d'échantillons qui corrige le problème, mais simplement l'ajout de dégradé sur les bordures des objets fins subissant le pixel popping qui résoud le problème. Cet ajout tend en fait à légèrement augmenter l'épaisseur moyenne de l'objet





L'aliasing du bump mapping
   

Le bump mapping consiste à donner l'illusion d'une déformation en hauteur des surfaces auquel est associé un éclairage diffu et généralement spéculaire. Il y a toujours un éclairage associé au bump mapping sinon on ne pourrait pas voir les variations de hauteur des surfaces. Bien qu'il existe, lors des opérations de calcul du bump mapping + lumière diffuse, des pertes d'informations, elles ne sont pas très notables. Par contre l'ajout de lumière spéculaire amplifie la visibilité de ce phénomène et un aliasing parfois prononcé apparaît. La lumière spéculaire est une lumière intense réfléchie par la surface et qui en pratique apparaît comme une petite zone très claire sur les tuyaux et les murs humides de jeux comme Far Cry, Doom3, Half-Life 2,...

L'une des solutions est évidemment le SSAA, l'augmentation de résolution n'ayant ici aucun effet notable. Mais comme il s'agit plus d'erreur de calcul, la meilleure solution consiste à intégrer à l'algorithme de calcul du bump mapping avec lumière spéculaire une correction. Nous verrons qu'une approche similaire est utilisée pour l'aliasing de shader. Dans le cas présent comme le montre le document de NVidia, on estime l'erreur moyenne qu'on réinjecte dans les données pour la corriger.

L'aliasing de bump mapping est devenu un problème sérieux avec la généralisation de l'utilisation de cette technique 3D. Le bump mapping le plus utilisé étant le bump mapping per pixel.





Aliasing de shader (Aliasing de haute fréquence)
   

Pour comprendre l'aliasing de shader, il faut savoir qu'on peut assimiler une image d'une scène 3D qui se construit à un signal qui se propage. Bon je ne vais pas entrer dans les détails, mais voici une image qui va vous éclairer. Mettons-nous au bord d'une plage et regardons les vagues. Sur les 25 premiers mètres les plus proches de nous il y a 2 ou 3 vagues. A une distance de 25 à 50 mètres, il y en a 3 ou 4, à une distance de 100 mètres il y en a une dizaine. En fait plus on regarde loin, plus il y a de vagues dans un intervalle donné. La fréquence d'apparition des vagues est d'autant plus importante qu'on regarde loin. Et plus on regarde loin, plus il faut avoir un oeil de lynx pour les distinguer. Si on assimile les vagues à un signal sinusoïdal, on dit que la fréquence du signal augmente en fonction de la distance du regard.

Ce qui se passe avec les pixels c'est que plus on regarde loin dans une scène 3D, plus pour une distance donnée il y a de pixels à définir. Le problème en 3D c'est que la quantité d'informations (la définition et le nombre de pixels) a ses limites et on les atteint rapidement. Dès qu'on a plus assez d'informations, on a un effet d'aliasing. On parle d'aliasing haute fréquence ou en anglais High frequency aliasing.

Il y a deux situations pour lesquelles l'aliasing de shader est particulièrement important ou du moins peut l'être :

- Textures procédurales ; une texture procédurale est une texture générée par une formule mathématique exploitée par le pixel shader. Elles sont donc apparues avec les pixels shader. Un jeu qui a montré ce qu'on pouvait faire avec de telles textures et qui a fait sensation à sa sortie était Serious Sam. Rappelez-vous les grandes étendues de désert ou de gazon. C'était des textures procédurales. Voici un exemple ou l'on voit la dégradation des motifs de la texture.



- Les étendues d'eau (lac, mer, rivière) : Ce type de décors est particulièrement sensible à cela car, comme pour les textures procédurales, le regard peut porter loin et faire apparaître un aliasing. Mais dans ce cas l'eau est souvent animée et en plus par une fonction sinusoïdale qui amplifie le phénomène d'aliasing. Exemple dans je jeu Halo, d'un aliasing de shader sur la mer (sur Halo).

Comme solution on peut imaginer que le SSAA et l'augmentation de résolution sont une solution. Mais dans ce cas comme pour l'aliasing de bump mapping, les développeurs préfèrent prendre le problème à la source et intègrent dans leurs algorithmes une technique permettant de fortement limiter voire résoudre le problème d'aliasing. Cela se fait évidemment avec un petit surcoût en temps de calcul mais mieux vaut cela qu'un aliasing qui cache le paysage.

Il faut savoir que les pixels Shader 3.0 dans Directx 9.0c incluent une méthode d'anti-aliasing des shaders. C'est un des intérêts des pixels shader 3.0 qui est rarement noté.

Le problème est que tous les shader ne peuvent avoir un algorithme correcteur du moins acceptable pour le temps réel. Dans cette situation le SSAA apparaît comme la seule solution, mais c'est loin d'être la meilleure. Effectivement, le SSAA va filtrer les shader sans avoir connaissance des raisons de l'aliasing alors qu'un algorithme correcteur corrige exactement la raison du problème. De la même manière que le MSAA offre une qualité légèrement inférieure au SSAA, le SSAA offrira une qualité dans le choix des couleurs pour l'anti-aliasing inférieure à un algorithme correcteur. Toutefois il faut vraiment être pointilleux pour voir la différence et celle-ci ne se voit certainement pas durant une partie. On peut donc considérer dans la pratique que le SSAA est une bonne solution, mais il ne faut pas oublier qu'elle n'est pas parfaite.





HDR et FSAA
   

Le HDR c'est le High Dynamic Range, c'est-à-dire l'utilisation d'échelle de couleurs bien plus importante afin de permettre en particulier des effets de lumière bien plus réalistes. En pratique le HDR c'est l'utilisation d'une représentation en nombres flottants (en gros des réels) au lieu d'entiers pour les couleurs. La représentation en nombres entiers pour les couleurs est codée sur 8 bits pour chaque couleur permettant 256 nuances par couleur. Tandis que pour le HDR on travaille en FP32 (32 bits) par couleur.

Il semble que HDR et FSAA ne soient pas actuellement compatibles parce que cela consommerait une quantité de mémoire vertigineuse que même une carte équipée de 512 Mo de mémoire n'arriverait pas à contenter. Il se pose aussi le problème de savoir si le processeur de la carte sait manipuler la représentation en FP (Floating Point) pour faire du FSAA.

Bien que je sois encore en recherche d'informations sur ce sujet, il m'a semblé que toucher un mot sur la relation HDR et FSAA pouvait être utilise dans la mesure où, dans les mois qui viennent, nous allons de plus en plus parler du HDR dans les jeux.

David Kird de NVidia ne semble pas très optimiste pour une prise en charge par les cartes graphiques du FSAA avec la technologie HDR. Mais des rumeurs feraient état du contraire pour ATI. Quoiqu'il en soit il y aura à redire sur le HDR dans les mois à venir et sur les constructeurs.





Activer le FSAA dans la pratique
   

Si de plus en plus de jeux proposent les options de FSAA, ce n'est pas encore toujours le cas et même si ça l'ait, le jeu peut ne pas proposer tous les modes de FSAA que votre carte supporte. Dans cette situation, il peut être nécessaire d'activer le FSAA à partir des options situées dans les drivers. Le terme généralement employé est 'forcer' le FSAA par les drivers. C'est un terme approprié car ce faisant on oblige la carte graphique à travailler avec une option que le jeu ne gère pas du tout. De fait quand on force le FSAA pour un jeu, rien ne garantit qu'il fonctionnera bien ou fonctionnera tout simplement. On peut citer le cas de Halo pour les cartes ATI.





Conclusion
   

Comme vous avez pu le constater durant cet article, l'aliasing est un problème majeur en ce qui concerne la qualité d'affichage des scènes 3D. Mais tous les jeux ne montrent / subissent pas ce problème de la même manière. Ainsi les anciens jeux (thief 2 par exemple) ne montrent pas tant de problèmes avec l'aliasing. Il existe plusieurs raisons à cela. La première c'est que le nombre d'objets dans les jeux modernes a considérablement augmenté et donc la qualité d'aliasing qui peut être perçue est plus importante. La seconde c'est que des technologies comme les shader et le bump mapping ont fait apparaître de nouveaux aliasing. Un autre cas où les jeux peuvent apparaître plus sensibles à l'aliasing, c'est si le regard porte loin ou non dans un jeu. PAr exemple dans un jeu comme DOOM3 qui a lieu essentiellement dans des intérieurs de petite taille, l'aliasing est peu important si ce n'est à la limite sur le contour des objets, par contre sur un jeu comme Farcry ou Half-Life avec de grands extérieurs, toutes les formes d'aliasing apparaissent de manière plus importantes, ou du moins potentiellement.

Des techniques de correction d'algorithmes pour le bump mapping et les shader sont déjà mis en oeuvre, de même le MSAA qui peut être exploité de plus en plus couramment même avec des cartes de moyenne gamme (mais il reste encore du travail). Toutefois la solution idéale (en pratique) serait de pouvoir utiliser le SSAA. On y viendra un jour ou l'autre et il refait d'ailleurs son apparition avec les récentes cartes graphiques de NVidia 7800 pour solutionner le problème des textures alpha. Mais le SSAA ne pourra pas être généralisé avant plusieurs années à moins de concentrer tous les gains de puissance des évolutions des cartes graphiques à venir sur le SSA, ce que les développeurs n'apprécieraient pas et les joueurs non plus vu qu'il y a encore de nombreuses technologies et améliorations technologiques à intégrer aux jeux.

Dans l'immédiat il faut reconnaître que le MSAA + le SSAA pour les textures alpha, + des codes correcteurs pour certains bump mapping et shader + une résolution >=1280 x 960 résolvent bon nombre de problèmes sauf un seul l'aliasing de textures. Seul le SSAA permettant de le résoudre. Mais il ne faut pas non plus voir partout des textures aliasées. Effectivement s'il n'y a pas de motif géométrique cet aliasing est difficilement détectable (il suffit de penser à un mur crépi au motif irrégulier).

Avant de vous quitter voici quelques liens qui vous seront utiles pour aller plus loin. Toutefois j'attire votre attention sur le fait que certains de ces documents sont anciens et que les techniques de choix des échantillons par exemple ne correspondent pas, dans la réalité d'aujourd'hui, exactement à du OGSS pur ou du RGSS, mais plus à des évolutions mixant parfois les deux. Mais l'idée générale est conservée.




YOUM
(analyseur syntaxique temps réel)
Nombre de définitions trouvées
123
Multi-dico par texte : actif   -   Multi-mots par définition : 4






fonction
menu de droite
fin de menu

qcm du mois
Télescope spatial Hubble
fin qcm


Page générée en : 0.009 secondes
ligne
Technologies Onversity : Hydrogen 1.0 (moteur de base de données) - SE.EN 1.0 (moteur de recherche) - YOUM 2.0 (analyseur syntaxique temps réel)
Tous droits réservés à Jean-François MAQUINÉ
ligne