# Screen Space Ambient Occlusion

Screen Space Ambient Occlusion (SSAO) ist eine Rendering-Technik bei Computer-Grafik für die effiziente Annäherung des häufig verwendeten Effekts „Ambient Occlusion“ in Echtzeit. Es wurde von Vladimir Kajalin während seiner Arbeit bei Crytek entwickelt und wurde zum ersten Mal im Jahr 2007 bei Crysis, einem Videospiel von Crytek für Microsoft Windows eingesetzt.

## Implementierung

Der Algorithmus wird als ein Pixel-Shader implementiert, durch Analyse der Depth Buffer einer Szenerie, die in einer Textur gespeichert werden. Für jedes Pixel auf dem Bildschirm tastet ein Pixelshader die Tiefenwerte um ein Pixel herum ab und versucht für die abgetasteten Punkte den jeweiligen Betrag der Okklusion zu errechnen. In seiner einfachsten Implementierung errechnet sich der Okklusions- (Verdeckungs-) Faktor lediglich anhand des Unterschieds der Tiefenwerte zwischen dem abgetasteten Punkt und dem aktuellen Punkt.
Ohne zusätzliche intelligente Lösungen müsste eine solche Brute-Force-Methode für eine akzeptable Bildqualität etwa 200 mal pro errechnetem Pixel Texturdaten auslesen. Spiele wie Assassin’s Creed IV: Black Flag nutzen diese Technik, wobei alternative Mechanismen wie "technology HBAO+" eine geringere Laufzeit haben.
Um die Leistung für den Spieler zu verbessern, wird oft darauf zurückgegriffen, AO-Shader bei halber Auflösung zu rendern, was die Rechenlaufzeit in der Theorie um 75 % reduziert. Dabei vermindert sich die Qualität jedoch eher unmerklich, da AO oft als subtiler Effekt genutzt wird.
Um gute Ergebnisse mit weit weniger Zugriffen auf die Texturdaten zu bekommen, erfolgt die Abtastung mittels eines zufällig rotierenden Kernels. Die Kernel-Ausrichtung wird alle n Bildschirmpixel wiederholt, um das Rauschen im endgültigen Bild auf ein Hochfrequenz-Rauschen zu limitieren. Anschließend wird dieses Hochfrequenzrauschen zum größten Teil unter Berücksichtigung von möglichen Unterbrechungen oder Störungen in den Tiefen-Werten (mit Methoden, um beispielsweise bei den Nachbarpixeln die normalen mit den entsprechenden Tiefenwerten zu vergleichen) weichgezeichnet und somit reduziert oder komplett entfernt. Solche Methoden verringern die Anzahl der Tiefenwert-Abtastungen der Pixel auf etwa 16 per Pixel oder weniger, bei immer noch sehr guter Bildqualität. Erst durch diese Methoden kann softwareseitiges SSAO in Echtzeitanwendungen (z. B. Computerspielen) verwendet werden.
Im Vergleich zu anderen Ambient-Occlusion-Methoden hat SSAO die folgenden Vorteile:
* Es funktioniert unabhängig von der Komplexität der Szene.
* Die Daten müssen nicht vorbereitet werden, es gibt keine zusätzlichen Ladezeiten und keine Speicherzuordnungen im Systemspeicher.
* Funktioniert mit dynamischen Szenerien.
* Funktioniert für jedes Pixel auf dem Bildschirm auf die gleiche konsistente Weise.
* Keine CPU-Auslastung – der Vorgang kann komplett von der GPU ausgeführt werden.
* Kann vergleichsweise einfach in jede moderne Grafik-Pipeline integriert werden.
Das Verfahren hat jedoch auch einige Nachteile:
* Die Berechnung ist auf einen kleinen Bereich reduziert, und das Ergebnis ist in vielen Fällen von der jeweiligen Ansicht abhängig, da das Ergebnis von SSAO allein von den jeweils angrenzenden Texel-Tiefen abhängig ist, völlig ohne jegliche Berücksichtigung der Geometrie und anderen Faktoren der Objekte.
* Es ist schwierig, beim Blurring das Hochfrequenzrauschen zu entfernen, ohne dabei Tiefen-Diskontinuitäten wie Objektkanten zu beeinträchtigen (der Effekt sollte nicht „ausbluten“ auf andere Objekte). Ein Beispiel für einen unerwünschten Effekt kann man in Metro 2033 (2010) sehen, wenn man mit dem Messer nahe an einer Wand steht. In diesem Fall bildet sich auf der Wand eine recht große, dunkle Zone um das Messer herum.
* Je nachdem, welche Techniken für das Rendern verwendet werden und wie intensiv der AO-Effekt angewandt wird, kann sich dieser deutlich von den „regulären“ Schatten abheben. Gerade ein zu großer Radius oder ein zu hoher Intensitätswert können schnell auffallen.