Tutorial 14 – Screen Space Ambient Occlusion (SSAO)

Screen Space Ambient Occlusion (Umgebungsverdeckung) gehört in modernen Computerspielen mittlerweile zu den Standard-Post Processing-Techniken. Als ein rein empirisches Modell basiert es auf der alltäglichen Beobachtung, dass Flächen bzw. Szenenpixel, die in geringem Abstand von anderen Flächen umgeben sind, dunkler erscheinen als freiliegende Flächen. Der Grund ist einfach – umliegende Flächen bzw. Szenenpixel blockieren teilweise die Einstrahlung des ambienten Lichts.



Im Gegensatz dazu trifft bei freiliegenden Flächen das ambiente Licht ungehindert aus allen Richtungen auf. Um SSAO in einer Anwendung nutzen zu können, müssen Sie lediglich die Calculate_ScreenSpaceAmbientOcclusion()-Methode des Post-Processing-Frameworks aufrufen:

PostProcessingEffects->Calculate_ScreenSpaceAmbientOcclusion(
                       &g_ViewProjectionMatrix,
                        g_OcclusionSampleStepDistance,
                        g_OcclusionInvDistanceFactor,
                        g_OcclusionIntensity,
                        g_OcclusionAmbientIntensity,
                        g_OcclusionBias,
                        g_InvSurfaceHeightOcclusionFactor);

Hinweis:
Die konkreten Werte der verwendeten Parameter sind in der Datei DemoConfig.txt definiert.

In Abhängigkeit von den in den Modelldateien definierten Ambient-Occlusion-Scale-Faktoren kommen zwei unterschiedliche Screen-Space-Ambient-Occlusion-Techniken zum Einsatz:

Surface Height Occlusion: AmbientOcclusionScale < 0.0
Distance Based Occlusion: AmbientOcclusionScale > 0.0


Distance Based Occlusion: Für jedes Szenenpixel wird überprüft, ob benachbarte Szenenpixel (Occluder) den ambienten Lichteinfall blockieren. Hierbei behindern Occluder mit geringem Abstand zum Szenenpixel den Lichteinfall stärker als Occluder mit größerem Abstand. Je mehr Richtungen dabei berücksichtigt werden (Abhängig von der gewählten Qualität; low, medium, high; siehe DemoConfig.txt), umso besser ist das sichtbare Resultat (kommt bei der Darstellung des Raumschiffs zum Einsatz).

Surface Height Occlusion: Anhand der in der Normal Map gespeicherten Höhenwerte wird in Abhängigkeit von der momentanen Blickrichtung die Umgebungsverdeckung sowie ein dreidimensionaler Oberflächen-Effekt berechnet (kommt bei der Darstellung der Steine zum Einsatz).



Hinweise zum Erstellen eines neuen Projekts:

  • Kopieren Sie den Ordner GraphicsAndPhysicsFrameworkImports ins Projektverzeichnis
  • Kopieren sie alle dll-Dateien sowie die Konfigurationsdatei ResolutionAndRendering.txt aus besagtem Ordner ins gleiche Verzeichnis, in dem sich auch die exe-Datei befindet (in unseren Programmbeispielen ist dies das Bin-Verzeichnis)
  • Binden Sie die folgenden Dateien in Ihr Projekt ein: GraphicsAndPhysics_Framework_Imports.h, GraphicsAndPhysics_Framework_Imports.lib, glew32.lib, glew32s.lib, glut32.lib. Die Glew- und Glut-Bibliotheken ermöglichen die Nutzung der aktuellen OpenGL-Spezifikationen unabhängig vom Framework.