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

Publié le 28/11/2011 par
Imprimer
Etape 9 : l'effet de profondeur de champ
Pour l'effet de profondeur de champ, ou Depth of Field (DoF), 3DMark ne se contente pas d'un "simple" filtre de post-traitement, mais utilise une technique plus complexe, similaire au "Sprite-based Bokeh Depth of Field" rencontré dans Crysis 2. Grossièrement, cette technique consiste à étendre chaque pixel qui ne se trouve pas dans la zone nette de l'image grâce aux geometry shaders introduis par DirectX 10, dans des proportions qui dépendent de son niveau de flou. Voici ce que cela donne sur une portion de l'image (cliquez sur les liens pour obtenir l'image complète) :


[ Sans DoF ]  [ Avec DoF ]

Ce type d'effet de profondeur de champ consiste à générer, via les geometry shaders, un sprite (2 triangles qui font face à la caméra) pour chaque pixel qui ne doit pas rester net. La taille de ce sprite dépend du cercle de confusion, calculé au préalable dans un flottant de 16 bits, et un bokeh hexagonal y est plaqué pour simuler un diaphragme à 6 lames.

Cette opération est réalisée dans un format HDR 64 bits, R16G16B16A16_FLOAT, en pleine résolution, mais également dans une résolution divisée par 2 et par 4. Chaque pixel à traiter est dirigé vers l'une de ces résolutions suivant la taille de son cercle de confusion et elles sont ensuite combinées entre elles pour finaliser l'effet de profondeur de champ qui peut alors être ajouté dans l'image finale.


Plus un pixel est foncé, plus son cercle de confusion est petit. Les pixels blancs représentent ici les pixels dont le cercle de confusion dépasse la valeur au-delà de laquelle ils ne sont plus nets.


Plus de 2 millions de petits triangles sont générés, en fushia.

Quelques chiffres :

Temps de rendu : 9.7 ms (7.7 %)
Vertices avant tessellation : 1.10 millions
Vertices après tessellation : -
Primitives : 2.20 millions
Primitives éjectées du rendu : 0
Pixels : 22.41 millions
Eléments exportés par les PS : 22.70 millions
Texels : 93.12 millions
Instructions exécutées : 217.96 millions
Quantité de données lues : 87.1 Mo
Quantité de données écrites : 49.8 Mo
Vos réactions

Top articles