Kapitel 4 Photon Mapping Die größten Schwächen des Raytracing bestehen darin, dass es KEINE diffusen Abstrahlungen und KEINE Kaustik wiedergeben kann. Während man für die diffusen Abstrahlungen, dem sogenannten Color bleeding oder Ausbluten von Farbe auf benachbarte Flächen, mit Radiosity Abhilfe schaffen kann, indem man mit finite Elementmethoden Strahlungsgleichgewichte zwischen einzelnen Flächenstücken berechnet, hatte man für die Kaustik, also das Bündeln oder Fokussieren von Lichtstrahlen keine wirklich gute Methode. Lichtreflexe auf dem Boden eines Schwimmbeckens oder am Fuß eines Cognacglases, eine Lupe, die als Brennglas dient, konnten nicht wirklich wiedergegeben werden. Das Photon Mapping ist eine Methode, die als Ergänzung zum Raytracing zu sehen ist. Sie wurde in den Jahren 1993/94 in der Dissertation von Henrik Wann Jensen entwickelt und 1995 veröffentlicht. Beide oben genannten Probleme, das Ausbluten und die Kaustik, können mit Photon Mapping gelöst werden: es sind indirekte Beleuchtungen diffuser Oberflächen. Außerdem können auch Streuungen an Volumen in ähnlicher Weise in diese Technik einbezogen werden und so Nebel und Rauch realistisch erscheinen lassen (Participating Media). Zudem ist sie einfach parallelisierbar. Dieses Skript lehnt sich eng an die Ausführungen im SIGGRAPH Course 38 von 2001 an (siehe [JCS01]). Die Idee ist denkbar einfach: man stelle sich Licht in Form von Teilchen vor, die von der Lichtquelle in zufällige Richtungen emittiert werden und dabei Energie nach Farbkanälen aufgespalten transportieren. In einem ersten Schritt wird eine Photon Map erstellt, die alle Ereignisse des Aufpralls eines zufällig gestreuten Photons auf ein nichtreflektierendes Objekt registriert. Der zweite Schritt besteht im Rendering Pass, der mit statistischen Techniken die Informationen über hereinkommenden Fluss und reflektierte Strahlung an jedem Punkt berechnet. Die Photon Map ist von der geometrischen Repräsentation entkoppelt. Dadurch ist sie bei komplexen Szenen der Methode des Radiosity klar überlegen, denn Photon Mapping benötigt kein Gitter und skaliert daher besser, wenn die Anzahl der Objekte groß ist. Außerdem ist noch anzumerken, dass das Verfahren nicht patentiert ist und daher bereits in viele gängige Raytracingalgorithmen übernommen wurde (beispielsweise in Povray und Renderpark). 69 70 KAPITEL 4. PHOTON MAPPING Abbildung 4.1. Henrik Wann Jensen 4.1 Die Spur der Photonen Ziel des Photonenverfolgens ist die Berechnung von indirekter Beleuchtung auf diffusen Oberflächen, die beispielsweise auch durch die Bündelung von Licht an spiegelnden oder transparent fokussierenden Objekten entsteht. 4.1.1 Photonemission Photonen werden von einer Lichtquelle über eine Verteilungsfunktion emittiert, die von der emissiven Lichtstärke bestimmt wird. Hier muss zwischen der Lichtstärke und dem Photonenfluss vermittelt werden. Man unterscheidet (a) punktförmige und (b) gerichtete Lichtquellen, (c) Schlaglichter oder (d) generelle Lichtobjekte (für die man über goniometrische Diagramme die Emission bestimmt). Während man für die Photonen bei (a) gleichmäßig verteilte zufällige Richtungen von einem Punkt aus wählt, haben die Photonen im Fall (b) alle dieselbe Richtung, nämlich die aus der das Licht einstrahlt (mit vierten Koordinate w = 0, also unendlich weit entfernt). Im Fall (c) eines Schlaglichts (z.B. ein rechteckiges Fenster), nimmt man zufällig verteilte Positionen innerhalb der ausgedehnten Fläche des Schlaglichts an und ermittelt zufällige Richtungen mit einer über den Kosinus verteilten Wahrschein- 4.1. DIE SPUR DER PHOTONEN 71 lichkeit (die Null ist, für parallel zur Fläche emittierte Photonen und höchste Wahrscheinlichkeit für senkrecht abgestrahlte Photonen hat). Im allgemeinen Fall (d) variiert man die Wahrscheinlichkeit der Position auf der Lichtquelle und die Richtung des Photons. Die Stärke des Lichts (in Watt, [w]) muss von den emittierten Photonen reproduziert werden. In einer Formel ausgedrückt muss gelten Pphoton = Plight ne (4.1) mit der Lichtstärke Pphoton für ein einzelnes Photon, während Plight die gesamte Lichtstärke der Quelle und ne die Anzahl der emittierten Photonen ist. Abbildung 4.2. Mögliche Lichtquellen von links nach rechts: (a) Punktförmige Lichtquelle, (b) gerichtete Lichtquelle, (c) Schlaglicht, (d) generelles Lichtobjekt Pseudocode für das Aussenden von Photonen: emit_photons_from_diffuse_point_light(){ ne = 0; // number of emitted photons while (not enough photons) { do { x = random number between -1 and 1; y = random number between -1 and 1; z = random number between -1 and 1; } d = <x,y,z>; p = light source position; trace_photon_from_p_in_direction_d(); ne= ne + 1; } scale power of stored photons with 1/ne } 72 KAPITEL 4. PHOTON MAPPING Bemerkung 4.1 Szenen mit vielen Lichtquellen benötigen nicht mehr Photonen als Szenen mit nur einer Lichtquelle, da jede Lichtquelle zur gesamten Beleuchtung weniger beiträgt. Wenn nur wenige Lichtquellen für die gesamte Beleuchtung von Bedeutung sind, kann man die Bedeutung in einer Abbildung festhalten (Importance sampling map), um danach die Photonen zu konzentrieren. Bemerkung 4.2 Statt Photonen unterschiedlicher Energieniveaus für schwächere und stärkere Lichtquellen zu speichern, kann man auch einfach die Anzahl der emittierten Photonen bei schwächeren Quellen reduzieren. Tausend Photonen mit halber Energie entsprechen fünfhundert Photonen mit voller Energie. In Szenen mit wenigen Objekten treffen viele der emittierten Photonen auf gar kein Objekt. Um diese Verschwendung von Rechenleistung zu reduzieren, optimiert man die Emission über sogenannte Projection maps. Definition 4.1 Eine Projection map ist eine Abbildung der Geometrie aus Sicht einer Lichtquelle. Sie besteht aus vielen einzelnen Zellen, die angeschaltet sind, falls geometrische Objekte in dieser Richtung liegen, und ausgeschaltet sind, falls das nicht der Fall ist. In der Praxis hat sich das Clustern von Objekten und ein Arbeiten mit Bounding spheres oder Bounding boxes als nützlich erwiesen. Mit der Projection map erhält man eine konservative Abschätzung für die Richtung, in der es nötig ist, Photonen zu emittieren. Das generelle Vorgehen sieht bei dünn besetzten Szenen eine Schleife über alle angeschalteten Zellen vor. Es werden zufällig Photonen in den Bereich dieser Zellen emittiert. Das kann allerdings zu verzerrten Ergebnissen führen, wenn die Anzahl angestrebter Photonenereignisse bereits erreicht ist, bevor alle Zellrichtungen abgearbeitet sind. Daher wird man bei dicht besetzten Szenen zunächst eine zufällige Richtung generieren, dann testen, ob die Zelle in dieser Richtung angeschaltet ist. Andernfalls generiert man eine neue Richtung. Dieses Testen ist für dünn besetzte Szenen zu kostspielig und bringt im dicht besetzten Fall nur dann einen Vorteil gegenüber dem Arbeiten ohne Projection map, wenn man die Objekte in Clustern und begrenzenden Volumina organisiert. Jedenfalls aber muss man die Gleichung 4.1 mit dem Verhältnis aus angeschalteten Zellen zur Gesamtzahl der Zellen wichten. Pphoton = Plight # of cells with objects ne total # of cells (4.2) Ein weiterer Vorteil von Projection maps besteht darin, dass man Objekte mit spiegelnden Eigenschaften leicht identifizieren kann. Diese meist wenigen Objekte sind wichtig für das Erzeugen von Kaustiken. 4.1. DIE SPUR DER PHOTONEN 4.1.2 73 Photonenverfolgung mit russischem Roulette Die Photonenverfolgung basiert auf dem Raytracing ganz ähnlichen Verfahren, mit dem Unterschied, dass hier die emittierten Photonen in die Szene verfolgt werden. Dieses Verfahren wird von den verschiedenen Autoren meist als Light ray tracing oder Forward ray tracing manchmal auch Backward path tracing bezeichnet. Beim Verfolgen des Strahls müssen im Wesentlichen Schnittpunkte mit Objekten berechnet werden, an denen ein Richtungswechsel des Strahls geschieht. Dabei transportieren Photonen Energie in Form eines Energieflusses, während Sichtstrahlen, die durch jeweils alle Pixel in eine Szene verfolgt werden, eine Strahlungsdichte an den jeweiligen Schnittpunkten einsammeln. Beispiel 4.1 Die Wechselwirkung eines Photons mit einem Material ist anders als bei einem Sichtstrahl: Für den Strahl existiert ein Brechungsindex, für das Photonenteilchen nicht. Wenn ein Photon auf ein Objekt trifft, wird es entweder (a) diffus oder spiegelnd reflektiert, (b) diffus oder spiegelnd transmittiert oder (c) absorbiert (ausgelöscht). Die Wahrscheinlichkeit für die drei Fälle hängt von den jeweiligen Materialeigenschaften ab. Wenn wir zunächst den monochromatischen reflektierenden Fall betrachten, so gilt kd + ks ≤ 1. Dabei ist kd der diffuse und ks der spiegelnde Reflexionskoeffizient. Sei nun ξ ∈ [0, 1] eine gleichmäßig verteilte Zufallsvariable (die man z.B. mit drand48() berechnet). Man unterscheidet ξ ∈ [0, kd ] ξ ∈ [kd , kd + ks ] ξ ∈ [kd + ks , 1] → → → diffuse Reflexion spiegelnde Reflexion Absorption. Diese Methode ist bekannt als Russisches Roulette. Die Energie eines Photons muss dabei nicht modifiziert werden! Beispiel 4.2 Ein Material, dessen Oberfläche 50 % des eingestrahlten Lichts reflektiert, wird auch nur die Hälfte der ankommenden Photonen reflektieren (mit voller Energie). Die restlichen 50 % werden absorbiert. 74 KAPITEL 4. PHOTON MAPPING Im chromatischen Fall (z.B. mit drei Farbkanälen RGB) bestimmt man jeweils eine Wahrscheinlichkeit für diffuse und spiegelnde Reflexion, statt einfach kd und ks einzusetzen. Daher erhält man für den diffusen Fall: Pd = max(kdr Pr , kdg Pg , kdb Pb ) max(Pr , Pg , Pb ) spiegelnden Fall: Ps = max(ksr Pr , ksg Pg , ksb Pb ) , max(Pr , Pg , Pb ) und den wobei (kdr , kdg , kdb ) die diffusen, (ksr , ksg , ksb ) die spiegelnden Reflexionskoeffizienten sind und das Tupel (Pr , Pg , Pb ) die Energie des einfallenden Photons nach Farbkanälen aufgespalten darstellt. Die Wahrscheinlichkeit der Absorption bei reflektierenden (nicht transmittierenden) Oberflächen beträgt P a = 1 − Pd − Ps mit einer Zufallsvariablen ξ ∈ [0, 1] und ξ ∈ [0, Pd ] ξ ∈ [Pd , Pd + Ps ] ξ ∈ [Pd + Ps , 1] → → → diffuse Reflexion spiegelnde Reflexion Absorption. Jetzt muss allerdings die Energie des reflektierten Photons angepasst werden, denn entweder wird das Photon mit voller Energie gespiegelt oder mit voller Energie diffus gestreut. Sollte spiegelnde Reflexion ausgewählt worden sein, ergibt sich: Prefl,r = Pin,r /Ps Prefl,g = Pin,g /Ps Prefl,b = Pin,b /Ps Diese Vorgehensweise ist natürlich auf transmittierte Strahlung erweiterbar. Auch das Aufspalten in nur drei Farbkanäle kann auf generelle Wellenlängenabhängigkeit erweitert werden. Für spezielle Reflexionseigenschaften wie glänzende oder richtungsabhängige diffuse Reflexion wurden ebenfalls geeignete Modelle auf Basis von Wahrscheinlichkeiten entwickelt. Vorteil von Russischem Roulette: Die gespeicherten Photonenereignisse haben immer vergleichbare Energie. Damit wird die Abschätzung der Strahldichte einfacher und selbst bei wenigen Photonen erzielt man eine bessere Qualität, als würde man auch die Energie der Photonen je Ereignis abnehmen 4.1. DIE SPUR DER PHOTONEN 75 lassen und schließlich viel Rechenleistung in das Verfolgen von energetisch geringwertigen Photonen verschwenden. Würde man nämlich ein Photon beim Auftreffen auf eine Fläche beispielsweise in ein diffuses und ein spekulares Photon aufspalten, wobei die Energie jeweils in gleicher Weise aufgespalten wird, würde man für jedes Photon einen binären Baum erzeugen, dessen Einzelereignisse in jeder Stufe entsprechende Anteile der Energie verlieren würden. Nachteil von Russischem Roulette: Allerdings wird über den Wahrscheinlichkeitsansatz eine Varianz in die Lösung eingebracht, da zur Skalierung der Photonenenergie anstelle von exakten Werten für Reflexion und Transmission eine Wahrscheinlichkeit eingesetzt wird, die erst bei großer Anzahl von Ereignissen gegen den korrekten Wert konvergiert. 4.1.3 Speichern von Photonen Das Auftreffen eines Photons auf eine diffuse Oberfläche wird als Photonenereignis oder als Spur des Photons bezeichnet. Diese Photonen, oder besser: Photonenereignisse, werden in einer sogenannten Photon Map gespeichert. Photon Maps zeichnen sich also NUR an DIFFUSEN Oberflächen ab, nicht aber an spiegelnden Flächen, denn die Wahrscheinlichkeit dafür, dass ein Photon von einer spiegelnden Fläche direkt durch ein Pixel den Betrachter erreicht, ist identisch null. Bemerkung 4.3 Um korrekte spiegelnde Reflexion zu erzielen, verfolgt man einen Strahl vom Pixel in die Spiegelrichtung (Backward Raytracing). Photon Mapping spielt hier praktisch keine Rolle. Die Wechselwirkung eines Photons mit einer diffusen Oberfläche wird in einer globalen Datenstruktur, der Photon Map gespeichert. Für das emittierte Photon können mehrfache Ereignisse entlang eines Pfades gespeichert werden. Auch Absorption an einer diffusen Oberfläche wird aufgezeichnet. Die Anzahl der Photonen in einer Photon Map bezieht sich auf die Anzahl sämtlicher solcher Ereignisse. Definition 4.2 Eine Photon Map ist eine globale Datenstruktur, die die Position, die eingestrahlte Photonenenergie und die einfallende Richtung einer Wechselwirkung mit einer diffusen Oberfläche speichert. Zudem ergänzt man häufig eine Flag zum Sortieren innerhalb eines kd-trees. Die Struktur einer Photon Map hat folgende Gestalt: struct photon{ float x, y, z; // Position char p[4]; // Power packed in Ward’s RGB-format char phi, theta; // compressend incident direction short flag; // used in kd-tree } 76 KAPITEL 4. PHOTON MAPPING Abbildung 4.3. Photonenpfade: (a) LDDD mit anschließender Absorption, (b) LSR DR DR und Verlassen der Box, (c) LST ST D mit anschließender Absorption. Dabei sind die Raumwinkel φ und θ jeweils in die Länge eines char gepackt. phi = 255 * (atan2(dx, dy) + PI) / 2 * PI; theta = 255 * acos(dx) / PI; Man unterscheidet aus Effizienzgründen drei verschiedene Photon Maps, die in abkürzender Schreibweise die folgenden Ereignisse verzeichnen: • Kaustische Photon Map: LS + D • Globale Photon Map: L{S|D|V }∗ D • Volumenbezogene Photon Map: L{S|D|V }+ V Die Schreibweise zählt dabei jeweils die Art und Häufigkeit des Ereignisses auf, das in der jeweiligen Photon Map gespeichert ist. Dabei ist L = Emission von einer Lichtquelle S = Spiegelnde Reflexion oder Transmission D = Diffuse Reflexion oder Transmission V = Streuung an einem Volumenelement 4.2. PHOTONEN IM RENDERING PASS 77 {x|y|z} eines der Ereignisse x+ mindestens ein x oder mehrfache Wiederholung von x x∗ kein x oder mehrfache Wiederholung von x. In der kaustischen Photon Map sind gezielt Photonen in die Richtung von spiegelnden Objekten verfolgt worden, um das Phänomen der Lichtbündelung möglichst präzise wiederzugeben. Die globale Photon Map streut die Photonen völlig zufällig in alle Raumrichtungen und würde die Lichtbündelung nur unzureichend oder erst bei sehr hoher Anzahl von Photonen abbilden können. Streuung an Volumenelementen ist sehr aufwändig und wird nur in den wenigsten Fällen in die Strahlungsabschätzung im Rendering Pass eingehen. Abbildung 4.4. Links: Darstellung des Raums mit farbigen Wänden und einer Kugel aus Chrom, einer aus Glas mit Raytracing ohne Auswertung der Photon Map, rechts: Darstellung der Photonenereignisse als entsprechende farbige Punkte. Man erkennt in der Photon Map sehr gut die Kaustik als Bündelung weißer Photonenereignise unter der Glaskugel. Außerdem sind die Ereignisse an der Decke und in den Schatten der Kugeln je nach Nähe zu einer der farbigen Wände unterschiedlich gefärbt. Spiegelnde Objekte verzeichnen keine Photonenereignisse, daher wurden sie hier schwarz dargestellt. Wie sich die Photon Map beim Rendern auswirkt, zeigt Abb. 4.5. Hiermit ist der Photon Tracing Pass abgeschlossen, die Photon Maps sind vorbereitet und der zweite Schritt, das Rendern mithilfe der Photon Maps beginnt. 4.2 Photonen im Rendering Pass Die Idee im Rendering Pass besteht darin, die Strahlung unter Berücksichtigung von jeweils n nächsten Photonen zum Punkt x abzuschätzen. 78 KAPITEL 4. PHOTON MAPPING Abbildung 4.5. Bezieht man die globale Photon Map und die kaustische Photon Map in die Berechnungen des Raytracing ein, ist sowohl die Decke beleuchtet, die Schatten unterschiedlich farbig als auch ein durch Kaustik hervorgerufenes Glanzlicht unter der Glaskugel zu sehen. Der helle Punkt an der blauen Wand resultiert aus der Spiegelung der Kaustik an der Glaskugel und dem Transport dieses Lichtpunktes durch die Photonen der kaustischen Photon Map durch die Glaskugel auf die Wand. 4.2.1 Abschätzung der Strahlung an einer Oberfläche Die Photon Map stellt eine Repräsentation des eingestrahlten Energieflusses dar. Die Formel für reflektierte Strahlung Z Lr (x, ω) = fr (x, ω 0 , ω)Li (x, ω 0 )|Nx · ω 0 |dω 0 Ωx berechnet die Abstrahlung in einem Punkt x und in eine Raumrichtung ω aus dem Integral über die Hemisphäre Ωx aller einstrahlenden Raumrichtungen um x. Der Ausdruck unter dem Integral ergibt sich aus der einstrahlenden Energie Li je festem Raumwinkel ω 0 , die von der BRDF fr umgelenkt und mit dem Einstrahlwinkel |Nx · ω 0 | gewichtet wird. Mit der Beziehung zwischen der Einstrahlung Li und dem hereinkommenden Photonenfluss Li (x, ω 0 ) = erhält man d2 Φi (x, ω 0 ) cos θi dωi0 dAi 4.2. PHOTONEN IM RENDERING PASS 79 Z fr (x, ω 0 , ω) Lr (x, ω) = Ωx d2 Φi (x, ω 0 ) dAi und daraus schätzt man jetzt die reflektierte Strahlung mit den n nächsten Photonen zum Punkt x ab. Jedes dieser Photonen hat dabei die Energie ∆Φp (ωp ) und es wird angenommen, dass es die Fläche in x trifft. Dazu dehnt man eine Kugel um x solange aus, bis sie n Photonen enthält. Lr (x, ω) ≈ n X fr (x, ωp , ω) p=1 ∆Φp (x, ωp ) ∆A Abbildung 4.6. Die nächsten n Photonenereignisse in der Nähe des Punktes x gehen in die Abschätzung ein. Bemerkung 4.4 Unter der Annahme, dass Oberflächen lokal eben sind, kann man sich auf die Projektion der Kugel in die Ebene, also einen Kreis beschränken. Damit ist ∆A = πr2 und r der Radius der Kugel. Daher gilt verkürzt: n 1 X fr (x, ωp , ω)∆Φp (x, ωp ) Lr (x, ω) ≈ 2 πr p=1 Mögliche Fehlerquellen oder die Beeinträchtigung der Genauigkeit hängen von (a) der Gesamtanzahl der Photonen in der Photon Map oder von (b) der Anzahl n der Photonen ab, die in die Abschätzung einbezogen werden. 80 KAPITEL 4. PHOTON MAPPING Zudem ist die Annahme, dass Oberflächen lokal eben sind, in Ecken und an scharfen Kanten einfach falsch. Hier werden Photonenereignisse an Wänden für die Berechnung des Bodens einbezogen und umgekehrt, was zu fehlerhaft weichen Kanten und Farbverläufen führt. Eine Abhilfe für all diese Fehlerquellen besteht über das Gesetz der großen Zahl: Je mehr Photonen in die Abschätzung einbezogen werden und je mehr Photonen in der Photon Map vorhanden sind, um so genauer ist das Ergebnis der Näherungsformel. Im Limes gilt sogar α bN c 1 X lim fr (x, ωp , ω)∆Φp (x, ωp ) = Lr (x, ω), N →∞ πr 2 p=1 α ∈]0, 1[ mit der Gesamtanzahl N Photonen in der Photon Map. Im Beweis geht ein, dass x lokal eine zweidimensionale Umgebung hat und die BRDF keine Diracsche Deltafunktion ist (das schließt den perfekten Spiegel aus). Die verschiedenen Grade von unendlich werden über N α kontrolliert, womit garantiert wird, dass die Gesamtanzahl der Photonen der Photon Map schneller gegen unendlich geht, als die Anzahl der in die Abschätzung einbezogenen. Insgesamt folgert man, dass man hinreichend gute Ergebnisse erzielen kann, wenn man nur genügend Photonen benutzt. Bemerkung 4.5 Vergleicht man die Fehlerquellen mit denen aus der Radiosityberechnung (siehe voriges Kapitel), so fällt auf, dass es in finite Elementmethoden komplizierter ist, hinreichende Genauigkeit zu erzielen. Der Fehler hängt dann nämlich (1) von der Auflösung des Gitters, (2) von der Auflösung der gerichteten Strahlungsenergie und (3) von der Genauigkeit der Simulationsgleichungen ab. Bemerkung 4.6 Anstelle einer Kugel um x kann man auch ein Ellipsoid oder eine Box oder eine Scheibe nehmen, um die Photonen für die Abschätzung zu finden. Dadurch kann man zum einen den Suchalgorithmus beschleunigen, zum anderen erzielt man bessere Ergebnisse in Ecken und Kanten. Allerdings muss ∆A an die neue Geometrie angepasst werden und man verliert die Vorteile der Kugelgeometrie, nämlich die einfache Distanzbestimmung und die einfache Projektion. 4.2.2 Filter für die Abschätzung Wenn die Anzahl der Photonen in der Photon Map zu niedrig ist, wird die Abschätzung an den Kanten verschwommen. Das ist durchaus manchmal wünschenswert, da es weniger sterile Computerbilder generiert, aber bei Kaustiken mit scharfen Abgrenzungen ist es unerwünscht. Eine Abhilfe besteht im Einsatz von Filtern, um näher am Auswertungspunkt x liegende Photonen stärker zu wichten. Da Photonen auf Oberflächen registriert werden, benötigt man 2D-Filter, wie sie aus der Bildverarbeitung bekannt sind. 4.2. PHOTONEN IM RENDERING PASS 81 Beim Cone-Filter wird jedes Photon in der Abschätzung mit einem Gewicht wpc = 1 − dp kr multipliziert, wobei dp die Distanz zwischen dem Punkt x und dem Photonenereignis p ist. Der Parameter k ≥ 1 stellt eine charakteristische Filterkonstante und r eine maximale Entfernung dar. Aus 2 im Nenner der Abschätzung: der 2D-Verteilung ergibt sich ein Normalisierungsfaktor 1 − 3k Pn Lr (x, ω) ≈ p=1 fr (x, ωp , ω)∆Φp (x, ωp )wpc (1 − 2 )πr2 3k Die Wichtungsfunktion wpg des Gauß-Filters schreibt sich mit den gleichen Termen aber etwas komplizierter, nämlich wpg = α 1 − −β d2 p 2r 2 1−e , 1 − e−β wobei die Parameter α, β beispielsweise die Werte α = 0.918 und β = 1.953 annehmen können. Dieser Filter ist bereits normalisiert und ergibt die Abschätzung Lr (x, ω) ≈ n X fr (x, ωp , ω)∆Φp (x, ωp )wpg . p=1 Der Variationsansatz (Differential checking) hat sich speziell bei Kaustiken bewährt. Er beruht auf der Beobachtung, dass sich das Monotonieverhalten der Helligkeit je nach Ort x nahe einer Kante (der Kaustik) ändert, wenn man den Radius vergrößert und damit die Anzahl der Photonen erhöht, die in die Abschätzung einbezogen werden: x außerhalb der Kaustik → x innerhalb der Kaustik → monoton wachsend monoton fallend Der Grund liegt für einen Punkt außerhalb der Kaustik in einer unproportional erhöhten Anzahl Photonen beim Eintritt des Radius in den Bereich der Kaustik. Umgekehrt wird für einen Punkt innerhalb der Kaustik die Anzahl der Photonen bei einem Austritt des Radius aus dem Bereich der Kaustik unproportional erniedrigt. 82 KAPITEL 4. PHOTON MAPPING Abbildung 4.7. Das bekannte Cognacglas von Henrik Wann Jensen besteht aus 12000 Dreiecken, die kaustische Photon Map besteht aus 200000 Photonen und 40 Photonen wurden in der Abschätzung verwendet. Auf Basis dieser Beobachtung bricht man das Vergrößern des Radius (= Einbeziehung weiterer Photonen in die Abschätzung) ab und nimmt lieber erhöhtes Rauschen im Grenzbereich der Kanten/Kaustik in Kauf. 4.2.3 Strahlungsabschätzung im Volumenfall Nebel oder Rauch brechen das Licht je nach Dichte in ganz unterschiedlicher Weise. Hierdurch wird erst der Lichtkegel auch im Raum sichtbar, der sich sonst nur an einer 2D-Oberfläche zeigt. Der Qualm einer Zigarette in einem Spotlight oder Bodennebel im Autoscheinwerfer benötigen daher 3D Berechnungen mit sogenannten Participating media. Dazu muss zunächst die Gleichung für die Strahlungsabschätzung abgeändert werden. 4.2. PHOTONEN IM RENDERING PASS 83 Abbildung 4.8. Diese Berechnung der Cornell Box mit Nebel benötigte 100000 Photonen in der globalen Photon Map, 150000 Photonen in der Volumenmap und 44 Minuten für den Renderprozess. Z Lins (x, ω) = f (x, ω 0 , ω)L(x, ω 0 )dω 0 ZΩ d2 Φ(x, ω 0 ) dω 0 f (x, ω 0 , ω) 0 dV σ (x) dω s Ω Z d2 Φ(x, ω 0 ) 1 f (x, ω 0 , ω) = σs (x) Ω dV n ∆Φp (x, ωp0 ) 1 X ≈ f (x, ωp0 , ω) 4 σs (x) p=1 πr3 3 = Dabei bezeichnet Lins (x, ω) die in die Umgebung gestreute (in-scattered) Abstrahlung und σs (x) den Streukoeffizienten, der anstelle des Produkts aus Einfallswinkels und abstrahlender Fläche im 2D-Oberflächenfall in die Gleichung eingeht. Der Rechenaufwand, der beim Rendern mit einer solchen Volumenabschätzung nötig wird, ist extrem groß. Daher versucht man ihn nach Möglichkeit zu vermeiden und nur für spezielle Effekte einzusetzen. 4.2.4 Auffinden der n nächsten Photonen Um eine Photon Map effizient auszuwerten, sind effektive Strategien nötig: 84 KAPITEL 4. PHOTON MAPPING • Durchsuchen von kd-trees (k-dimensionale Bäume) • Balancieren von kd-trees über Median (= Zentralwert) Ansatz • max-heap (oder priority queue) Ansatz: Das am weitesten entfernte Photon wird am ehesten wieder herausgeschmissen, wenn der max-heap erreicht ist. Bemerkung 4.7 Es empfiehlt sich hierbei immer mit quadrierten Distanzen zu rechnen, das erspart teures Wurzelziehen. Außerdem kann man den maximal nötigen Suchradius nach oben abschätzen. Wenn man sich einen Schwellwert Lt für die Abstrahlung vorgibt, erhält man 1 rm = π r n Pmax Lt für den ebenen Fall und r rm = 3 3 n Pmax . 16 π 2 σ Lt im Fall isotrop streuender Volumenelemente. 4.2.5 Auswertung der Strahlungsabschätzung: Rendering Das Photon Mapping ist eine Erweiterung des Raytracing. Daher wird für das eigentliche Rendern ein verteiltes Raytracing (Distributed Raytracing) vorgenommen. Die Pixelstrahlung ist dabei das arithmetische Mittel über verschiedene Einzelabschätzungen. Bemerkung 4.8 Die Photon Map ist unabhängig von der Betrachterposition! Eine einmal berechnete Photon Map kann für das Rendern einer Szene aus (a) jeder möglichen Blickrichtung hergenommen werden und kann (b) für verschiedenste Rendertechniken benutzt werden, z.B. für die Berechnung von Radiositywerten in Gitterpunkten. Allgemein gilt, dass für jedes Pixel vom Auge des Betrachters ein Strahl durch das Pixel in die Szene verfolgt wird (sogenanntes backward raytracing). Die abstrahlende Energie wird hier mit dem Index o für outgoing bezeichnet. Dann ergibt sich Lo (x, ω) = Le (x, ω) + Lr (x, ω) 4.2. PHOTONEN IM RENDERING PASS 85 die von einem Pixel ausgehende Strahlung als Summe der emittierten Le (x, ω) und der reflektierten Lr (x, ω) Strahlung. Die reflektierte Strahlung kann jetzt nach der bewährten Formel als Integral aus der einstrahlenden Energie berechnet werden: Z Lr (x, ω) = fr (x, ω 0 , ω)Li (x, ω 0 )|Nx · ω 0 |dω 0 Ωx Die BRDF fr wird dabei in einen spekularen und einen diffusen Anteil zerlegt. fr (x, ω 0 , ω) = fr,s (x, ω 0 , ω) + fr,d (x, ω 0 , ω) Auch die Einstrahlung Li = Li,l +Li,c +Li,d wird in drei Terme aufgespalten, die direkte Beleuchtung Li,l (x, ω) durch eine Lichtquelle, die kaustische Beleuchtung Li,c (x, ω), also indirekte Beleuchtung durch spiegelnde Reflexion, und die indirekte Beleuchtung Li,d (x, ω), bei der wenigstens einmal diffus reflektierte Photonenereignisse berücksichtigt werden. In der Kombination ergeben sich vier Terme: Z fr (x, ω 0 , ω)Li (x, ω 0 )cos θi dω 0 Lr (x, ω) = Ωx Z fr (x, ω 0 , ω)Li,l (x, ω 0 )cos θi dω 0 = (I) Ωx Z + fr,s (x, ω 0 , ω)(Li,c (x, ω 0 ) + Li,d (x, ω 0 ))cos θi dω 0 (II) Ωx Z + fr,d (x, ω 0 , ω)Li,c (x, ω 0 )cos θi dω 0 (III) Ωx Z + fr,d (x, ω 0 , ω)Li,d (x, ω 0 )cos θi dω 0 (IV) Ωx Der erste Term (I) besteht aus der direkten Illumination. Hier geht der direkte Anteil der Lichtquelle ein. Das sogenannte Raycasting, das nur einen einfachen Strahl von der Lichtquelle auf den betrachteten Punkt wirft, bestimmt die Lokalfarbe an dieser Stelle. Verdeckt ein anderes Objekt diese Lichtquelle aus Sicht dieses Punktes, wird dieser Punkt nicht direkt von dieser Lichtquelle erreicht und der Term entfällt. Das motiviert das Aussenden sogenannter Schattenstrahlen Shadowcasting von einem Punkt in Richtung sämtlicher Lichtquellen. Treffen sie auf ein Objekt, das nicht die Lichtquelle ist, erhalten diese Punkte kein Licht von dieser Quelle. Diesen Ansatz kann man weiter verfolgen und Shadowphotons berechnen. Der zweite Term (II) stellt das spekulare oder Glanzlicht dar. Hier wird das Photon Mapping NICHT eingesetzt!!! Dieses Integral wird mit den Standard Monte Carlo Methoden des Raytracing berechnet. 86 KAPITEL 4. PHOTON MAPPING Abbildung 4.9. Skizzen zu den Strahlen des Raytracing und der Auswertung der Photon Map an diesen Stellen, links die direkte Beleuchtung/Verdeckung (I), rechts die spiegelnde Reflexion OHNE Photon Mapping (II). Die Funktion fr,s erzeugt dabei einen engen Peak in Spiegelrichtung. Der dritte Term (III) betrifft das kaustische Integral. Wenn die Anzahl der Photonen in der Caustic map hoch ist, erzielt man hiermit eine gute Qualität der Abschätzung. Der vierte Term (IV) berechnet sich aus der vielfach diffusen Reflexion. Eine ungefähre Abschätzung erfolgt mit der globalen Photon Map, eine genauere Abschätzung bezieht Monte Carlo Methoden des Raytracing ein. Abbildung 4.10. Links die Skizze für das kaustische Integral (III), rechts das globale diffuse Photon Mapping (IV). 4.3 Übungsaufgaben Aufgabe 4.1 Russisches Roulette Berechnen Sie für eine einfache Szene mit einer Glaskugel und einer Lichtquelle in einer Raumecke (z.B. die Cornell Box) eine (globale) Photon Map, wobei Sie einzig die einzelnen Photonenereignisse mit ihren Farbwerten als Punkte in einem OpenGL Programm darstellen. 4.3. ÜBUNGSAUFGABEN 87 Aufgabe 4.2 BRDF Eine Bidirectional Reflectance Distribution Function (BRDF) ist die Funktion fr (θi , φi ; θr , φr ), die sich aus dem Quotienten der reflektierten differentiellen Strahldichte dLr in Betrachterrichtung und der differentiellen Bestrahlungsstärke dEi aus der Lichtrichtung ergibt. Sie kann mit Gonioreflektometern gemessen oder aufgrund ideller Annahmen für ein Material modelliert werden. (a) Ein Lambert-Strahler ist das Modell für einen diffus reflektierenden Körper und zeichnet sich durch folgende Eigenschaften aus: 1. Der Körper absorbiert kein Licht. Das auf den Körper einfallende Licht wird komplett reflektiert. 2. Der Körper erscheint von allen Betrachtungsrichtungen aus gleich hell. Leiten Sie daraus die BRDF eines Lambert-Strahlers her. (b) Das Ward Modell von 1992 sieht für isotrope spiegelnde Reflexion die BRDF tan2 δ − 1 e α2 fiso (θi , φi ; θr , φr ) = √ cosθi cosθr 4πα2 vor. Anders als das Phong-Modell ist es physikalisch gültig aber trotzdem einfach. Dabei ist α der Rauhigkeitskoeffizient der isotropen Fläche, δ der Winkel zwischen der Normale N und dem HalfwayVektor H. Leiten Sie daraus eine Formel für faniso (θi , φi ; θr , φr ) mit Rauhigkeitskoeffizienten αx und αy ab. (c) Die Faktorisierung einer BRDF lautet fiso (θi , φi ; θr , φr ) = n X pj (θi , φi )qj (θr , φr ) j=1 Welche Vorteile kann man daraus ziehen? Hinweis: Denken Sie an GPU-Programmierung und Environment-Mapping. 88 KAPITEL 4. PHOTON MAPPING Aufgabe 4.3 Maximalradius Bestimmen Sie für die Rendergleichung mit Photon Mapping einen maximalen Radius rm . Schätzen Sie dazu die Formel für Lr (x, ω) mit der BRDF eines perfekt diffusen Strahlers und bekannten Maximalwerten (wie maximaler Photonenenergie) sowie einem vorgegebenen Schwellwert von Lt (x, ω) ab. (a) Wie lautet die Formel für rm ? (b) Es sei σ(x) das Streuereignis in einem beteiligten Medium (participating medium). Wie lautet eine entsprechende Formel für rm bei Streuung an einem Volumen?