MFAA : un nouveau mode d'antialiasing pour les GeForce
Annoncé lors du lancement des GeForce GTX 900 et de l'architecture Maxwell de seconde génération, le MFAA est un nouveau type d'antialiasing avec lequel Nvidia compte pouvoir offrir un ensemble qualité et performances plus intéressant. Il vient d'être rendu disponible à travers de nouveaux pilotes et nous y avons jeté un rapide coup d'œil.
L'antialiasing, quelques rappels
Sans revenir dans trop de détails sur les modes d'antialiasing traditionnels, rappelons qu'ils ont pour but de réduire autant que possible les artéfacts liés au fait qu'une scène 3D est par nature sous-échantillonnée. Cela peut empêcher l'affichage correct d'éléments dont l'épaisseur représente moins d'un pixel et causer du fourmillement dans les textures ou au bord des objets. Sous certains angles proches de la verticale ou de l'horizontale ce fourmillement devient le tristement célèbre effet d'escalier sur les droites.
Pour résoudre ces problèmes il existe différentes solutions. La plus simple consiste à effectuer le rendu dans une résolution supérieure, puis à appliquer un filtre (downsampling) pour réduire la taille de l'image en vue de son affichage. Bien que très efficace sur le plan de la qualité puisque qu'elle démultiplie les informations utiles, cette technique appelée supersampling (SSAA) est très coûteuse en termes de performances et est généralement évitée. Nvidia en propose par exemple un dérivé à travers le mode de rendu DSR (Dynamic Super Resolution).
Une autre approche consiste à ne traiter que les détails géométriques dans une résolution plus élevée, en se contentant de calculer la couleur des pixels et l'éclairage dans la résolution de base. C'est le multisampling (MSAA). Plus concrètement, un pixel peut être vu comme une surface carrée qu'il est possible d'échantillonner en de nombreux endroits. Par exemple, quand un triangle est traité en MSAA 4x, la couverture géométrique sera vérifiée en 4 positions différentes pour chaque pixel, ce qui permet une précision plus importante en bordure des objets qui se traduit par des dégradés plus gracieux qu'un effet d'escalier. Le MSAA apporte une information supplémentaire concernant les contours de la géométrie.
Plus récemment, avec l'explosion de la puissance de calcul des GPU, des filtres de plus en plus complexes peuvent être appliqués à l'image. Il y a 10 ans, appliquer un filtre sur toute l'image aurait mis à genoux n'importe quel GPU, mais aujourd'hui de telles tâches n'ont plus qu'un impact limité, voire négligeable, sur les GPU modernes destinés aux joueurs. Parmi ces filtres citons par exemple le MLAA d'AMD, le FXAA de Nvidia, le CMAA d'Intel ou encore le SMAA 1x qui analysent l'image pour essayer d'y détecter les arrêtes des éléments qui souffrent d'aliasing de manière à les adoucir. Ces filtres agissent à postériori, à la manière d'autres types de filtres de post-processing, et n'apportent donc pas d'information supplémentaire pour améliorer la fidélité de la scène. Leurs possibilités sont donc limitées.
Enfin, et nous nous rapprochons du sujet de ce jour, la flexibilité grandissante des GPU leur permet de contrôler plus finement le MSAA, de quoi pouvoir combiner ce type d'antialiasing, qui apporte des informations supplémentaires, avec un filtre plus avancé. C'est ce que font le SMAA 4x, le TXAA et ce nouveau MFAA de Nvidia. Par ailleurs, ces derniers combinent à travers un filtre plus ou moins évolué chaque image calculée en MSAA avec l'image qui la précède. De quoi ajouter une composante temporelle à l'antialiasing, qui peut cependant avoir comme désavantage de réduire un peu trop la netteté de l'image. Nvidia assume totalement cet aspect du TXAA qui a d'ailleurs été calibré de manière à offrir un rendu plus doux, similaire à ce que l'on retrouve dans l'industrie cinématographique.
Le MFAA, c'est quoi ?
Pour le MFAA (Multi-Frame Sampled AA), Nvidia reprend un vieux concept d'ATI et le remet au goût du jour en l'associant à un filtre moderne.
Il y a un peu plus de 10 ans, lors du lancement des Radeon X800, ATI a introduit le Temporal AA. Le principe reposait sur l'utilisation par le GPU d'une grille programmable pour la détermination de la position des échantillons du MSAA à l'intérieur de chaque pixel. Cette grille de 8x8 disposait de 64 positions mais pour des raisons de performances il fallait bien entendu se contenter d'un petit nombre de celles-ci. Par exemple, en MSAA 4x, les 4 positions statistiquement les plus efficaces étaient sélectionnées.
ATI a cependant eu l'idée d'alterner les positions sélectionnées d'une image à l'autre. Avec un niveau de fps élevé, la persistance rétinienne (couplée à la lenteur des écrans LCD de l'époque) donnait l'illusion d'un antialiasing deux fois plus précis, tout du moins sur une scène statique. L'effet était moins convainquant en mouvement et la synchronisation verticale était obligatoire pour qu'il soit efficace.
Dix ans plus tard, Nvidia introduit enfin une grille d'antialiasing programmable dans ses GPU Maxwell de seconde génération mais pousse le concept un cran plus loin. En plus de pouvoir alterner la position des échantillons sélectionnés d'une image à l'autre, la grille de Nvidia est configurable par bloc de 4 pixels, ce que Nvidia nomme Multi-Pixel Programmable Sampling. Organiser la position des échantillons non pas par pixel mais par groupe de pixels permet d'optimiser la couverture de la scène et d'éviter les défauts liés à une structure trop régulière en se rapprochant quelque peu d'une structure aléatoire.
Enfin, Nvidia profite des technologies modernes pour ne plus faire reposer sur la persistance rétinienne la perception de la qualité supérieure d'un tel antialiasing. Un filtre se charge de combiner la nouvelle image à celle qui la précède avant son affichage. Nvidia donne peu de détails sur ce filtre mais nous a indiqué qu'il était configuré au cas par cas suivant les jeux et que le poids de chaque image dans le mélange n'était pas statique mais dynamique suivant les mouvements ou les couleurs, de manière à éviter de créer des artéfacts ou de rendre trop floue l'image lors de mouvements rapides.
Sur le principe c'est similaire au TXAA si ce n'est que la grille programmable est exploitée. Par contre contrairement à ce dernier qui a besoin d'être intégré dans le jeu, le MFAA peut être implémenté par Nvidia au niveau des pilotes. Cela ne veut pas dire qu'il est supporté automatiquement, un profil est nécessaire et est utilisé par Nvidia pour s'assurer que le filtre est paramétré correctement pour chaque jeu.
Grossièrement, le MFAA peut être vu comme un mélange de MSAA, de FXAA, de Temporal AA avec une petite dose d'Accumulation Buffer de feu 3Dfx.
Le principe du MFAA en images
Nous n'avons pas encore eu l'occasion de faire des screenshots comparatifs incluant le MFAA, d'une part parce que le seul moyen de capturer le résultat final est de passer par une carte de capture et d'autre part parce que comparer des screenshots en mouvement est délicat. Par ailleurs le fait qu'un profil soit nécessaire pour activer le MFAA empêche de l'analyser sur des outils de test spécifiques.
Pour vous aider à comprendre comment fonctionne le MFAA, nous avons cependant mis en place en petit montage. Si nous ne pouvons pas faire de screenshot du résultat final après filtre, nous pouvons sur base de screenshots successifs capturer les 2 états intermédiaires de la grille d'échantillonnage avant filtre et les mélanger nous-mêmes pour obtenir un résultat qui se rapproche du MFAA. Le filtre n'est pas exactement celui utilisé par Nvidia bien entendu, et il ne s'agit que d'une approximation grossière, mais elle est suffisamment proche sur les objets fixes de la scène pour illustrer le fonctionnement du MFAA :
[ No AA ] |
[ FXAA High ] [ MSAA 2x ] [ MSAA 4x ] |
+ |
[ MFAA 2xA ] [ MFAA 2xB ] [ MFAA 2xT émulé (MFAA 2xA + 2xB) ] |
Nous avons ainsi comparé du MFAA 2xT à du MSAA 2x et 4x. Les screenshots MFAA 2xA et 2xB représentent les deux états entre lesquels alterne le rendu avant filtre quand du MFAA est activé sur une base de MSAA 2x, comme c'est le cas dans le schéma de Nvidia un peu plus haut. Les images MFAA 2xA et 2xB prisent indépendamment ne sont ni meilleures ni moins bonnes que du MSAA 2x, simplement légèrement différentes : puisque la position des échantillons est différente, certains angles profitent plus de l'antialiasing que d'autres sur chacune de ces images.
Une fois les deux composantes du MFAA 2xT combinées, pour émuler le résultat après filtre, nous pouvons observer sur les éléments fixes (principalement la grue) une qualité d'antialiasing similaire à celle du MSAA 4x. Le résultat n'est pas identique, la position des échantillons ne l'étant pas, mais il est difficile de donner l'avantage à l'une ou l'autre méthode.
Par contre bien entendu les éléments en mouvements tels que les oiseaux ou la végétation sont flous voire dédoublés dans notre exemple. Heureusement ce n'est pas le cas avec le filtre MFAA de Nvidia et nous n'avons pas rencontré de tel soucis dans nos essais qualitatifs (relativement brefs ceci dit). Dans un tel cas, pour éviter ces défauts, ce filtre devra réduire nettement le poids de l'image précédente dans le mélange, voir le rendre nul, idéalement en faisant le tri entre les parties fixes et les parties en mouvement de l'image. Nvidia ne rentre pas dans le détail à ce niveau mais d'une manière ou d'une autre cela veut dire que la qualité de l'antialiasing sur les éléments en mouvement rapide sera moins bonne qu'avec du MSAA 4x. Il est cependant moins facile d'observer l'aliasing quand le mouvement est important et le compromis fait par Nvidia n'est pas insensé.
Car bien entendu, comme toujours avec l'antialiasing, il s'agit d'un compromis que vous pouvez voir sous deux angles : le MFAA 2xT offre plus de performances pour une qualité en général proche de celle du MSAA 4x ou plus de qualité qu'un simple MSAA 2x pour un impact mesuré sur les performances. De manière évidente, Nvidia préfère voir les choses sous le premier angle et ne verrait pas d'objection à ce qu'un testeur compare les performances des GeForce en MFAA 2xT à celles d'une Radeon en MSAA 4x.
A noter que Nvidia parle d'ailleurs de MFAA 4x lorsque le MFAA est activé sur base du MSAA 2x. Nous estimons cependant plus pertinent de parler de MFAA 2xT de manière à garder la référence au nombre d'échantillons réellement calculés pour chaque image, tout en mentionnant la composante temporelle. C'est la solution qui a été retenue par certains développeurs qui intègrent du SMAA ou du TXAA. En ce qui nous concerne : MSAA 2x, TXAA 2xT et MFAA 2xT exploitent deux nouveaux échantillons par pixel, MSAA 4x, TXAA 4xT et MFAA 4xT en exploitent quatre etc.
Le support du MFAA
Actuellement, à partir des pilotes GeForce 344.75, Nvidia a mis en place le support du MFAA dans ses pilotes pour Direct3D 10 et Direct3D 11, mais un profil spécifique est nécessaire pour qu'il soit actif dans les jeux. C'est le cas actuellement pour une vingtaine de titres, une liste qui devrait s'enrichir petit à petit :
- Assassin's Creed IV et Unity
- Battlefield 4
- Civilization V et Beyond Earth
- Crysis 3
- DiRT 3, DiRT Showdown, F1 2013, F1 2014, GRID 2, GRID Autosport
- Far Cry 3, Far Cry Blood Dragon
- Hitman Absolution
- Just Cause 2
- Saint Rows IV
- Splinter Cell Blacklist
- Titanfall
- Wargame European Escalation
Le MFAA est supporté sur les GeForce GTX 980, 970, 980M et 970M. Les GeForce précédentes ne pourront pas supporter le MFAA, une amélioration de l'architecture ayant été nécessaire pour l'implémenter. Il peut être exploité en complément du MSAA 2x, du MSAA 4x ou du MSAA 8x. Si l'option MFAA est active dans les pilotes, dès qu'un de ces types de MSAA est sélectionné dans les jeux compatibles, il est remplacé par la version correspondante du MFAA. A noter que le MFAA peut être utilisé en combinaison avec un mode de rendu DSR.
Le MFAA n'est actuellement pas compatible avec le SLI et plus particulièrement avec son mode AFR qui implique que chaque GPU travaille sur une image sur deux et n'a donc pas directement à sa disposition les éléments nécessaires pour appliquer le filtre du MFAA. Théoriquement il n'est pas impossible que Nvidia mette en place une solution, mais l'impact sur les performances que cela pourrait engendrer réduirait probablement à néant l'intérêt du MFAA face au niveau de MSAA supérieur.
D'ici quelques temps, le MFAA intégrera GeForce Experience et donnera plus de flexibilité à Nvidia pour calibrer ses profils qui tentent de proposer le meilleur compromis en termes de qualité et de performances pour les utilisateurs néophytes.
Les performances
Nous avons observé les performances du MFAA 2xT ainsi que du MFAA 4xT dans les 6 jeux de notre protocole qui profitent d'un profil compatible avec le nouveau mode d'antialiasing. Nous avons opté pour un niveau de qualité très élevé en 2560x1440 et pour une GeForce GTX 970 signée MSI, capable lors de ses tests de maintenir en permanence sa fréquence maximale de 1278 MHz.
Quand le TXAA était supporté, nous avons également observé ses performances et nous avons ajouté des mesures sans MSAA et ses dérivés mais avec le filtre FXAA (Battlefield 4, Crysis 3, Hitman Absolution ou Splinter Cell Blacklist) ou CMAA (GRID 2) actif. Nous avons complété le tout avec des mesures en DSR 2x (3620x2260) et en DSR 4x (5160x2880), toute autre méthode d'antialiasing étant alors désactivée.
[ Battlefield 4 ] [ Crysis 3 ] [ Far Cry 3 ] [ GRID 2 ] [ Hitman Absolution ] [ Splinter Cell BL ]
Par rapport à du MSAA, l'impact sur les performances du MFAA est d'environ 5% seulement, ce qui permet par exemple au MFAA 2xT d'être de 8 à 25% plus performant que le MSAA 4x, excepté dans GRID 2 où les performances en MSAA 4x sont légèrement supérieures.
C'est dans Crysis 3 que les gains liés au MFAA sont les plus importants, mais il faut rappeler que ce jeu supporte également d'origine l'antialiasing SMAA qui en mode 4x combine lui aussi du MSAA 2x et une composante temporelle pour offrir un très bon compromis. Le MSAA 2xT a l'avantage d'une grille qui alterne la position des échantillons mais en pratique la différence qualitative, encore une fois lors de nos brefs essais, n'est pas simple à établir. C'est dans un jeu lourd tel que Far Cry 3 qui ne propose que des options limitées au niveau de l'antialiasing que le MFAA a le plus d'intérêt.
Les performances en mode DSR chutent comme prévu rapidement, sans que le résultat ne soit toujours satisfaisant sur le plan de l'antialiasing, Nvidia se contenant du rendu dans une résolution supérieure sans optimisation de la grille. Nous ne vous conseillons pas d'utiliser du DSR pour remplacer le MSAA ou le MFAA, mais plutôt pour les compléter. C'est particulièrement le cas dans GRID 2 qui même en DSR 4x souffre d'un aliasing très important si le MSAA est désactivé.
Le MFAA, un compromis intéressant
Il est difficile de trouver une solution ultime à la problématique de l'aliasing. Chaque technique disponible a ses avantages mais aussi ses points faibles que ce soit en termes de performances ou de qualité du rendu. Pour contourner ces limitations il faut combiner différents types d'antialiasing, ce qui est facilité par l'évolution des GPU vers plus de flexibilité.
C'est ce que fait Nvidia avec le MFAA. Il s'inscrit ainsi directement dans la lignée du SMAA et du TXAA, en profitant en plus d'une grille d'échantillonnage programmable qui permet aux GPU Maxwell de seconde génération de fournir des éléments de meilleure qualité aux algorithmes d'antialiasing. De quoi offrir aux joueurs qui possèdent l'une des dernières cartes graphiques de la marque une option intéressante de plus pour venir à bout de l'aliasing.
A noter que le MFAA a été conçu de manière à être suffisamment simple à implémenter pour que Nvidia puisse s'en charger sans l'aide des développeurs de jeux vidéo, quitte à ne pas exploiter la totalité du potentiel de ce qu'il est possible de faire avec ses différentes composantes. Nul doute qu'il serait possible de mettre en place des algorithmes basés sur la grille programmable encore plus évolués et efficaces si elle était rendue directement exploitable par les développeurs de jeux vidéo. L'idéal étant bien entendu que ce type de fonctionnalité soit à terme standardisé, mais c'est un autre débat…
Contenus relatifs
- [+] 08/03: GDC: Nvidia parle du Tile Caching d...
- [+] 12/09: La class-action GTX 970 ouverte aux...
- [+] 01/08: Tile rendering pour Maxwell et Pasc...
- [+] 30/07: 30$ pour les acheteurs de GTX 970 ?
- [+] 17/06: Baisses AMD et Nvidia pour vider le...
- [+] 10/06: Computex: Mini-PC Zotac MAGNUS EN98...
- [+] 24/03: GDC: VR: Nvidia Multi-Res Shading e...
- [+] 24/03: GDC: Zotac MAGNUS EN980 avec GTX 98...
- [+] 23/03: GDC: Async Compute : ce qu'en dit N...
- [+] 13/01: CES: Gigabyte passe ses GTX 900 en ...