Filtrage des textures

Afin de bien comprendre cet article, il est conseillé de lire au préalable l'article :
principes de base : la 3d.

Texture mapping

Si l'on essaye de s'imaginer l'application de textures sur un modèle tridimensionnel, il serai logique de penser que le texture mapping (action de couvrir un objet composé de polygones avec de texture afin de lui donner un aspect réel) s'effectue en utilisant une seule texture pour recouvrir la totalité de la surface de l'objet. Toutefois, un tel procédé impliquerai des besoins en mémoire et en bande passante tels que que la carte graphique aurai besoin de plusieurs passes pour calculer et appliquer la texture provoquant une chute des performances.
En réalité, on applique de nombreuses « petites » textures sur la surface 3D. Les besoins en ressources sont alors moindres et la carte graphique est alors capable de le faire en une seule passe. Pourtant, cela pose le problème des raccords entre toutes les petites textures, puisqu’elle vont donc être mise bout à bout. De la même manière que lorsqu'on pose du papier-paint, il faut faire coïncider les motifs puisqu'indépendamment de leur forme, un panneau de tapisserie est toujours rectangulaire.

Dès lors, une multitude de méthodes de filtrage de texture ont été définies, chacune ne différant de l’autre que par la fidélité de l’algorithme utilisé pour prendre en compte tous les texels mis en jeu. Sauf que malheureusement, plus on prend de texels, et plus le procédé devient gourmant, aussi bien en bande passante qu’en calculs. Il s’agit donc de trouver le meilleur compromis possible en fonction de la puissance et de la bande passante disponible, et c’est dans cette optique que 4 techniques ont majoritairement été utilisées aujourd’hui dans les jeux.

Point sampling

Le point sampling fut le premier à être utilisé de part sa simplicité. En effet, il constite à déterminer la couleur d'un pixel en utilisant la couleur du textel se trouvant le plus au centre.
L’écart avec la réalité est important puisque lorsque plus d’un texel est à l’origine de la couleur d’un pixel, choisir arbitrairement la couleur de ce dernier par la couleur du texel centrale peut dénaturer la forme de l'image qu'on représente. De plus, si l'objet se rapproche du premier plan, il arrivera un moment ou il y aura plus texels que de pixels ce qui provoquera un crénelage disgracieux.

Filtrage bilinéaire

