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

Publié le 28/11/2011 par
Imprimer
Etape 2 : le remplissage du g-buffer
Après avoir préparé les RT, le moteur initie une première passe géométrique : le remplissage du g-buffer. Lors de cette étape, relativement lourde, l'ensemble des objets qui composent la scène sont passés en revue et traités pour remplir le g-buffer. Cela inclut la tessellation ainsi que l'application des différentes textures.


Les objets peuvent être présentés au GPU sous différents formats.

3DMark 11 fait une utilisation de l'instancing aussi souvent que possible, un mode qui permet d'envoyer une série d'objets identiques (par exemples toutes les feuilles, toutes les têtes qui décorent les colonnes, etc.) lors d'une seule commande de rendu (draw call). Limiter leur nombre permet de réduire la consommation CPU. Il y en a 91 en tout dans cette passe principale de rendu, dont 42 font appel à la tessellation. En voici quelques exemples :


Commandes de rendu : [ 1 ][ 6 ][ 24 ][ 35 ][ 86 ]


Le g-buffer est constitué de 4 RT en 1920x1080 avec antialiasing de type multisample (MSAA) 4x. Notez que si vous êtes attentifs vous pourrez observer un petit bug de rendu :


[ Le tampon Z ]
[ Les normales ]
[ Les couleurs diffuses ]
[ Les couleurs spéculaires ]

Le Depth Buffer, ou tampon Z, est au format D32 (32 bits). Il continent l'information de profondeur de chaque élément par rapport à la caméra, plus l'objet est foncé, plus il est proche.

Les normales (= perpendiculaires à chaque point) sont au format R10G10B10A2_UNORM (32 bits, 10 bits entier par composante). Elles vont notamment permettre d'ajouter des détails aux objets via une technique de bump mapping évoluée.

Les composantes diffuses de la couleur des pixels sont au format R8G8B8A8_UNORM (32 bits classique, 8 bits entier par composante), elles représentent un éclairage uniforme, qui prend en compte l'inclinaison avec laquelle la lumière atteint l'objet, mais ignore la direction du rayon réfléchi.

Les composantes spéculaires de la couleur des pixels sont au format R8G8B8A8_UNORM (32 bits classique, 8 bits entier par composante), elles prennent cette fois en compte la direction du rayon réfléchi, ce qui permet de donner un aspect brillant aux objets et d'intégrer le léger reflet de la lumière sur les bords.

La dernière des commandes de rendu met en place le ciel, représenté par une demi-sphère qui englobe la scène. Etant donné que le ciel n'est pas un élément éclairé comme les autres, mais bien une surface lumineuse, il est rendu d'une manière directe et non différée, ce qui inaugure la construction de l'image finale :


Quelques chiffres :

Temps de rendu : 18.2 ms (14.5 %)
Vertices avant tessellation : 0.91 million
Vertices après tessellation : 1.95 millions
Primitives : 1.90 millions
Primitives éjectées du rendu : 1.02 million
Pixels : 8.96 millions
Eléments exportés par les PS : 30.00 millions
Texels : 861.31 millions
Instructions exécutées : 609.53 millions
Quantité de données lues : 130.2 Mo
Quantité de données écrites : 158.9 Mo
Vos réactions

Top articles