Photon Mapping

Werbung
Photon Mapping
Proseminar
How to make a P I X A R movie
Andreas Schmidt
2011
Inhaltsverzeichnis
Zusammenfassung................................................................................................................................2
Motivation............................................................................................................................................2
Photon Tracing Pass.............................................................................................................................3
Aussenden der Photonen..................................................................................................................3
Russisches Roulette.........................................................................................................................3
Speicherung der Photonen...............................................................................................................4
Rendering Pass.....................................................................................................................................4
Die Rendergleichung.......................................................................................................................4
Abschätzen der Strahldichte............................................................................................................5
Filtering............................................................................................................................................6
Fazit......................................................................................................................................................6
Abb 1: Simulierte globale
Beleuchtung
Abb 2: Direkte Beleuchtung
Abb 3: Kaustik
Zusammenfassung
Das Photon Mapping ist eine Erweiterung des Raytracing-Verfahrens die es ermöglicht, die diffuse
Komponente der globalen Beleuchtung auch in komplexen Szenen effizient zu berechnen. Mithilfe
dieses Algorithmuses lassen sich besonders auch Effekte wie Kaustiken und diffuse
Mehrfachreflektionen mit einem akzeptablen Rechenaufwand simulieren.
Motivation
Für eine möglichst realistische Bildsynthese ist die Globale Beleuchtung von entscheidender
Bedeutung. Unter Globaler Beleuchtung versteht man die Simulation der kompletten Interaktion
von Licht mit Objekten in der Szene. Der auffallendste Effekt hierbei ist die diffuse
Mehrfachreflektion von Licht zwischen einzelnen Objekten. Fällt ein Lichtstrahl beispielsweise
durch ein Fenster in einen Raum, spiegelt er sich diffus an allen Flächen und erhellt so die ganze
Szene (Abb 1) und nicht nur die Bereiche, die direkt vom Lichtstrahl getroffen werden wie dies bei
einer rein direkten Beleuchtung der Fall ist (Abb 2).
Ein weiterer prominenter Effekt sind sogenannte Kaustiken (Abb 3), also Muster aus konzentrierten
Lichtbündeln, wie sie entstehen, wenn Lichtstrahlen in einem transparenten Material gebrochen
werden.
Die vor der Entwicklung des Photon Mappings bekannten Algorithmen zur Simulation von
Globaler Beleuchtung fordern jedoch einen sehr hohen Rechenaufwand.
Als Beispiel wollen wir hier kurz das Path-Tracing oder auch Monte-Carlo-Tracing genannte
Verfahren betrachten. Beim Path-Tracing sendet man Strahlen vom Betrachter aus in die Szene bis
zum ersten Schnittpunkt und verfolgt ihn von dort aus rekursiv weiter, um aus den erhaltenen
Informationen anschließend die Beleuchtung zu berechnen. Durch die zufällige Weiterverfolgung
des Strahls entsteht jedoch eine große Varianz im Ergebnis, das sich durch Bildrauschen bemerkbar
macht. Um dies zu verhindern benötigt man eine sehr hohe Anzahl an Sample-Rays, was sich auf
die Rechenzeit auswirkt.
Das Photon Mapping benutzt einen gänzlich anderen Ansatz. Statt eines sogenannten BackwardTracings, bei der Strahlen vom Betrachter aus, durch die Szene zu den Lichtquellen verfolgt
werden, startet man beim Photon Mapping bei den Lichtquellen selbst (Forward Tracing).
Hierzu schickt man Licht in Form von Energieteilchen, sogenannten Photonen, aus jeder
Lichtquelle der Szene und speichert die Interaktion der Photonen mit der Geometrie in einer
Photonmap um sie später zu einer effizienten Berechnung der Globalen Beleuchtung zu verwenden.
Dies wird im Algorithmus in zwei Abschnitten realisiert. Dem Photon-Tracing Pass und dem
Rendering Pass.
Photon Tracing Pass
Der Photon Tracing Pass dient dem Aufbau der Photonmap. Hierbei werden Photonen rekursiv
durch die Szene verfolgt und Photonenereignisse gespeichert.
Aussenden der Photonen
Wir betrachten nun zunächst für verschiedene Typen von Lichtquellen, wie die Photonen in die
Szene gesendet werden. Bei einer Punktförmigen Lichtquelle, die keine Ausdehnung besitzt, ist die
Position auch der Startpunkt der Photonen und die Richtung beliebig. Bei direktionalen
Lichtquellen wählt man einen zufälligen Punkt außerhalb der zu rendernden Szene und schickt alle
Photonen in die selbe Richtung. Auf einer 2-dimensionalen Lichtquelle sucht man sich einen
beliebigen Punkt in der Ebene innerhalb der Lichtquelle und sendet Photonen in die gewünschte
Hemisphäre. Bei Lichtquellen mit einer freien 3-dimensionalen Form wählt man zufällige
Startpunkte auf der Oberfläche der Lichtquelle und sendet dann die Photonen in eine Richtung
abhängig von der Oberflächennormalen an diesem Punkt.
Eine Optimierungsmöglichkeit, die das Photon Mapping schon an dieser Stelle bietet ist die
Verwendung einer sogenannten Projection Map. Hierbei wird die Szene aus der Sicht der jeweiligen
Lichtquelle abgebildet und das Bild mit einem Raster in verschiedene Bereiche unterteilt. Nur wenn
sich in einem Bereich auch wirklich ein Objekt befindet, lohnt es sich in diese Richtung Photonen
auszusenden.
Russisches Roulette
Bei der Kollision eines Photons mit der Geometrie der Szene wendet man ein Verfahren namens
"Russisches Roulette" an, um zu entscheiden, was weiter mit dem Photon geschehen soll.
Trifft ein Photon auf eine Oberfläche, so wird es entweder
1.
diffus reflektiert
2.
spiegelnd reflektiert
3.
absorbiert
In welchem Maße dies passiert wird durch die Materialeigenschaften des Objekts k d k sk a =1
festgelegt, wobei k d für die diffuse Reflektion steht, k s für die spekulare Reflektion und k a
für die Absorption.
Generiert man nun eine Zufallszahl ∈[0,1] wird folgendermaßen entschieden:
∈[0, k d ] Þ diffuse Reflektion
∈[k d , k sk d ] Þ spiegelnde Reflektion
∈[k sk d ,1] Þ Absorption
Wird ein Photon diffus reflektiert, so speichert man Position und Eigenschaften des Photons für
diese Stelle ab und schickt ein neues Photon von diesem Punkt in die Szene. Bei einer spiegelnden
Reflektion verzichtet man auf das abspeichern und schickt sofort ein neues Photon aus, da die
Wahrscheinlichkeit, dass ein gespiegeltes Photon auf den jeweiligen Pixel des Betrachters fällt
gegen Null geht. Für die Simulation von spiegelnden Oberflächen eignet sich die herkömmliche
Raytracing Methode besser.
Eine Besonderheit ist, dass die Energieabnahme des Lichts bei jeder diffusen Spiegelung nicht
durch eine Veränderung der Photonenenergie, sondern durch die Veränderung der Anzahl der
Photonen simuliert wird.
In einem konkreten Beispiel heißt das, dass bei einer zu 33% diffus reflektierenden Oberfläche, drei
eintreffende Photonen nicht mit 33% der Energie , sondern nur ein Photon mit 100% der Energie
reflektiert wird. Ein Vorteil des russischen Roulettes ist dadurch, dass die abgespeicherten
Photonenereignisse immer die gleiche Energie haben, was die Abschätzung der Strahldichte später
sehr erleichtert.
Speicherung der Photonen
Wie bereits zuvor erwähnt, wird jedes Photonenereignis in einer
Photonmap gespeichert. An diese Datenstruktur werden sehr hohe
Anforderungen gestellt, da es schnell zu einer großen Anzahl von
Photonenereignissen kommt und die Daten effizient durchsucht werden
müssen. Besonders die Suche nach den nächsten Nachbarn (Nearest
Neighbour Search) ist beim Photonmapping von zentraler Bedeutung.
Als gute Lösung hat sich dabei die Verwendung eines kd-Baumes
herausgestellt.
Ein balanzierter kd-Baum besitzt folgende Eigenschaften:
Abb 4: Visualisierung einer
Caustic Photon Map
Operation
Laufzeit
Einfügen eines Knotens
O(log n)
Suchen eines Knotens
O(log n)
Suche nach den k nächsten Nachbarn
O(log n)
Weiterhin berücksichtigt man die Tatsache, dass für die genaue Berechnung von Kaustiken eine sehr
große Anzahl von Photonen nötig ist. Man generiert sich deshalb zusätzlich zu einer Global Photon
Map eine Caustic Photon Map (Abb 4), bei der nur Photonen enthalten sind die spekular reflektiert
oder transmittiert wurden. Auf solche Oberflächen wird dafür von den Lichtquellen eine erhöhte
Anzahl von Photonen emittiert (beispielsweise realisiert durch eine weitere Projection Map).
Rendering Pass
Die Szene wird mithilfe eines modifiziertem Distribution Raytracing Algorithmus, wie dem MonteCarlo-Raytracing, unter Zuhilfenahme der Informationen aus der Photonmap berechnet. Hierbei
wird unterschieden zwischen einer exakten Berechnung und einer Abschätzung. Abgeschätzt wird
immer dann, wenn der aktuelle Strahl nur wenig zum Gesamtergebnis beiträgt. Die Strahldichte an
einem Punkt x und damit auch die Helligkeit des gerenderten Pixels wird mithilfe der
Rendergleichung berechnet.
Die Rendergleichung
Die Strahldichte an einem Punkt
x für die Richtung w
 lässt sich durch die Formel
