Comprendre le rendu 3D étape par étape avec 3DMark11

Publié le 28/11/2011 par
Imprimer
Etape 4 : la gestion de l'antialiasing
Le rendu différé n'étant pas directement compatible avec l'antialiasing classique de type MSAA, notamment parce que l'éclairage n'est pas calculé lors du traitement de la géométrie, Futuremark a dû mettre en place une technique particulière. Elle consiste en la création d'une carte des arrêtes qui sera utilisée lors du calcul de l'éclairage pour les filtrer, tout comme l'aurait fait le MSAA :


Jusqu'ici, tous les RT ont été rendus avec antialiasing 4x de type MSAA, Futuremark ayant préféré ne pas faire appel à un antialiasing de type post processing tels que les FXAA et MLAA proposés aux développeurs de jeux vidéo par Nvidia et AMD.

Le MSAA n'est cependant pas nativement compatible avec le rendu différé qui est conçu pour ne calculer l'éclairage qu'une seule fois par pixel et ignore ainsi les samples qui le composent. Une méthode brute pourrait être, à partir de ce moment, de passer dans un mode similaire au super sampling, ce qui est facilité par DirectX 10.1 et 11. Cela reviendrait cependant à calculer l'éclairage en 3840x2160, gaspillerait beaucoup de ressources et irait à l'encontre du sens même du rendu différé.

Futuremark a opté pour une autre approche, hybride entre le MSAA et le post processing. Elle consiste comme pour ce dernier à exploiter un algorithme capable, à partir des données du g-buffer, de détecter les arrêtes qui devront être lissées. Sans être parfait, il serait alors trop gourmand, cet algorithme fait un plutôt bon travail pour détecter uniquement les arrêtes extérieures aux objets, le filtrage des arrêtes internes n'étant pas utile.

Ce RT, au format R8_UNORM (8 bits entier), qui contient les arrêtes détectées sera utilisé lors de toutes les passes d'éclairage à venir pour leur indiquer les pixels complexes, qui doivent recevoir une attention particulière. Un branchement dynamique dans les pixels shaders permettra de calculer directement la valeur du mélange des 4 samples, comme cela aurait été le cas lors d'une utilisation classique du MSAA.

Parallèlement à cela, le RT dans lequel est construit l'image et qui jusqu'ici ne contient que le ciel, ainsi que le Depth Buffer, au départ au format MSAA 4x, peuvent être directement filtrés puisque les informations supplémentaires qu'ils contiennent ne seront plus utiles par la suite. Les RTs qui contiennent les composantes diffuses et spéculaires de la couleur des pixels doivent cependant être conservés au format MSAA 4x, puisque les samples supplémentaires qu'ils contiennent seront nécessaires pour calculer les pixels complexes.

Quelques chiffres :

Temps de rendu : 1.4 ms (1.1 %)
Vertices avant tessellation : 3
Vertices après tessellation : -
Primitives : 1
Primitives éjectées du rendu : 0
Pixels : 2.07 millions
Eléments exportés par les PS : 6.22 millions
Texels : 39.43 millions
Instructions exécutées : 185.44 millions
Quantité de données lues : 182.3 Mo
Quantité de données écrites : 9.9 Mo
Vos réactions

Top articles