Article Index

Principe du Screen Space Ambient Occlusion

Le principe de cette algorithme est de calculer un coefficient d’ombrage en fonction de la différence de profondeur avec les pixel adjacent, il existe donc plusieurs méthode afin d’améliorer un des aspects de la méthodes exposée ici, tel-que des erreurs d’approximations, une meilleurs gestions du bruit, de meilleurs performances, … etc. Cette algorithme est effectuer, en post-processing, avec un G-buffer composer de l’albedo (la scene) et du z-buffer (le champ de profondeur)

http://sleek-think.ovh/images/cours/ssao.png

Le premier problème rencontrer est situer sur le depth-buffer, en effet, à cause de la matrice de projection la profondeur n’est pas linéaire, et de plus de la valeurs contenue dans le depth sont normaliser entre 0 et 1 sur le gpu. Il faut donc recalculer la valeur du depth avec la formule suivante :

  • (near*z)/(far-z*(far-near))
  • avec near la valeur du plan near de la camera
  • idem pour far
  • et z la valeur actuel du depth-buffer

Le reste de l’algorithme est une approximation, on va venir calculer la valeurs des depth-buffer à l’intérieur d’un cercle autour du pixel analyser (qui peuvent être interpoler), et faire la moyenne de celle-ci. C’est donc une convolution avec un kernel de grande taille appliquer non pas sur les pixel adjacent brute mais sur les valeurs des sous-pixel interpoler et ont retourne une moyenne pondéré. La plus part des optimisation consiste à faire une approximation de cette convolution en ne calculant pas toutes les valeurs et en appliquant un floutage après.