L0 x , w
 =Le  x , w
 L r  x , w
  (Die Rendergleichung)
ausdrücken, wobei L e das selbst emittierte Licht , falls das Objekt eine Lichtquelle ist und
L r den Anteil des reflektierten Lichtes darstellt. L r lässt sich in 4 Terme aufspalten:
Lr =
∫ f r Li ,l cos i d wi


Direkte Beleuchtung


Spekulare Reflektion

Kaustiken

Diffuse Reflektion

∫ f r ,S  Li ,cL i ,d cos i d w i

∫ f r ,d L i ,c cosi d wi

∫ f r ,d L i ,d cosi d w i


Die Berechnung von
L r nach Jensen [Jen 96]:
Direkte Beleuchtung:
Entweder genaue Berechnung durch Monte-Carlo Raytracing, oder Abschätzung mithilfe der
Photonmap.
Spekulare Reflektion:
Berechnung durch Standard Monte Carlo Raytracing.
Kaustiken:
Berechnung mithilfe der Informationen in der Photonmap. Genaues Berechnen mit der Caustic
Map, Abschätzen mit der Global Map. Eine Berechnung durch Monte-Carlo-Raytracing ist meist
unmöglich.
Diffuse Reflektion:
Einkommendes Licht, das vorher mindestens einmal diffus reflektiert wurde. Abschätzung mithilfe
der Photon Map. Genaue Berechnung mit Importance Sampling wie in [Jen 95] beschrieben.
Abb 5: Abschätzen der Strahldichte
Abschätzen der Strahldichte
Die Strahldichte Lr an einem Punkt x kann man mithilfe der, in der Photonmap gespeicherten
Informationen abschätzen. Sie entspricht der Dichte der Photonenereignisse in der Umgebung von
x . Es gibt hier zwei Strategien zur Auswertung:
1. Spanne eine Kugel mit Radius
befinden
r auf, und berücksichtige alle Photonen die sich innerhalb
2. Spanne eine Kugel auf und vergrößere sie, bis sie n Photonen umschließt
Um nun die Strahldichte abzuschätzen, teilt man die Summe der Photonen durch die Fläche, auf die
sich diese verteilen. Da die Oberfläche am Punkt x (in Näherung) eben ist, kann man als Fläche
A=r 2  annehmen.
Man erhält so als Näherung der Strahldichte:
N
1
   p  x , w
