Umgebungsverdeckung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Anwendung von AO

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.

Funktionsweise[Bearbeiten]

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[Bearbeiten]

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 \Omega verschickt und auf Kollision mit dem Objekt selbst geprüft. Stößt der Strahl in Richtung \omega 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 \Omega des Punkt \mathbf{x} mit Normalenvektor \mathbf{n} durch

A(\mathbf{x}, \mathbf{n}) = \frac{1}{\pi} \int_{\omega \in \Omega} V(\mathbf{x}, \omega) \left| \omega \cdot \mathbf{n} \right| d \omega

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 \mathbf{x} zentriert und das Objekt um zufällige Raumwinkel \alpha und \beta gedreht. Über die OpenGL-Erweiterung ARB_Occlusion_Query, welche 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 \Omega 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[Bearbeiten]

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[Bearbeiten]

Quellen[Bearbeiten]

  1. a b Sattler et al.: Hardware-accelerated ambient occlusion computation, In: Vision, Modeling, and Visualization 2004, Akademische Verlagsgesellschaft Aka GmbH, Berlin, November 2004.
  2. Brunell: Dynamic Ambient Occlusion and Indirect Lighting (PDF; 1,6 MB), In: GPU Gems 2, Addison-Wesley, 2005, S. 223–233
  3. 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.