Photon Mapping
Transcription
Photon Mapping
Photon Mapping Leonhard Rabel How to make a PIXAR movie Zusammenfassung Das Ziel von Photon Mapping ist, eine effiziente Berechnung der globalen Beleuchtung auch bei komplexen Szenen mit beliebiger Geometrie zu ermöglichen. Dazu werden vor dem eigentlichen Rendervorgang von allen Lichtquellen aus sogenannte Photonen verschossen, welche an Oberflächen gebrochen, gestreut, gespiegelt oder absorbiert werden können. Trifft ein Photon dabei auf diffuse Oberflächen, so werden diese Treffer in einer Photon Map gespeichert. Mithilfe dieser Photon Map kann ein Raytracingbasiertes Verfahren anschließend die indirekte und somit auch die globale Beleuchtung berechnen. 1 Motivation Ein zentraler Bestandteil der fotorealistischen Bildsynthese ist die Berechnung der globalen Beleuchtung. Bei Raytracing basierten Verfahren lässt sich beispielsweise mit Pathtracing zusätzlich zur direkten auch die diffuse indirekte Beleuchtung und Kaustiken errechnen. Pathtracing ist dabei aber extrem Zeitaufwändig und bei speziellen Situationen wie Kaustiken wird trotzdem keine ausreichende Bildqualität erreicht. Aus diesem Grund existieren bereits zahlreiche Erweiterungen für Pathtracing bzw. Raytracing basierte Verfahren im Allgemeinen. Beispiele hierfür sind Illumination Maps oder Radiosity, welche aber beide mehrere Nachteile aufweisen12 . Insbesondere im Hinblick auf die verwendete Geometrie. Das hier vorgestellte Photon Mapping ist ebenfalls eine Erweiterung für Raytracer, leidet jedoch unter weniger Einschränkungen als die oben genannten Verfahren. So stellt Photon Mapping eine effiziente und genaue Möglichkeit dar, um die globale Beleuchtung zu berechnen. 2 Grundbegriffe 2.1 Kaustik Kaustiken sind ein Begriff aus der geometrischen Optik. Sie beschreiben lokal aufgehellte Bereiche, welche durch Bündelung von Licht an gewölbten Flächen auftreten. Diese Bündelungen entstehen fast ausschließlich an spiegelnden und transparenten Oberflächen, also wenn Licht gespiegelt oder gebrochen wird3 . 1 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 6 Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 52 3 Vgl. http://de.wikipedia.org/wiki/Kaustik (Optik), aufgerufen am 15.07.2011 2 Vgl. 1 2.2 Renderequation Die Rendergleichung ist die mathematische Lösung der Beleuchtung an einem Punkt x, gesehen aus Richtung ω ~: Lo (x, ω ~ ) = Le (x, ω ~ ) + Lr (x, ω ~) Sie beschreibt also alles am Punkt x emittierte und reflektierte Licht. Das reflektierte Licht wird beschrieben durch: Z Lr (x, ω ~ ) = fr (x, ω ~ 0, ω ~ )Li (x, ω ~ 0 )(~ ω 0 · ~n)d~ ω0 Ω also das Integral über die Hemisphäre Ω am Punkt x. Dieses Integral berechnet alles einfallende Licht aus allen Richtungen über x, gewichtet über die Materialeigenschaft fr (x, ω ~ p, ω ~ ) am Punkt x und den Eintrittswinkel ω ~ 04 . 2.3 Globale Beleuchtung Die globale Beleuchtung an einem Punkt x setzt sich zusammen aus5 : • Direkter Beleuchtung: alles Licht, welches ohne Umwege auf den Punkt x fällt. • Diffuser indirekter Beleuchtung: alles Licht, das an diffusen Oberflächen gestreut wird, bevor es auf den Punkt x fällt. • Kaustiken: alles Licht, welches gespiegelt oder gebrochen wird, bevor es auf Punkt x fällt. 3 Überblick Photon Mapping wurde von Henrik Wann Jensen entwickelt6 und hat das Ziel, die Berechnung der globalen Beleuchtung zu beschleunigen7 . Photon Mapping ist ein Two Pass Algorithm. Das Rendern des Bildes wird also in zwei Schritte eingeteilt: im ersten Schritt wird die Beleuchtung der Szene vorberechnet und im anschließenden zweiten Schritt werden diese vorberechneten Daten verwendet, um die Berechnung der globalen Beleuchtung zu beschleunigen. Dazu wird ähnlich zu Illumination Maps von den Lichtquellen aus Licht durch die Szene verfolgt und bei Interaktion mit Objekten ggf. gespeichert. Der entscheidende Unterschied von Photon Mapping zu bestehenden Lösungen ist, sogenannte Photonen zu verschießen. Diese transportieren einen Bruchteil der Leistung einer Lichtquelle und geben diese Leistung bei der Interaktion mit der Szene ab. Die Photonen werden dabei wie Strahlen behandelt und können daher nur Effekte der geometrischen Optik simulieren. Gibt ein Photon Leistung ab, d.h. wird Licht absorbiert, so werden diese Treffer unabhängig von der Geometrie frei im Raum gespeichert, wodurch folgende Vorteile gegenüber anderen Verfahren erreicht werden8 : 4 Vgl. Henrik Wann Henrik Wann 6 Vgl. Peter Shirley, 7 Vgl. Henrik Wann 8 Vgl. Henrik Wann 5 Vgl. Jensen, Realistic Image Synthesis Using Jensen, Realistic Image Synthesis Using R. Keith Morley, Realistic Ray Tracing, Jensen, Realistic Image Synthesis Using Jensen, Realistic Image Synthesis Using 2 Photon Mapping, Photon Mapping, S. 212 - 213 Photon Mapping, Photon Mapping, S. 27-28 S. 96 S. 7 S. 52-54 Abbildung 1: Schematische Darstellung verschiedener Lichttypen: Sphere Light, Point Light und Area Light (v. l.) • Unabhängig von der Geometrie: es können beliebige Formen und auch beliebig komplexe Szenen verwendet werden, da die Daten nicht aufwändig in Texturen gespeichert werden. • Unabhängig vom Betrachter: da anstatt eines Helligkeitswertes Treffer mit Richtung und Intensität gespeichert werden, ist die errechnete Beleuchtung unabhängig vom Betrachter. Ändern sich weder die Szene, noch die Beleuchtung, so können die berechneten Daten aus beliebigen Blickwinkeln genutzt werden. • Alle Arten von Oberflächen können simuliert werden. Also spiegelnde, glänzende, diffuse und beliebige Mischformen. 4 Photon Map 4.1 Photon Tracing Photon Tracing beschreibt den Teil des Photon Mappings, in dem die sogenannte Photon Map aufgebaut wird. Dazu werden von allen Lichtquellen aus zufällig Photonen in die Szene geschossen und deren Treffer in der Photon Map gespeichert9 . Die Anzahl n der verschossenen Photonen hängt dabei von der Helligkeit der Lichtquelle, die Richtung von der Art der Lichtquelle ab(vgl. Abbildung 1). Bei steigender Anzahl von Lichtquellen müssen nicht generell mehr Photonen verschossen werden, da jede Lichtquelle nur noch einen kleineren Teil zur gesamten Beleuchtung beiträgt10 . Wurden alle n Photonen verschossen, so muss die Leistung jedes Treffers mit der Gesamtzahl der Photonen skaliert werden. Die Beleuchtung einer Szene mit 10.000 Photonen soll nur genauer sein als mit 100 Photonen, nicht heller11 . 9 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 55 Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 59 11 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 56 10 Vgl. 3 4.2 Projektion Maps Verschießt man die Photonen nur zufällig in die Szene, so hat man zwei Nachteile: • Photonen ohne Treffer mit der Szene • Kein gezielter Beschuss möglich Der erste Punkt ist intuitiv klar: hat man eine Szene mit nur wenigen Objekten, so können Photonen auch ohne Treffer bleiben und liefern daher keine Informationen über die Beleuchtung. Der zweite Punkt ist nur auf der zweiten Blick ein Nachteil. Licht breitet sich in der Regel relativ gleichmäßig aus, weshalb zufälliges verschießen ausreichend sein sollte. Manche Objekte haben jedoch eine größere Wirkung als andere. Spiegelnde und transparente Objekte können z.B. Kaustiken erzeugen, welche einen höheren Detailgrad besitzen als diffuse indirekte Beleuchtung. Es ist also wünschenswert, diese Objekte zusätzlich mit mehr Photonen zu beschießen, um so mit nur geringfügig höherem Aufwand bessere Kaustiken zu erzeugen. Die Lösung hierfür sind Projektion Maps, also eine Art Rundumsicht von einer Lichtquelle aus. Dazu unterteilt man die Hemisphäre der Lichtquelle in Sektoren und testet für jeden Sektor, ob ein Objekt in diesem Sektor liegt. So ist es möglich, Photonen nur in Sektoren zu verschießen, in denen auch wirklich Objekte liegen bzw. Objekte liegen, welche Kaustiken erzeugen können. Man erreicht mit Projektion Maps also eine höhere Effizienz und detailreichere Kaustiken12 . 4.3 Photon Scattering Photon Scattering beschäftigt sich mit der Frage, wie sich die ausgesendeten Photonen bei Interaktion mit Oberflächen verhalten. Dabei gibt es folgende vier Möglichkeiten13 : • Brechung: das Photon wird durch ein transparentes Material umgelenkt • Spiegelung: das Photon wird in Spiegelrichtung umgelenkt • Streuung: das Photon wird in eine beliebige Richtung umgelenkt • Absorbation: das Photon gibt seine Leistung an die Oberfläche ab Die Interaktion kann dabei auch aus einer Mischform bestehen. Bei einem Treffer auf einer Glaskugel wird beispielsweise ein Teil des Lichts gebrochen und der Rest gespiegelt oder absorbiert. Hier geht man wie bei rekursivem Raytracing vor. Man erstellt also für jeden Anteil der Materialeigenschaft ein neues Photon mit entsprechender Richtung und skalierter Leistung. Für eine Glaskugel wären das zwei neue Photonen: ein Photon in Spiegelrichtung und ein Photon welches entsprechend den Brechungsindizies umgelenkt wird. Die neu entstandenen Photonen haben Leistung entsprechend den Anteilen von Brechung und Spiegelung. Um nun auch Color Bleeding zu simulieren, d.h. dass eine rote Wand auch nur rotes Licht reflektieren kann, wird die Gesamtleistung eines Photons über die RGB-Komponenten des Lichts approximiert. Trifft also ein Photon auf eine rote Wand, so wird auch nur der rote Anteil des Photons reflektiert14 . 12 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 59-60 Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 60 14 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 60-61 13 Vgl. 4 4.4 Russian Roulette Ein Problem des oben genannten Vorgehen ist, dass die Photon Map später aus vielen Photonen mit stark variierender Leistung bestehen wird. Für eine schnelle und weniger fehleranfällige Auswertung ist es jedoch erforderlich, dass alle Photonen in der Photon Map die gleiche Leistung besitzen. Die Lösung hierfür ist Russian Roulette, eine Importance Sampling Methode, welche für jeden Treffer entscheidet, ob das Photon komplett absorbiert oder komplett weitergeleitet wird. Dadurch haben alle Photonen in der Photon Map die gleiche Leistung und die Statistik der Auswertung wird verbessert15 . 4.5 Speicherung Wird nun entschieden, dass ein Photon komplett absorbiert wird, so wird es in der Photon Map gespeichert. Dabei ist es jedoch sinnvoll, nur auf Oberflächen mit diffusem Anteil zu speichern. Beim Auswerten der Photon Map können nur Photonen verwendet werden, die auch in Richtung des Betrachters reflektiert werden. Auf einem perfekten Spiegel wäre dies genau eine Richtung, nämlich die Spiegelrichtung. Der Betrachter wird sich jedoch in der Regel nicht in dieser Richtung befinden, wodurch Photonen auf spiegelnden Oberflächen in der Regel auch keine sinnvollen Informationen liefern. Photonen werden deswegen nur auf zumindest teilweise diffusen Oberflächen gespeichert16 . 4.6 Datenstruktur Die Photon Map wird nur einmal generiert, bleibt während dem eigentlichen Rendervorgang statisch und wird nur noch zum nähern der Beleuchtung an einem beliebigen Punkt verwendet. Diese Näherung basiert auf den N nächsten Photonen zu diesem Punkt. Es ist also wünschenswert, dass diese Photonen möglichst schnell erreicht werden können. Zusätzlich ist eine kompakte Repräsentation nötig, da die Photon Map ständig im Speicher vorhanden sein muss17 . Am besten eignet sich hierfür ein 3-dimensionaler kd-Baum. Ein beliebiges Photon lässt sich dadurch in O(log n) erreichen. Außerdem kann ein linksbalancierter kd-Baum als Array repräsentiert werden, wodurch eine sehr kompakte Repräsentation im Speicher möglich wird18 . Ein Photon selbst wird dabei wie in folgt dargestellt19 : struct photon { float x , y , z ; float p [ 3 ] ; char phi , t h e t a ; short f l a g ; } // p o s i t i o n // power // i n c i d e n t d i r e c t i o n // f l a g f o r k d t r e e 5 x Abbildung 2: Radiance Estimate: Näherung über die nähsten N Photonen 5 Radiance Estimate Die Photon Map beinhaltet nun Photonen, welche einen Teil der Leistung einer Lichtquelle repräsentieren. Will man die Photon Map nun an einem bestimmten Punkt auswerten, so werden sich an diesem Punkt nur eine sehr geringe Anzahl an Photonen befinden. Daher lassen diese Photonen keinen Schluss auf die dort vorherrschende Beleuchtung zu. Die Beleuchtung wird deswegen über die Dichte der Photonen an diesem Punkt bestimmt. Diese Dichte erhält man, indem die nächsten N Photonen aus der Photon Map gesucht werden, und deren Leistung durch die dazu benötigte Fläche geteilt wird20 . Bildlich gesprochen entspricht dies einer Kugel, die sich so lange um den gewünschten Punkt ausbreitet, bis N Photonen eingeschlossen sind(vgl. Abbildung 2). Die dafür benötigte Fläche entspricht dann der projizierten Fläche der Kugel. Ausgedrückt wird dies durch die folgende Formel: Lr (x, ω ~) ≈ N 1 X fr (x, ω ~ p, ω ~ )∆Φp (x, ω ~ p ), πr2 p=1 also der Summe über N Photonen, jeweils gewichtet über die Materialeigenschaft am Punkt x und die benötigte Fläche21 . Die Anzahl N an Photonen, welche für den Radiance Estimate verwendet werden, ist dabei willkürlich gewählt. Je mehr Photonen eingeschlossen werden, desto genauer wird die Lösung. Dazu werden jedoch auch mehr Photonen in der Photon Map benötigt, da die Beleuchtung sonst leicht verwaschen wird. Nutzt man nun unendlich viele Photonen für den Radiance Estimate, also: N 1 X fr (x, ω ~ p, ω ~ )∆Φp (x, ω ~ p ) = Lr (x, ω ~ ), N →∞ πr 2 p=1 lim so konvergiert die Schätzung gegen die tatsächliche Lösung22 . 15 Vgl. 16 Vgl. 17 Vgl. 18 Vgl. 19 Vgl. 20 Vgl. 21 Vgl. 22 Vgl. Henrik Henrik Henrik Henrik Henrik Henrik Henrik Henrik Wann Wann Wann Wann Wann Wann Wann Wann Jensen, Jensen, Jensen, Jensen, Jensen, Jensen, Jensen, Jensen, Realistic Realistic Realistic Realistic Realistic Realistic Realistic Realistic Image Image Image Image Image Image Image Image 6 Synthesis Synthesis Synthesis Synthesis Synthesis Synthesis Synthesis Synthesis Using Using Using Using Using Using Using Using Photon Photon Photon Photon Photon Photon Photon Photon Mapping, Mapping, Mapping, Mapping, Mapping, Mapping, Mapping, Mapping, S. S. S. S. S. S. S. S. 61-64 64 67 68-70 70 75-76 77-78 78-79 5.1 Probleme Durch die verwendete Näherung werden einige Annahmen gemacht, die unter Umständen falsch sind. So wird beispielsweise angenommen, dass alle eingeschlossenen Photonen auf der gleichen Ebene liegen. Dies führt zu folgenden Problemen23 : • Color Bleeding: an Ecken können falsche Photonen mit eingeschlossen werden, da sich die Kugel nicht nur über die Ebene ausbreitet, sondern auch über anliegende Ebenen. Dies führt unter Umständen zu Farbsäumen im Bereich von Ecken. • Dark Corners: an Kanten stimmt die Annahme über gleichmäßig verteilte Photonendichte nicht mehr. Dadurch muss mit zunehmender Nähe zu einer Kante auch die Fläche ständig erhöht werden, um auch genügend Photonen einzuschließen. So entstehen Helligkeitsabfälle am Rand von Ebenen. • Lightleaks: an sehr dünnen Stellen der Szene, z.B. Blätter oder dünne Wände, kann es vorkommen, dass Photonen von der falschen Seite der Ebene mit eingeschlossen werden. Dadurch entstehen helle Flecken an Stellen, die im Dunkeln liegen. Lösungen hierfür sind zum Beispiel: • Andere Volumen: anstatt Photonen mit Hilfe einer Kugel einzufangen“, ” kann beispielsweise eine flache Elipse oder Scheibe verwendet werden. Somit werden weniger falsche Photonen außerhalb der Ebene eingeschlossen. • Andere Flächenberechnung: anstatt der projezierten Fläche der Kugel kann man die konvexe Hülle der eingeschlossen Photonen berechnen. Dies mindert dunkle Stellen an Kanten und Ecken ab. Als generelle Lösung kann auch einfach die Anzahl an Photonen erhöht werden. Da die Näherung konvergiert, werden auch zwangsweise die oben genannten Artefakte abgeschwächt. 6 Rendern Das Rendern des fertigen Bildes wird in drei Schritte eingeteilt24 : • Rendern der direkten Beleuchtung • Rendern der Kaustiken • Rendern der diffusen indirekten Beleuchtung 6.1 Direkte Beleuchtung Die direkte Beleuchtung lässt sich einfach und schnell mittels Raytracing berechnen. Eine Auswertung der Photon Map ist dazu nicht nötig25 . 23 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 79-80 Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 96 25 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 101-102 24 Vgl. 7 Abbildung 3: Rendern der indirekten Beleuchtung: erst beim zweiten Treffer auf einer diffusen Oberfläche wird der Radiance Estimate genutzt 6.2 Kaustiken Kaustiken treten anders als die indirekte diffuse Beleuchtung nur partiell auf und haben einen hohen Detailgrad, sind also nicht weich. Eine Auswertung der Photon Map liefert in der Regel nur eine weiche Beleuchtung, ist also nicht für Kaustiken geeignet. Durch die Verwendung von speziellen Projection Maps ist es aber möglich, neben der normalen Photon Map eine Caustics Map zu erstellen, welche im Bereich von Kaustiken eine genügend hohe Dichte von Photonen hat. Dadurch reicht ein einfacher Radiance Estimate in Kombination mit der Caustics Map aus, um detailierte Kaustiken zu rendern. Durch Filter wie z.B. einen Cone oder Gaussian Filter lassen sich sich die Schärfe und somit auch die Details weiter verbessern26 . 6.3 Indirekte Beleuchtung Zum Berechnen der diffusen indirekten Beleuchtung ist es nicht ausreichend einfach die Photon Map auszuwerten. Die auftretenden Artefakte würden die Bildqualität zu stark beeinträchtigen und die vorgeschlagenen Lösungen sind in der Regel zu aufwändig. Daher kombiniert man den Radiance Estimate mit Pathtracing. Es wird also wieder jedes Pixel mehrfach gesampelt, also beim ersten Auftreffen auf eine diffuse Oberfläche werden mehrere Pfade verfolgt. Beim zweiten Auftreffen auf eine diffuse Oberfläche wird dann der Radiance Estimate verwendet, um alle folgenden diffusen Reflektionen zu approximieren(vgl. Ab26 Vgl. Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping, S. 102-103 8 bildung 3). Dadurch werden die auftretenden Artefakte über eine zusätzliche diffuse Reflektion geschleift” und damit verringert. Man erhält durch die Kom” bination aus Pathtracing und Radiance Estimate also eine bessere Bildqualität bei moderat gesteigertem Aufwand27 . 7 Irradiance Caching Trotz der Optimierung durch Photon Mapping ist die Berechnung der diffusen indirekten Beleuchtung immer noch am aufwändigsten. Eine weitere Verbesserung ist das Irradiance Caching. Dieses basiert auf der Annahme, dass sich die diffuse indirekte Beleuchtung generell nur sehr langsam ändert, und somit bereits berechnete Werte wieder verwendet werden können28 . Die einzige Ausnahme sind dabei Kaustiken, da sich hier die indirekte Beleuchtung abrupt ändert. Dadurch, dass beim Photon Mapping Kaustiken und diffuse indirekte Beleuchtung getrennt berechnet werden, ist dies aber nicht weiter schlimm, da ausschließlich diffuse indirekte Beleuchtung approximiert wird29 . 7.1 Kriterien Es gibt drei ausschlaggebende Kriterien dafür, ob an einem Punkt x ein bereits berechneter Wert von Punkt x0 wieder verwendet werden kann30 : • Abstand von x zu x0 : je weiter die beiden Punkte auseinander liegen, desto wahrscheinlicher ist es, dass der gecachte Wert nicht mehr brauchbar ist. • Verhältnis der Normalen: liegen die beiden Punkte auf Oberflächen, welche eine gleiche Orientierung haben, so können bereits errechnete Werte öfter verwendet werden. • Szene: zusätzlich wichtig ist die Lage der Objekte, welche den Punkt x0 indirekt beleuchten. Liegen diese weiter weg, so ist auch die indirekte Beleuchtung in der Regel relativ weich. Der gespeicherte Wert kann also mit einer höheren Wahrscheinlichkeit genutzt werden. Aus diesen genannten Kriterien kann nun errechnet werden, ob bereits errechnete Werte für die indirekte Beleuchtung an einem neuen Punkt wieder verwendet werden können31 . 27 Vgl. Henrik Henrik 29 Vgl. Henrik 30 Vgl. Henrik 31 Vgl. Henrik 28 Vgl. Wann Wann Wann Wann Wann Jensen, Jensen, Jensen, Jensen, Jensen, Realistic Realistic Realistic Realistic Realistic Image Image Image Image Image 9 Synthesis Synthesis Synthesis Synthesis Synthesis Using Using Using Using Using Photon Photon Photon Photon Photon Mapping, Mapping, Mapping, Mapping, Mapping, S. S. S. S. S. 103-104 139-140 143-144 140-141 141 8 Fazit Photon Mapping ist eine der derzeit besten Methoden zur Berechnung der globalen Beleuchtung. Durch die Kombination von Pathtracing und Photon Mapping lässt sich die Renderzeit bei gleichbleibender Bildqualität drastisch verkürzen. Insbesondere Kaustiken lassen sich so sehr effizient berechnen. Zusätzlich ist Photon Mapping durch die Unabhängigkeit von Betrachter und Geometrie sehr flexibel einsetzbar. Aus diesen Gründen wird Photon Mapping mittlerweile von den meisten großen Renderern unterstützt32 . 9 Literaturverzeichnis Henrik Wann Jensen, Realistic Image Synthesis Using Photon Mapping. Wellesley: A K Peters, 2001 Peter Shirley, R. Keith Morley, Realistic Ray Tracing. Natick: A K Peters, 2003 http://de.wikipedia.org/wiki/Kaustik (Optik), aufgerufen am 15.07.2011 http://de.wikipedia.org/wiki/Photon Mapping, aufgerufen am 15.07.2011 32 Vgl. http://de.wikipedia.org/wiki/Photon Mapping, aufgerufen am 15.07.2011 10