« Les cartes graphiques/Les Render Output Target » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 77 :
 
Comme on l'a vu, le MSAA utilise une plus grande quantité de mémoire vidéo. Le '''Fragment Anti-Aliasing''', ou FAA, cherche à diminuer la quantité de mémoire vidéo utilisée par le MSAA. Il fonctionne sur le même principe que le MSAA, à un détail prêt : il ne stocke pas les couleurs pour chaque sous-pixel, mais utilise à la place un masque. Dans le color-buffer, le MSAA stocke une couleur par sous-pixels, couleur qui peut prendre deux valeurs : soit la couleur calculée lors du filtrage de texture, soit la couleur noire (par défaut). A la place, le FAA stockera une couleur, et un petit groupe de quelques bits. Chacun de ces bits sera associé à un des sous-pixels du bloc, et indiquera sa couleur : 0 si le sous-pixel a la couleur noire (par défaut) et 1 si la couleur est à lire depuis le color-buffer. Le ROP utilisera ce masque pour déterminer la couleur du sous-pixel correspondant. Avec le FAA, la quantité de mémoire vidéo utilisée est fortement réduite, et la quantité de donnée à lire et écrire pour effectuer l'anti-aliasing diminue aussi fortement. Mais le FAA a un défaut : il se comporte assez mal sur certains objets géométriques, donnait naissance à des artefacts visuels.
 
==Position des sous-pixels==
 
Un point important concernant la qualité de l'anti-aliasing concerne la position des sous-pixels sur l'écran. Comme vous l'avez vu dans le chapitre sur la rasterization, notre écran peut être vu comme une sorte de carré, dans lequel on peut repérer des points. Reste que l'on peut placer ces pixels n'importe où sur l'écran, et pas forcément à des positions que les pixels occupent réellement sur l'écran. Pour des pixels, il n'y a aucun intérêt à faire cela, sinon à dégrader l'image. Mais pour des sous-pixels, cela change tout. Toute la problématique peut se résumer en un phrase : où placer nos sous-pixels pour obtenir une meilleure qualité d'image possible.
 
La solution la plus simple consiste à placer nos sous-pixels à l'endroit qu'il occuperaient si l'image était réellement rendue avec la résolution simulée par l'anti-aliasing. Cette solution gère mal les lignes pentues, le pire cas étant les lignes penchées de 45 degrés par rapport à l'horizontale ou la verticale.
 
[[File:Supersampling - Uniform.svg|centre|Antialiasing uniforme.]]
 
Pour mieux gérer les bords penchés, on peut positionner nos sous-pixels comme suit. Les sous-pixels sont placés sur un carré penché (ou sur une ligne si l'on dispose seulement de deux sous-pixels). Des mesures expérimentales montrent que la qualité optimale semble être obtenue avec un angle de rotation de arctan(1/2) (26,6 degrés), et d'un facteur de rétrécissement de √5/2.
 
[[File:Supersampling - RGSS.svg|centre|Antialiasing à grille tournée.]]
 
Le Quincunx utilise la grille suivante. Avec cette grille, les sous-pixels sont partagés avec les pixels voisins. Une fois qu'on a calculé un sous-pixel dans un bloc, le résultat est réutilisable directement dans les calculs de couleur de l'autre bloc. Ainsi, on a besoin de calculer que deux sous-pixels pour un seul pixel : ceux indiqués en rouge sur le schéma au-dessus. L'algorithme FLISQUAD réutilise l'astuce du Quincunx, mais en utilisant une grille tournée, comme dans l'algorithme à grille tournée.
 
[[File:Supersampling - Quincunx.svg|centre|Antialiasing Quincunx]]
 
D'autres techniques placent les sous-pixels à des positions aléatoires dans le pixel. Et contrairement à ce qu'on pourrait croire, la qualité est souvent au rendez-vous.
 
[[File:Supersampling - Random.svg|centre|Antialiasing aléatoire.]]