- Ambient Occlusion
-
Umgebungsverdeckung (englisch Ambient Occlusion, AO) ist eine Shading-Methode, die in der 3D-Computergrafik verwendet wird, um mit relativ kurzer Renderzeit eine realistische Verschattung von Szenen zu erreichen. Das Ergebnis ist zwar nicht physikalisch korrekt, reicht jedoch in seinem Realismus oft aus, um auf rechenintensive globale Beleuchtung verzichten zu können.
Umgebungsverdeckung wird zusätzlich zum herkömmlichen Shading mit Phong Shading oder ähnlichen Algorithmen berechnet. Das Ergebnis der AO Berechnung wird als Graustufenbild einfach mit dem herkömmlichen Renderergebnis multipliziert. Dies kann direkt beim Rendern, oder auch erst in der Nachbearbeitung erfolgen. Ein Bild, das mittels Umgebungsverdeckung berechnet wurde, ähnelt der Beleuchtungssituation eines bewölkten Tages – äußerst diffuse Schattierungen sind das Hauptmerkmal.
Inhaltsverzeichnis
Funktionsweise
Umgebungsverdeckung basiert auf der Beobachtung, dass in Ritzen und Ecken normalerweise eine geringere Beleuchtungsstärke vorherrscht, was hauptsächlich auf die zahlreichen, diffusen Reflexionen, die an diesen Engstellen auftreten, zurückzuführen ist. Umgebungsverdeckung wird von den meisten Renderengines in Form eines Shaders oder als globaler Effekt unterstützt.
Das Umgebungsverdeckungsverfahren beruht auf der Grundannahme, dass ein Objekt, eine Menge von Objekten oder eine ganze Szene von einer Einheitskugel aus Licht umgeben wird. Ankommendes Licht kann also nur mittels Selbstverdeckung durch diese Geometrie blockiert oder prozentual abgeschwächt werden. Dabei werden zwei Parameter pro Messpunkt errechnet: Der prozentuelle Grad der Verdeckung und der sogenannte Bent Normal, der in die Richtung der prozentual niedrigsten Verdeckung zeigt. Der Bent Normal kann später für erweiterte Beleuchtungssimulationen genutzt werden, z.B. im Lichttransfer über Irradiance Environment Maps.
Berechnung der Parameter
Die zur Errechnung der beiden oben genannten Parameter nötige Vorgehensweise lässt sich wiederum in zwei prinzipielle Klassen unterteilen: Die Inside-Out Verfahren stellen den klassischen Ansatz zur Berechnung dar. Hierbei werden vom Messpunkt aus Strahlen über dessen Hemisphäre Ω verschickt und auf Kollision mit dem Objekt selbst geprüft. Stößt der Strahl in Richtung ω mit einem Teil der Geometrie zusammen, so kann kein Licht aus dieser Richtung am Punkt ankommen. Das Gegenteil ist der Fall, sollte der Strahl seinen Weg ungehindert fortsetzen können. Stellt man dieses Verhältnis durch eine Visibility-Funktion V dar, die im Fall einer Verdeckung den Wert 0, ansonsten 1 annimmt, so errechnet sich der Grad der Verdeckung durch die Integration der Visibility-Funktion über der Hemisphäre Ω des Punkt mit Normalenvektor durch
Diese Funktion lässt sich durch Monte-Carlo-Integration einfach über einen Raytracer implementieren. Mittelt man alle Strahlen, die nicht von Geometrie verdeckt wurden, erhält man gleichzeitig den Bent-Normal. Es sei darauf hingewiesen, dass der Bent-Normal nicht zwangsweise korrekt ist: Spezielle Situationen können dazu führen, dass die Verdeckung eines Punkts den durchlässigen Teil der Hemisphäre zweiteilt. In diesem Fall gibt es keine eindeutige Richtung der niedrigsten Verdeckung.
Die zweite Klasse zur Ermittlung der Umgebungsverdeckungsparameter bilden die Outside-In-Verfahren. Hierbei wird das Objekt von außen betrachtet[1]. Es wird der Punkt zentriert und das Objekt um zufällige Raumwinkel α und β gedreht. Über die OpenGL-Erweiterung ARB_Occlusion_Query, die die Anzahl von Fragmenten im fertigen Bild eines Objekts zählt, kann die Sichtbarkeit des Punkts ermittelt werden. Gehört der zufällig gewählte Raumwinkel zur Hemisphäre Ω des Punkts, so kann die Sichtbarkeitsfunktion über die Erweiterung implementiert und genutzt werden. Auch hier lässt sich durch Monte-Carlo-Integration über genügend viele Samples eine gute Annäherung errechnen.
Statische und dynamische Umgebungsverdeckung
Da das Ergebnis des Umgebungsverdeckungsverfahrens unabhängig von der Position der Lichtquellen ist, kann es für statische Geometrie sowohl in gerenderten Bildern als auch in Echtzeitanwendungen wie z.B. Computerspielen verwendet werden.
Sollte es sich allerdings um dynamische Geometrie handeln, die zur Laufzeit unvorhersehbare Positionen und Formen annehmen kann (im Gegensatz zu Schlüsselbildanimationen), so muss die Berechnung erheblich beschleunigt werden, um Echtzeitanforderungen einer Anwendung gerecht zu werden. Diverse Ausarbeitungen zu diesem Thema[1][2] existieren für die AO-Simulation einzelner Objekte. Sollen sich allerdings mehrere Objekte auch untereinander schattieren können, so müssen bei der Berechnung alle Objekte gleichzeitig in Betracht gezogen werden. Da dieser Aufwand für aktuelle Grafikbeschleuniger zu hoch ist, wird eine Approximation vorgeschlagen[3], die AO-Parameter für die Umgebung eines Objekts vorberechnet, und in Cubemaps speichert. Diese werden zur Laufzeit bei einer Kollision zwischen Objekten ausgelesen und auf die AO-Parameter der kollidierenden Objekte übertragen.
Weblinks
- 25-Seitige PDF-Datei über Umgebungsverdeckung (en)
- Los Angeles mental ray User Group – Verschiedene Dokumente zum Thema und Forum (en)
- OpenGL Extension Spezifikation - ARB_Occlusion_Query (en)
Quellen
- ↑ a b Sattler et al.: Hardware-accelerated ambient occlusion computation, In: Vision, Modeling, and Visualization 2004, Akademische Verlagsgesellschaft Aka GmbH, Berlin, November 2004.
- ↑ Brunell: Dynamic Ambient Occlusion and Indirect Lighting, In: GPU Gems 2, Addison Wesley, 2005, S. 223–233
- ↑ Laine et al.: Ambient occlusion fields, In: SI3D ’05: Proceedings of the 2005 symposium on Interactive 3D graphics and games. New York, NY, USA : ACM Press, 2005.
Wikimedia Foundation.