Le voyage du jour : l’anti-aliasing
- L’anti-aliasing est une forme d’art qui a évolué au fil de décennies de mathématiques, de techniques créatives et d’innovations continues.
- Il existe diverses approches, comme SSAA, SMAA et DLAA, qui cherchent toutes à atteindre le même objectif par des méthodes différentes.
- Cet article examine le fonctionnement de ces méthodes et présente une nouvelle façon de résoudre le problème : l’anti-aliasing analytique.
Mise en place
- Pour comprendre l’algorithme d’anti-aliasing, l’implémentation utilise un canvas WebGL qui dessine un cercle en mouvement.
- Si la résolution est trop élevée pour que l’aliasing soit visible, il est possible de la réduire pour l’observer.
Analyse technique
- Comprendre le code GPU n’est pas indispensable, mais cela aide à saisir la partie analytique.
- Le cercle n’est pas dessiné géométriquement, mais par un shader.
SSAA
- SSAA signifie Super Sampling Anti-Aliasing : le rendu est effectué à une résolution plus élevée, puis sous-échantillonné.
- L’implémentation est simple, mais les besoins en mémoire et en calcul sont élevés.
- Un placement approprié des échantillons est nécessaire, ainsi qu’une intégration approfondie au pipeline de rendu.
MSAA
- MSAA n’effectue le super sampling que sur la silhouette du modèle, la géométrie qui se chevauche et les bords de texture.
- Il est implémenté par le matériel, et sa prise en charge dépend du hardware.
- Dans certaines situations, son coût en performances peut être nul.
Anti-aliasing en post-traitement
- En 2009, l’article d’Alexander Reshetov a donné naissance à MLAA.
- FXAA est un algorithme inspiré de MLAA, peu coûteux en performances et facile à implémenter.
- Il est plus efficace dans les scènes complexes.
Anti-aliasing analytique
- L’anti-aliasing analytique prend le problème à l’envers : en connaissant la forme nécessaire, il dessine directement à l’écran des pixels déjà anti-crénelés.
- Il ne nécessite ni buffer supplémentaire ni exigence matérielle particulière, et peut fonctionner même sur WebGL 1.0 ou OpenGLES 2.0 de base.
- Il calcule la taille des pixels pour faire disparaître progressivement les bords de la forme.
Implémentation
- Grâce au signed distance field, il est possible de connaître à chaque point d’échantillonnage la distance jusqu’à la forme voulue.
- Les fonctions
dFdx, dFdy et fwidth sont utilisées pour calculer la taille des pixels.
- Le blending est effectué via l’alpha blending ou MSAA + Alpha to Coverage.
- Il est possible d’utiliser
linearstep à la place de smoothstep pour optimiser les performances.
Conclusion
- L’anti-aliasing analytique offre des bords lisses en atténuant avec précision les contours des formes.
- Il existe plusieurs méthodes d’implémentation, permettant de choisir entre performances et précision.
1 commentaires
Avis Hacker News