Comment l'occlusion ambiante de l'espace écran est-elle implémentée?

11

Je ne comprends pas l' explication de Wikipédia.

Pour chaque pixel de l'écran, le pixel shader échantillonne les valeurs de profondeur autour du pixel actuel et essaie de calculer la quantité d'occlusion à partir de chacun des points échantillonnés.

Comment les valeurs de profondeur des pixels environnants peuvent-elles vous renseigner sur l'occlusion? L'occlusion , si je comprends bien, se produit lorsqu'un objet A se trouve devant un autre objet B, vous ne pouvez donc pas voir l'objet B. Mais pourquoi voudriez-vous maintenant regarder les pixels de profondeur des pixels environnants ? Je veux dire que vous pouvez voir ces pixels, donc il n'y a pas d'occlusion. J'ai peut-être mal compris l'occlusion.

Et ce que je n'ai pas compris non plus, c'est le terme noyau dans certains autres tutoriels. Qu'est-ce qu'un noyau et pourquoi l'utiliseriez-vous pour ssao?

Quelqu'un pourrait-il faire une explication détaillée de l'algorithme, en ce qui concerne mes questions?

Joey
la source
pensez-y de cette façon: un pli profond aura des ombres dedans.
Alan Wolfe
1
L'essentiel à comprendre ici est que nous essayons de calculer l'occlusion de la lumière ambiante, pas l'occlusion vue.
trichoplax

Réponses:

5

La motivation derrière l'occlusion ambiante (AO) en général est d'approcher la façon dont les crevasses et les coins sont souvent ombragés, car moins de lumière indirecte rebondit en eux. Un exemple d'une photo de mon bureau - notez l'assombrissement le long des bords où les murs et le plafond se rencontrent. La pièce n'est éclairée que par la lumière entrant par la fenêtre et rebondissant.

photo montrant un effet de type AO dans le coin d'une pièce

Pour simuler avec précision ce phénomène, les moteurs de rendu hors ligne utilisent des techniques telles que le traçage de chemin et le mappage de photons. À des fins en temps réel, nous le précalculons hors ligne ou nous le rapprochons d'une manière ou d'une autre.

L'occlusion ambiante de l'espace écran (SSAO) est basée sur l'observation que vous pouvez détecter les coins et les crevasses en regardant le tampon de profondeur (et peut-être aussi les vecteurs normaux) d'une image rendue, et ainsi vous pouvez calculer l'AO approximatif comme un post- passer. Le tampon de profondeur est une représentation grossière de la géométrie dans la scène, donc en échantillonnant des valeurs de tampon de profondeur au voisinage d'un pixel cible, vous pouvez avoir une idée de la forme de la géométrie environnante et deviner à quel point l'obscurité est obscurcie par AO. devrait être.

diagramme de la représentation de la géométrie par le tampon de profondeur, tiré de Bavoil et Sainz (2008)

Ce diagramme, tiré de Bavoil et Sainz (2008) , montre comment les valeurs de tampon de profondeur, interprétées comme une sorte de champ de hauteur, représentent une version discrétisée d'une géométrie. En calculant SSAO pour le pixel central, vous regarderiez les valeurs de profondeur des pixels environnants et les brancheriez dans une formule, conçue pour produire une valeur plus sombre lorsque la géométrie est plus concave (comme celle du diagramme), et un plus clair valeur lorsque la géométrie est plate ou convexe.

La formule dans laquelle les valeurs de profondeur entrent est appelée le "noyau" par analogie avec les noyaux de filtre utilisés pour les flous, la détection des contours, etc. Cependant, SSAO est plus compliqué qu'une simple convolution linéaire des valeurs de profondeur. Le diable est dans les détails. La distribution des échantillons, et la formule qui les traite pour générer la valeur d'occlusion, a fait l'objet de nombreuses recherches au cours de la dernière décennie, essayant d'améliorer le réalisme et de réduire les artefacts tout en maintenant de bonnes performances.

Nathan Reed
la source
5

Comme Alan et trichoplax le mentionnent dans les commentaires, l'effet que l'occlusion ambiante simule n'est pas l'occlusion d'une surface de la caméra mais l'occlusion de la surface de son environnement.

Pensez-y de cette façon: disons que vous avez un éclairage uniforme venant de toutes les directions, de sorte que la lumière entrante totale en tout point se résume à une valeur de 1. Si vous placez un plan plat dans cet environnement et regardez un côté de celui-ci, ce côté va recevoir 50% de cet éclairage, ou 0,5, parce que l'autre moitié est bloquée par l'avion lui-même. En d'autres termes, n'importe quel point sur la surface de l'avion ne peut que «voir» la lumière provenant de la moitié de l'environnement, elle est donc moitié moins brillamment éclairée. Si vous pliez ce plan vers votre point de vue (un pli de «vallée»), alors vous réduisez davantage l'éclairage entrant de ce côté de l'avion, à une valeur inférieure à 0,5, car, encore une fois, chaque point du plan «voit» un peu moins de lumière provenant des environs.

L'occlusion ambiante de l'espace écran fonctionne plus ou moins en recherchant ces «plis» - des zones où la profondeur change brusquement, comme défini en comparant les profondeurs des pixels voisins - et en les assombrissant pour simuler la diminution de l'éclairage de l'environnement des points.

Noah Witherspoon
la source