Introduit par 3dfx, le filtrage bilinéaire permet de limiter cet effet de pixellisation (Aliasing), et de gommer ces jointures caractérisant la frontière entre chaque texture. Il procède à une interpolation en 2d de la couleur des quatres textels adjacents (sous forme de carré) au texel central pour déterminer la couleur du texel central et donc du pixel affiché à l'écran. Les textures au premier plan sont alors lissées.
Toutefois un problème se pose. Les textures ayant la même taille, celles qui se trouve en arrière plan (disposant de mois d'espace pour s'afficher à l'écran) ont donc une résolution plus faible. Le filtrage bilinéaire provoque sur ces textures un flou assez grossier.

Mip-mapping

La technique du mip-mapping permet de résoudre ce problème. Le mip-mapping permet de créer plusieurs textures de taille intermédiaire et identiques à la texture originale, avant de les appliquer sur la surface 3D.
Les mip-maps sont la variation d’une seule et même texture disponible sous des tailles différentes. Imaginez que vous soyez dans un long corridor en train de regarder un sol carrelé s'étendant jusqu'à l'horizon. Pour restituer une apparence réaliste les carreaux les plus proches de vous doivent paraître très détaillés. Cela dit, plus on se rapproche de l'horizon plus la texture devient petite ; il y a de moins en moins de pixels disponibles pour représenter la texture. Des détails comme les joints entre les carreaux sont perdus à cause des dimensionnements car le driver de la carte graphique ne sait pas quels sont les détails importants de la texture. Le mip-mapping améliore la qualité de la représentation graphique en juxtaposant les versions de la texture diminuées de moitié au fur et à mesure que la profondeur de champ augmente. Cette graduation ou la transition d'un niveau mip-map au suivant est déterminé par ce que l'on appelle «Texture LOD» (Level Of Detail - niveau de Détail).
De cette façon, on peut adapter le niveau de détail en fonction de l’éloignement ou du rapprochement de la texture. Ce qui réduit davantage l’effet d’aliasing en arrière plan. À noter que la quantité mémoire nécessaire est également réduite, puisqu’on utilise des textures de tailles plus petites.
Désormais un nouveau problème fait son apparition puisque c'est maintenant la transition d'un niveau de détail (LOD) à l'autre qui est visible.

Filtrage trilinéaire

Le filtrage trilinéaire a alors été mis au point pour réduire cet effet de transition entre plusieurs mip-maps. S’appuyant tout simplement sur le filtrage bilinéaire, le filtrage trilinéaire permet de filtrer les mip-maps, en plus des textures. Mais cette fois-ci, l’interpolation s’effectue en 3d (sous forme de cube) sur les 8 pixels adjacents.
Le filtrage trilinéaire rend invisible les transitions entre chaque mip-maps. Mais en contrepartie, le passage d'un mip-map à un autre occasionne une perte de résolution.

Filtrage anisotropique

Enfin, le filtrage anisotropique constitue le procédé le plus abouti. Comme le suggère son nom, les texels ne sont pas tirés d’une forme symétrique, mais plutôt en utilisant un motif irrégulier ajusté à la perspective (figure anisotropique). La forme de cette figure n’est pas standardisée, mais on utilise en général des motifs rectangulaires, trapézoïdaux ou des parallélogrammes dont les formes dépendant de l’angle de la surface.
Le nombre de texels pris en compte pour le filtrage détermine le niveau de celui-ci. Avec le filtrage anisotropique 1x, on prend 8 texels. Le niveau maximum est 16x, mais les constructeurs n’utilisent pas tous les paliers intermédiaires. Les plus courants sont 2x (16 texels), 4x (32 texels), 8x (64 texels) et 16x (128 texels). Plus le niveau de filtrage est élevé, plus le temps de calcul augmente, et dans une proportion considérable.

Anti-aliasing / Full sceen anti-aliasing

Egalement connu sous le nom d’anti-crénelage, l’anti-aliasing permet d’adoucir l’effet « d’escalier » (pixellisation) apparaissant sur les bords de chaque objet, provoqué par l’insuffisance de la définition d’une image.
Le principe de l’anti-aliasing est assez proche du filtrage de texture, puisque cette technique mélange la couleur de plusieurs pixels adjacents pour déterminer la couleur à appliquer à un pixel. Ce qui permet d’appliquer un dégradé de couleur sur chaque dent-de-scie ou crénelage. Il en résulte un léger flou qui réduira cet effet d’escalier (c’est en réalité un effet d’optique donnant l’impression d’une continuité).
Aujourd’hui, c’est surtout la technique du FSAA (Full Scene Anti Aliasing) qui est utilisée. Celle-ci ne s’applique plus seulement sur un objet, mais sur une image 3D complète. Les techniques d’anti-crénelage diffèrent du constructeur ATI à nVidia, et l’on distingue essentiellement deux types différents.

Technique mise au point par 3dfx, le super-sampling permet de calculer une image 3D, par interpolation, dans une résolution supérieure, avant d’être filtrée dans une résolution inférieure. Cette technique filtre la totalité d’une scène 3D (bordures, textures,…), et offre d’excellents résultats. En contrepartie, elle consomme beaucoup de ressources, et entraîne une forte chute des performances.

Moins gourmand, le multi-sampling ne s’applique que sur les extrémités des polygones, et permet de calculer plusieurs images (décalées les unes des autres d’un ou plusieurs pixels) d’une même scène 3D. Ces images sont ensuite superposées pour recréer la scène 3D à afficher.

En optant pour un réglage FSAA 2X, le multi-sampling calculera deux images pour recréer l’image finale. Tandis qu’en utilisant le super-sampling, on calculera une image deux fois plus grande avant de filtrer l’image et de réduire la résolution.

Les constructeurs utilisent des algorithmes de filtrage anticrénelage plus complexes en mélangeant par exemple le super-sampling avec le multi-sampling, afin d’associer le meilleur filtrage aux performances. Ces techniques servent essentiellement de base à ATI et nVidia qui utilisent des algorithmes d’anti-crénelage optimisés, plus complexes et offrant de meilleurs résultats en général. L’inconvénient du FSAA reste, quant à lui, de générer un effet de flou. En particulier sur les petits détails.

High Dynamic Range Rendering (HDR)

Effet à la mode, le rendu HDR (High Dynamic Range Rendering) permet d’obtenir des effets de lumière plus aboutis en utilisant une plage dynamique plus étendue. Bien que ce soit en réalité plus compliqué, de nombreux effets pouvant être ajoutés et traités (bloom / glare, motion blur, tone mapping, etc.), nous simplifierons en affirmant que le rendu HDR permet de bénéficier d’une palette de couleurs moins ternes, d’une plus grande intensité de lumière, d’effets d’éblouissements, de plus de contraste, etc. On peut ainsi mieux adapter la gamme de couleur perçue en fonction de l’environnement, et obtenir une meilleure réflexion de la lumière sur l’environnement pour encore plus de photo réalisme.

Avec un rendu 3D classique, la lumière et la réflexion de celle-ci sur l'environnement offrent une intensité assez "fade". En utilisant le mode de rendu HDR, l'intensité lumineuse est plus proche de la réalité, et on observe davantage de nuances dans les parties sombres. Les zones obscures sont davantage nuancées, et la réflexion de la lumière sur chaque élément du décor est poussée à l'extrême. L'impression de se trouver à l'intérieur d'un monument religieux est accentuée. L'immersion dans le jeu n'en est que meilleure. Seul le taux de contraste de votre moniteur LCD pourra limiter le rendu HDR à l'affichage.

Conclusion

Depuis plusieurs années les différents ont connu une évolution énorme qui a apporté un niveau de réalisme ahurissant dans les jeux modernes. Leur usage doit pourtant se faire de manière réfléchie car bein souvent, la erte de performance est telle lors de leur activation que la jouabilité en subi gravement les conséquences.

Quoi qu'il en soit, on ne peut qu'admirer les avancées faites en terme de réalisme et cela ne peut nous laisser que rêveur en songeant aux innovatinos que nous apportera la prochaine décennie.



Pour plus d'infos sur le filtrage des textures: onversity - filtrage des textures