Lr x , w
 ≈ 2 ∑ f r  x , wp , W

 r p=1
Ein Problem bei dieser Vorgehensweise ist, dass die Annahme
jede Fläche sei um den Punkt x lokal eben, schlicht falsch ist,
was besonders bei Ecken und Kanten ersichtlich wird und sich
dort durch fehlerhafte Farbverläufe zeigt. Abhilfe kann für diese
Fälle die Verwendung eines Ellipsoids anstatt einer Kugel
schaffen. Dies vergrößert jedoch auch den Rechenaufwand.
Abb 6: Fehlerquelle bei der Abschätzung
und ein Lösungsansatz
Filtering
Durch die Abschätzung der Strahldichte kann es je nach verwendeter Photonenzahl zu weichen und
unscharfen Kanten kommen. Besonders bei Kaustiken ist dies jedoch unerwünscht. Eine Abhilfe
dafür sind 2-Dimensionale Filter, die Photonen stärker gewichten, je näher sie dem Punkt x
liegen.
Ein Beispiel für einen solchen Filter ist der Cone Filter:
w pc =1−
dp
kr
normalisiert:
1−
2
3k
Wobei dp der Abstand des Photons zu x ist, r der Kreisradius und k 1 eine Filterkonstante.
Die gefilterte Abschätzung der Strahdichte ist somit:
L r , w
 ≈
