Cet article est basé sur le magazine de Jorge Jimenez, Jose Echevarria, Thiago Sauce et Diego Gutierrez.
Leur implémentation de démonstration de SMAA peut être trouvée
ici (fichier .exe). Sur ma GTX 960 2 Go, cela fonctionne très bien.
Anciennes méthodes d'anticrénelage
Pendant de nombreuses années, les normes de lissage étaient MSAA (Antialiasing Multisampling) et SSAA (Antialiasing Supersampling). En fait, ils offrent toujours la meilleure qualité parmi toutes
les techniques d'anti-crénelage modernes. Comme nous le savons, le repliement se produit en raison du manque d'échantillons, à la fois au niveau spatial (lignes brisées) et au niveau temporel (scintillement), généralement près des bords et des zones de l'image avec un contraste élevé / faible. Pour y faire face, nous avons deux méthodes qui étaient autrefois les seules solutions: le suréchantillonnage et le multiéchantillonnage. Avec le suréchantillonnage, nous agrandissons l'image, puis réduisons son échantillonnage à la résolution souhaitée. Ce principe fonctionne très bien car il s'applique à tous les aspects du problème. Le multi-échantillonnage utilise une solution similaire. Dans cette méthode, chaque échantillon est dupliqué sur la base d'un coefficient spécifique. Avec les hautes résolutions modernes, cela nécessite des cartes graphiques assez puissantes. Par conséquent, nous avons besoin de nouvelles méthodes de lissage, tant au niveau spatial que temporel. Toutes ces méthodes utilisent un algorithme dans leur reconnaissance de bord de travail. Mais ils effectuent d'autres opérations.
Méthodes de lissage modernes
Il existe de nombreuses méthodes modernes basées sur des filtres qui font du bon travail, bien qu'elles soient inférieures aux deux énumérées ci-dessus. FXAA, DEAA, GPAA, GBAA, CSAA, EQAA, DLAA ... Dans cet article, nous parlerons de SMAA et de son prédécesseur - MLAA. Ces méthodes modernes basées sur des filtres ont leurs propres problèmes:
- La plupart des algorithmes de reconnaissance des contours qui sous-tendent ces méthodes ne prennent en compte que les différences numériques entre les pixels et ignorent la façon dont ils sont affichés pour le spectateur.
- La forme originale de l'objet n'est pas toujours conservée, l'arrondi général des coins est presque toujours clairement visible sur les textes, les angles vifs et les sous-pixels.
- La plupart des solutions sont conçues pour gérer uniquement les motifs horizontaux ou verticaux et ignorer les diagonales.
- Les éléments réels du sous-pixel et le mouvement du sous-pixel ne sont pas traités correctement. Les réflexions de repliement (spéculaire) et l'ombrage (ombrage) ne sont pas complètement éliminés.
Comme vous pouvez le deviner, nous avons soulevé ces problèmes parce que nous voulons les éliminer.
Antialiasing morphologique (MLAA)
MLAA tente d'évaluer la couverture de la géométrie d'origine. Pour une pixellisation précise du triangle lissé, il est nécessaire de calculer la zone de couverture de chaque pixel à l'intérieur du triangle afin de bien le mélanger avec l'arrière-plan. MLAA commence par une image anticrénelée, puis inverse le processus en vectorisant les silhouettes pour calculer les zones qu'elles couvrent. Comme l'arrière-plan ne peut pas être reconnu après la pixellisation, le MLAA le mélange ensuite avec le voisin, en supposant que sa valeur est proche de la valeur de l'arrière-plan d'origine.
En d'autres termes , l'algorithme reconnaît les limites (en utilisant des informations sur la couleur ou la profondeur), puis y trouve des motifs spécifiques. Le lissage est assuré par un mélange intelligent des pixels dans les bordures. MLAA a des implémentations sur DirectX 10 et Mono Game (XNA). Il est honnêtement implémenté dans des jeux comme Fable II. Les créateurs du MLAA ont ensuite créé le SMAA, ou
Enhanced Subpixel Morphological Antialiasing (anti-aliasing morphologique sous-pixel avancé), qui est le thème principal de cet article.
MLAA en actionAntialiasing morphologique sous-pixel amélioré (SMAA)
Comparaison de SMAA et d'autres méthodes dans Crysis 2SMAA offre une reconnaissance des bords fiable, ainsi qu'un moyen simple et efficace de gérer les éléments géométriques nets et les lignes diagonales. De plus, SMAA ne modifie pas la forme de la géométrie, comme le font de nombreuses autres méthodes.
Ci-dessus - AA non; au milieu - MLAA; ci-dessous - SMAASMAA est construit sur le pipeline MLAA et améliore ou repense chaque étape de celui-ci. En particulier, la reconnaissance des contours est améliorée en utilisant des informations sur les couleurs et en adaptant le contraste local pour créer des contours plus nets. La méthode augmente le nombre de motifs utilisés pour enregistrer des éléments géométriques nets et des diagonales. Enfin, il montre comment le lissage morphologique peut être combiné avec précision avec le multi-échantillonnage ou le sur-échantillonnage et la reprojection temporelle.
Reconnaissance des bords
La reconnaissance des contours est une étape critique car les contours non reconnus restent déformés. En revanche, trop de bords avec filtrage réduisent la qualité de l'image lissée. Diverses informations peuvent être utilisées pour la reconnaissance des contours: couleur, luminosité, profondeur, normale de surface et leur combinaison. SMAA utilise luma pour quatre raisons:
- Moins d'artefacts.
- La luminosité est toujours visible.
- Il peut gérer la distorsion de l'ombrage.
- Et enfin, c'est plus rapide que la chrominance.
Gauche et centre: autres méthodes de reconnaissance des bords, conduisant à l'apparition d'intersections et d'artefacts rouges; à droite: arêtes parfaitement nettes SMAARappelez-vous cette image. Voici comment fonctionne la reconnaissance des contours: la valeur finale calculée est une valeur booléenne appelée la
bordure du bord gauche . De même, les valeurs booléennes pour le bord supérieur sont calculées. Formule
Toutes les valeurs de c sont appelées
deltas de contraste .
Traitement de motif
La reconnaissance des formes SMAA vous permet d'enregistrer des éléments géométriques nets, tels que les angles, traite les diagonales et fournit une recherche précise des distances.
Éléments géométriques tranchants: la vectorisation des silhouettes dans le MLAA est sujette aux arrondis. Pour éviter cela, le SMAA utilise l'observation que l'intersection des bords dans les lignes de contour a une taille maximale d'un pixel, et pour les angles vifs, cette longueur est susceptible d'être plus longue. Par conséquent, le SMAA prend des bords se croisant de deux pixels de long, ce qui permet un traitement des coins moins agressif.
Motifs diagonaux
: nous avons ajouté une toute nouvelle façon de reconnaître les motifs diagonaux. Il comprend les deux étapes suivantes:
- Recherche de distance diagonale et à gauche et à droite des lignes diagonales.
- Obtenir des arêtes entrecroisées et .
- En utilisant cette entrée, nous définissons un motif diagonal spécifique pour accéder à la texture pré-calculée de la région, obtenir la région et .
Si la reconnaissance des motifs diagonaux échoue, la reconnaissance des motifs orthogonaux démarre.
Recherche précise des distances: la clé pour reconnaître et classer les motifs est d'obtenir la distance exacte du bord (la longueur aux deux extrémités de la ligne). Pour accélérer ce processus, MLAA utilise activement l'interpolation matérielle. Le filtrage matériel bilinéaire peut être utilisé pour obtenir et coder jusqu'à quatre valeurs différentes en une seule opération d'accès à la mémoire. Cette interpolation linéaire de deux valeurs binaires (c.-à-d.
Bilinéaire ) crée une seule valeur à virgule flottante décrite par la formule suivante:
O Where
et
Sont deux valeurs binaires (0 ou 1), et
Est la valeur d'interpolation.
Résultats
MLAA fonctionne avec un échantillon par pixel. Ce qui conduit à un sous-échantillonnage, à cause duquel il est impossible de recréer de vrais éléments de sous-pixel.
Comparez MLAA avec SMAA et sans AACependant, SMAA fonctionne à un niveau sous-pixel. Cela conduit à ce qui suit:
- Contraste local
- Reconnaître les motifs diagonaux
- Éléments géométriques tranchants
- Recherche exacte
Tout cela peut être vu dans l'image ci-dessous, où ces aspects sont comparés aux résultats d'autres méthodes. En fait, SMAA peut produire des résultats proches de SSAA 16x.
Les frais généraux créés par chacune de ces solutions sont négligeables. En particulier, l'adaptation du contraste local ne prend que 0,08 ms, la reconnaissance des éléments géométriques nets et des distances exactes prend 0,01 ms, et le traitement des diagonales ajoute 0,12 ms supplémentaire. Autrement dit, SMAA est assez rapide, plus lent que SSAA et MSAA, mais plus fructueux et moins gourmand en ressources.