Wie wird die Umgebungsokklusion des Bildschirmraums implementiert?

11

Ich verstehe die Erklärung aus Wikipedia nicht.

Für jedes Pixel auf dem Bildschirm tastet der Pixel-Shader die Tiefenwerte um das aktuelle Pixel ab und versucht, den Grad der Okklusion von jedem der abgetasteten Punkte zu berechnen.

Wie können Tiefenwerte der umgebenden Pixel etwas über Okklusion aussagen? Wie ich verstehe, tritt Okklusion auf , wenn ein Objekt A vor einem anderen Objekt B steht, sodass Sie das Objekt B nicht sehen können. Aber warum sollten Sie jetzt die Tiefenpixel der umgebenden Pixel betrachten? Ich meine, Sie können diese Pixel sehen, also gibt es keine Okklusion. Vielleicht habe ich Okklusion falsch verstanden.

Und was ich auch nicht verstanden habe, ist der Begriff Kernel in einigen anderen Tutorials. Was ist ein Kernel und warum würden Sie ihn für ssao verwenden?

Könnte jemand eine detaillierte Erklärung des Algorithmus in Bezug auf meine Fragen geben?

Joey
quelle
Denken Sie so darüber nach: Eine tiefe Falte wird Schatten enthalten.
Alan Wolfe
1
Das Wichtigste, was hier zu verstehen ist, ist, dass wir versuchen, die Okklusion des Umgebungslichts zu berechnen, nicht die Okklusion aus der Sicht.
Trichoplax

Antworten:

5

Die Motivation hinter der Umgebungsokklusion (AO) im Allgemeinen besteht darin, die Art und Weise zu approximieren, in der Spalten und Ecken häufig beschattet werden, da weniger indirektes Licht in sie einfällt. Ein Beispiel aus einem Foto meines Büros: Beachten Sie die Verdunkelung an den Rändern, an denen sich Wände und Decke treffen. Der Raum wird nur durch das Licht beleuchtet, das durch das Fenster hereinkommt und herumspringt.

Foto mit AO-ähnlichem Effekt in der Ecke eines Raumes

Um dieses Phänomen genau zu simulieren, verwenden Offline-Renderer Techniken wie Pfadverfolgung und Photonenabbildung. Für Echtzeitzwecke berechnen wir es entweder offline vor oder approximieren es irgendwie.

Die Umgebungsokklusion des Bildschirmraums (SSAO) basiert auf der Beobachtung, dass Sie Ecken und Spalten erkennen können, indem Sie den Tiefenpuffer (und möglicherweise auch die Normalenvektoren) eines gerenderten Bildes betrachten und so die ungefähre AO als Post-Okklusion berechnen. bestehen. Der Tiefenpuffer ist eine grobe Darstellung der Geometrie in der Szene. Wenn Sie also Tiefenpufferwerte in der Nähe eines Zielpixels abtasten, können Sie sich ein Bild von der Form der umgebenden Geometrie machen und erraten, wie dunkel diese durch AO ist sollte sein.

Diagramm, wie der Tiefenpuffer die Geometrie darstellt, von Bavoil und Sainz (2008)

Dieses Diagramm von Bavoil und Sainz (2008) zeigt, wie Tiefenpufferwerte, die als eine Art Höhenfeld interpretiert werden, eine diskretisierte Version einiger Geometrien darstellen. Bei der Berechnung des SSAO für das mittlere Pixel würden Sie die Tiefenwerte der umgebenden Pixel betrachten und sie in eine Formel einfügen, die einen dunkleren Wert erzeugt, wenn die Geometrie konkaver ist (wie im Diagramm), und einen helleren Wert, wenn die Geometrie flach oder konvex ist.

Die Formel, in die die Tiefenwerte eingehen, wird in Analogie zu Filterkernen, die für Unschärfen, Kantenerkennung und dergleichen verwendet werden, als "Kernel" bezeichnet. SSAO ist jedoch komplizierter als nur eine lineare Faltung der Tiefenwerte. Der Teufel steckt im Detail. Die Verteilung der Proben und die Formel, mit der sie verarbeitet werden, um den Okklusionswert zu erzeugen, waren in den letzten zehn Jahren Gegenstand zahlreicher Untersuchungen, um den Realismus zu verbessern und Artefakte zu reduzieren und gleichzeitig eine gute Leistung zu erzielen.

Nathan Reed
quelle
5

Wie Alan und Trichoplax in den Kommentaren erwähnen, ist der Effekt, den die Umgebungsokklusion simuliert, nicht die Okklusion einer Oberfläche von der Kamera, sondern die Okklusion der Oberfläche von ihrer Umgebung.

Stellen Sie sich das so vor: Angenommen, Sie haben eine gleichmäßige Beleuchtung aus allen Richtungen, sodass das gesamte einfallende Licht an jedem Punkt einen Wert von 1 ergibt. Wenn Sie eine flache Ebene in dieser Umgebung platzieren und eine Seite davon betrachten, Diese Seite erhält 50% dieser Beleuchtung oder 0,5%, da die andere Hälfte vom Flugzeug selbst blockiert wird. Mit anderen Worten, jeder Punkt auf der Oberfläche des Flugzeugs kann nur das Licht „sehen“, das von der Hälfte der Umgebung kommt, sodass es halb so hell beleuchtet ist. Wenn Sie diese Ebene in Richtung Ihres Blickpunkts falten (eine "Tal" -Falte), verringern Sie die einfallende Beleuchtung auf dieser Seite der Ebene weiter auf einen Wert unter 0,5, da wiederum jeder Punkt auf der Ebene ein wenig "sieht" weniger Licht kommt aus der Umgebung.

Die Umgebungsokklusion im Bildschirmraum funktioniert mehr oder weniger, indem nach diesen „Falten“ gesucht wird - Bereiche, in denen sich die Tiefe stark ändert, wie durch Vergleichen der Tiefen benachbarter Pixel definiert - und abgedunkelt werden, um die verringerte Beleuchtung aus der Umgebung der Punkte zu simulieren.

Noah Witherspoon
quelle