∑ f r  x , wp , w   p  x , wp w pc
1−
2
 r 2
3k
Fazit
Das Photonmapping ist ein zweistufiger Algorithmus zur effizienten Berechnung der Globalen
Beleuchtung, bestehend aus einem Photon Tracing Pass und einem Rendering Pass. Er besitzt
folgende besonders wünschenswerte Eigenschaften:
1. Er kann mit sämtlichen Kombinationen von spekularer Reflektion, diffuser Reflektion und
Transmission umgehen (einschließlich Kaustiken)
2. Da die Photonmap unabhängig von der Representation der Geometrie ist, verursachen auch
sehr komplexe Szenen, oder prozedural generierte Geometrie keine Probleme
3. Er ist relativ schnell
4. Er ist einfach parallelisierbar
Literatur:
HENRIK WANN JENSEN, Realistic Image Synthesis Using Photon Mapping , A K Peters Ltd,
2001, [Jen 01]
HENRIK WANN JENSEN, Global Illumination using Photon Maps, Rendering Techniques '96
(Proceedings of the Seventh Eurographics Workshop on Rendering), 1996, [Jen 96]
HENRIK WANN JENSEN, Importance Driven Path Tracing using the Photon Map,Rendering
Techniques '95 . Eds. P.M. Hanrahan and W. Purgathofer, SpringerVerlag, 1995 [Jen 95]
PETER SHIRLEY und R.KEITH MORLEY, Realistic Ray Tracing – Second Edition, A K Peters
Ltd, 2003 ,[ShKei]
HENRIK WANN JENSEN und PER H. CHRISTENSEN, High-Quality Rendering using Ray
Tracing and Photon Mapping, SIGGRAPH'2007 Course 8, San Diego, August 2007 ,[JenChr]
PER H. CHRISTENSEN, Faster Photon Map Global Illumination , Journal of Graphics Tools,
ACM, 1999, [Chr 99]
SUSANNE KRÖMER, Computergraphik II - Kapitel IV, Vorlesungsskript Uni Heidelberg, 2008
Herunterladen