8TRD147: Animation et images par ordinateur SSAO Y. Chiricota Département d informatique et de mathématique Université du Québec à Chicoutimi / Certaines des illustrations de ce document proviennent du livre rouge d OpenGL, des sites developer.apple.com ; opengl.org ; khronos.org ; nvidia.org 8TRD147 UQAC Y. Chiricota(2014) 1
Introduction Le modèle d illumination de Phong est une approximation relativement grossière de la réalité. Dans ce modèle, on utilise le terme ambient (k amb I amb ) dans le calcul de l illumination en un point pour simuler l ensemble de tous les réflexions qui se produisent dans la scène. Il est clair que cette technique donne des résultats qui sont loin de la réalité. Pour obtenir une image plus réaliste, il faudrait tenir compte des réflexions occasionnées par les multiples objets peuplant une scène. Ces réflexions, dont la couleur dépends de l objet frappé par la lumière, affectent normalement tous les objets d une scène. La méthode du lancé de rayon est une approche plus réaliste qui tient compte de cette situation. Cependant, il est actuellement impensable d implémenter cette technique dans le contexte de jeux vidéo car ceux-ci exigent un rendu en temps réel. 8TRD147 UQAC Y. Chiricota(2014) 2
Introduction Cette image image est tirée de Starcraft II. 8TRD147 UQAC Y. Chiricota(2014) 3
Introduction La méthode d occlusion ambiante, plutôt que prendre en compte les rayons qui arrivent au point pour lequel on désire calculer l illumination, procède en considérant la lumière qui n arrive pas à ce point. Bref, on calcule le niveau d occlusion des points en tenant compte de la topologie (forme) des objets géométriques dans le voisinage du point. La figure de gauche représente un objet" pour lequel on considère l obstruction en trois points. Pour cet objet, le point P est moins obstrué" que Q et Q l est moins que R. 8TRD147 UQAC Y. Chiricota(2014) 4
Définition du degré d obstruction d un point Étant donné une scène composée de surfaces (de maillages), le degré d obstruction local d un point P appartenant à une des surfaces σ est défini par le rapport entre, d une part, le nombre de rayon ayant une intersection avec la surface σ et d autre part le nombre total de rayons émanant d une hémisphère centrée en P et dont la base est parallèle au plan tangent à la surface σ au point P. Dans la figure de gauche, les rayons rouges correspondent à de l obstruction, contrairement aux rayons verts. L hémisphère est représenté en bleu. 8TRD147 UQAC Y. Chiricota(2014) 5
Définitions Pour qu il soit possible d implémenter cette idée sur ordinateur, il faut la formaliser quelque peu. Voici donc quelques définitions. On définit la fonction de visibilité d un point dans la direction (vecteur) ω comme suit : { 1 si P est obstrué dans la direction ω V (P, ω) = 0 sinon. La fonction suivante sert à déterminer l occlusion ambiante totale d un point P. AO(P, n) = 1 V (P, ω) max(n ω, 0)dω, π Ω où Ω représente une hémisphère centrée en P dont la base est dans le plan défini par le vecteur n qui est normal à la surface au point P. Intuitivement, on fait la somme dans toutes les directions ω de la fonction de visibilité pondérée par l angle entre le vecteur normal à la surface au point P et la direction ω. 8TRD147 UQAC Y. Chiricota(2014) 6
SSAO Calculer cette intégrale en chaque point d une surface à éclairer demande une quantité d opérations imposante. En effet, il est possible de calculer numériquement cette intégrale, mais à coût élevé puisqu il faut effectuer ce calcul pour chaque point de la scène traité par le VS. Il est cependant possible de simplifier les choses par le calcul d une approximation de la géométrie de la scène basée sur la projection dans l espace écran de la scène. C est la méthode de Screen Space Ambiant Occlusion. Cette méthode est utilisée dans plusieurs jeux tel que Starcraft II et Crysis. Il existe plusieurs variantes de cette méthode, mais la plupart de celles-ci reposent sur le calcul d un tampon de profondeurs/vecteurs normaux (depth/normal map). Ce tampon (qu on nommera le tampon ND) contient la distance entre chaque point de la scène et le vecteur normal à la surface à laquelle appartient le point. 8TRD147 UQAC Y. Chiricota(2014) 7
Tampon ND La figure suivante illustre comment le tampon ND est calculé. La scène est calculée (rendue) comme d habitude à la différence près que plutôt que calculer une image, pour chaque pixel écran, on mémorise dans le tampon ND la distance entre la caméra et le point P de la scène qui est visible. On stocke aussi le vecteur normal à la surface au point P. Ainsi le tampon ND a la même taille que l image écran (le frame buffer). Dans la figure, le trait vert correspond aux valeurs de distance qui seront placées dans le tampon ND. Cette information procure une approximation de la géométrie de la scène vu à partir de la caméra. 8TRD147 UQAC Y. Chiricota(2014) 8
Le tampon ND est calculé à partir de shaders. De plus, on utilise un FBO pour stocker le résultat du calcul. Nous allons maintenant voir un algorithme de SSAO. Notons qu il existe plusieurs variantes de tels algorithmes. 8TRD147 UQAC Y. Chiricota(2014) 9
Algorithme de SSAO 1. Calculer le tampon ND à l aide de shaders. En pratique, le résultat est stocké dans un FBO dont le format est le même que celui de l écran. 2. L objectif de cet étape est le calcul d un tampon AO qui contiendra le niveau d occlusion des points. Cette partie du calcul est effectuée par un deuxième programme (VS+FS) qui reçoit en entrée le tampon ND calculé en (1). On effectue le rendu d un quad qui recouvre l écran, pour chaque pixel écran, on calcule une approximation de l occusion en effectuant un calcul approximatif de l intégrale de la fonction de visibilité sur une hémisphère. Pour ce faire, le tampon ND nous fournit une approximation de la géométrie locale au point 3D qui correspond au pixel. 8TRD147 UQAC Y. Chiricota(2014) 10
Algorithme de SSAO (suite) 2 (suite). La figure suivant illustre comment est approximée l intégrale. On procède par échantillonnage de points aléatoires dans une hémisphère centrée en P et dont la base est perpendiculaire au vecteur normal à la surface. L information du tampon ND nous permet d estimer si un point q est en situation d obstruction ou non. En effet, si la distance entre q et la caméra est supérieure à la valeur stockée dans le tampon ND, q est en situation d occusion. Dans le cas de cette figure, le niveau d occusion du point q serait de 3 7. Plus on utilise de points lors de l échantillonnage, meilleur sera le résultat. Cependant, le coût en terme de temps de calcul sera proportionnel au nombre de points. 8TRD147 UQAC Y. Chiricota(2014) 11
Algorithme de SSAO (suite) 3. La troisième étape consiste à effectuer le rendu en utilisant le tampon AO pour déterminer le terme ambiant dans l illumination des points de la scène. Le tampon AO donne la quantité de lumière ambiante pour chaque pixel de l image finale. 8TRD147 UQAC Y. Chiricota(2014) 12
Exemple de shader pour calcul du tampon ND Voici un exemple de shaders pour calculer le tampon ND. / / VS / / Calcul de l a t e x t u r e ND. varying f l o a t depth ; varying vec3 normal ; void main ( void ) { normal = gl_normal. xyz ; depth = ( gl_modelviewmatrix gl_ Vertex ). z ; g l _ P o s i t i o n = f t r a n s f o r m ( ) ; } 8TRD147 UQAC Y. Chiricota(2014) 13
Exemple de shader pour calcul du tampon ND / / FS / / Calcul de l a t e x t u r e ND. uniform f l o a t znear ; uniform f l o a t zfar ; varying f l o a t depth ; varying vec3 normal ; void main ( void ) { / / Normalisation de l a val eur entre 0 et 1. f l o a t n_depth = ( depth znear ) / ( zfar znear ) ; } gl_ FragColor = vec4 ( normal, n_depth ) ; 8TRD147 UQAC Y. Chiricota(2014) 14
Avantages de cette méthode. Le calcul ne dépend que partiellement de la complexité géométrique de la scène. L algorithme produit de bons résultats. Il est bien adapté à l implémentation à l aide de shader, d où un gain de performance. 8TRD147 UQAC Y. Chiricota(2014) 15
Cas problèmes L algorithme de SSAO reste toutefois une approche approximative de la réalité. En particulier, certains configurations peuvent causer problème comme l illustre la figure suivante. Le point P est plus obstrué que la méthode calculera. 8TRD147 UQAC Y. Chiricota(2014) 16
Effet de l échantillonnage L échantillonnage produit un effet de granularité sur le tampon ND comme l illustre la figure suivante. L mage précédente (ainsi que celles qui suivent) est tirée de : Dominic Filion et al., "Starcraft II Effects & Techniques", Blizzard Entertainment, SIGGRAH 2008. 8TRD147 UQAC Y. Chiricota(2014) 17
Effet de l échantillonnage Voici un détail de l image précédente. 8TRD147 UQAC Y. Chiricota(2014) 18
Effet de l échantillonnage Cet effet de granularité indésirable peut être diminué en appliquant un filtre à l image. Voici ce que donne l application d un filtre Gaussien dont le rayon est de 2 pixels. 8TRD147 UQAC Y. Chiricota(2014) 19
L image finale. 8TRD147 UQAC Y. Chiricota(2014) 20