Afin de bien comprendre cet article, il est conseillé de lire au préalable l'article :
principes de base : la 3d.
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.
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.
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.
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.
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.
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.
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.
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.
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