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

Publié le 28/11/2011 par
Imprimer
Etape 10 : le post-traitement
La dernière étape lourde du rendu de 3DMark est le post-traitement, qui englobe différents filtres et effets optiques : éblouissement (bloom), halos (lens flares) et réflexions formés dans l'objectif, grain, tone mapping et redimensionnement. Les effets optiques sont calculés via les compute shaders et représentent le plus gros de la charge du post-traitement. Le tone mapping permet d'interpréter l'image HDR alors que le redimensionnement simule un format large anamorphosé :


[ Avant post-traitement ]  [ Après post-traitement ]

Le post-traitement est segmenté en 3 étapes : le bloom + les lens flares, les réflexions internes à l'objectif et le tone mapping + le grain. Cette dernière étape est la plus simple : un pixel shader relativement simple combine les deux effets.

Les deux autres étapes, qui nécessitent un format HDR 128 bits (R32G32B32A32_FLOAT), sont plus complexes et font appel à 4 reprises à une transformée de Fourrier rapide (FFT), exécutée via une succession de compute shaders. L'image à traiter est tout d'abord réduite dans une résolution qui correspond à la puissance de deux directement supérieure au quart des dimensions originales (1920 -> 480 -> 512). Elle est ensuite transposée dans le domaine fréquentiel à partir duquel le bloom ainsi que les lens flares d'une part, et les réflexions internes d'autre part, vont prendre forme grâce à des filtres dédiés. Dans le premier cas, le filtre doit être calculé au préalable, ce qui représente une des 4 utilisations de la transformée de Fourrier rapide.


[ Filtre ] + [ Image dans le domaine fréquentiel ] ->[ Filtre appliqué ]
->[ Reconstruction – FFT inverse ] = [ Bloom + lens flares ]
[ Lens reflections ]

Quelques chiffres :

Temps de rendu : 10.7 ms (8.5 %) dont 10.3 ms via compute shader (8.2 %)
Vertices avant tessellation : 22
Vertices après tessellation : -
Primitives : 24
Primitives éjectées du rendu : 0
Pixels : 3.44 millions
Eléments exportés par les PS : 3.44 millions
Texels : 104.99 millions dont 72.48 via compute shader
Instructions exécutées : 165.20 millions dont 126.48 millions via compute shader
Quantité de données lues : 819.1 Mo dont 590.0 Mo via compute shader
Quantité de données écrites : 615.1 Mo dont 448.9 Mo via compute shader
Vos réactions

Top articles