Photon Mapping
Transcription
Photon Mapping
Photon Mapping 9. Vorlesung Photorealistische Computergrafik Thorsten Grosch Einleitung Bisher – Lösung der Rendering Equation durch Path Tracing Alle Lichteffekte sind möglich Aber: Ab S Sehr h llangsam und d verrauscht ht Heute – Photon Ph t Mapping M i Auch alle wichtigen Lichteffekte Schneller für spezielle Effekte wie zz.B. B Kaustiken T. Grosch - 2 - Ein neuer Ansatz: Photon Mapping Photon Mapping wurde 1993/94 von Henrik Wann Jensen entwickelt Dieser Ansatz ermöglicht die effiziente Berechnung aller wichtigen visuellen globalen Beleuchtungseffekte, z.B. – spekulare Reflektionen, diffuse Reflexion (color bleeding) bleeding), transluzente Materialien Materialien, Volumen Simulation, Dispersion und insbesondere auch sog. Kaustiken geometrieunabhängig Basiert auf Particle Tracing [Arvo 1988] T. Grosch - 3 - Die Idee: two-pass two pass Algorithmus In einem ersten Schritt werden von allen Lichtemittern Photonen ausgesendet (sogenanntes Particle Tracing) Auf diffusen Oberflächen werden “Treffer” Treffer gespeichert und falls das Photon nicht absorbiert wird, wird es weiterverfolgt weiterverfolgt. In einem zweiten Schritt wird die Szene durch einen Raytracer gerendert, wobei an entsprechenden Stellen kein p g oder Monte Carlo Sampling ähnliches durchgeführt wird, sondern die Photon Map g g wird abgefragt Zur Bildentstehung gehen wir also aus zwei Richtungen vor: vom Auge (Ray Tracing) und von den Lichtquellen (Particle Tracing) T. Grosch - 4 - First Pass Aufbau der Photon Map T. Grosch - 5 - Sampling der Lichtquelle Zunächst einmal müssen die Lichtquellen Photonen emittieren itti Wenn eine Lichtquelle N Photonen entsendet, dann trägt jedes Photon genau den 1/N Teil des Lichtstroms An dieser Stelle muss man sich eine Sampling Strategie für Position und Richtung der Photonen überlegen überlegen. Die Basis für die Sampling-Strategie ist die Verteilung des Lichtstroms über die Raumwinkel – … also die Lichtstärkeverteilung T. Grosch - 6 - LVK-Sampling LVK Sampling Bsp : Lambert Emitter Bsp.: dΦ I= dω Lichtstärke ist definiert als Lichtstrom pro Raumwinkel In den Halbraum werden N Photonen verschossen, die alle den gleichen Lichtstrom Φ/N transportieren sollen Um das zu erreichen, erreichen müssen in die Raumwinkel mit hohen Lichtstärken auch entsprechend mehr Photonen verschickt werden. Die LVK muss daher als Dichtefunktion verwendet werden. Φ = 1000lm Alternative: – Man nimmt eine andere Dichte, dann müsste allerdings auch jedes Photon einen unterschiedlichen Lichtstrom transportieren (ineffizient) T. Grosch - 7 - Photonenverteilung Für einen (kleinen) Lambert Emitter ergibt sich etwa folgende Photonenverteilung – Anzahl Photonen pro Raumwinkel ~ cosθ Mehr Photonen in Richtung Normale Weniger Photonen in seitliche Richtungen Δφout ΔA Für andere Lichtquellen – Punktlicht: Zufällige Richtung – Spot: ~ (cosθ)^n T. Grosch - 8 - Bsp: p Flächige g Lichtquelle q Wir nehmen flächige Lichtquellen als Lambertstrahler an. Wir wählen zunächst eine zufällige Position auf der Lichtquelle Lichtquelle. ξ1 , ξ 2 ∈ [0,1] Danach wählen wir eine zufällige Richtung – Die Richtung lässt sich berechnen mit Hilfe der Phong-Dichte für n=1 ξ 3 , ξ 4 ∈ [0,1] ( θ = cos −1 1 − ξ 3 ϕ = 2πξ 4 ) x = sin i (θ ) ⋅ cos(ϕ ) y = cos(θ ) z = sin (θ ) ⋅ sin (ϕ ) I (θ ) = I 0 ⋅ cosθ ξ2 ξ1 Von Oben V der Von d S Seite it T. Grosch - 9 - Photon Scattering Trifft das Photon auf eine Oberfläche dann wird mit Hilfe Oberfläche, von russischem Roulette entschieden, wie es weitergeht. Ähnlich wie beim Path Path-Tracing Tracing wird nur ein Weg weiterverfolgt Diffuse Fläche: Spekulare Reflexion/Transmission: – das Photon wird in der entsprechenden Richtung weiterverfolgt und nicht abgespeichert Absorption – das Photon wird mit der aktuellen Position in der Photon-Map abgespeichert. – das Photon wird mit der aktuellen Position in der Photon-Map abgespeichert. – eine neue Richtung wird durch Importance Sampling (Dichte ähnlich der BDRF des Materials) zufällig erzeugt und ein (neues) Photon wird in diese Richtung versendet – Es wird nichts weiterverfolgt. Als Abbruch wird eine maximale Rekursionstiefe verwendet Diffus Spekular Spiegel T. Grosch - 10 - Beispiel Φ Material ist 50% diffus und 25% spiegelnd (also 25% absorbierend) – 50% der auftreffenden Ph t Photonen werden d gespeichert i h t und weiterverfolgt – 25% der auftreffenden Photonen werden – ohne Speicherung p g – reflektiert a d r d – 25% der auftreffenden Photonen werden absorbiert – Entscheidung über Russisches Roulette Beispiel: 4 Photonen mit Rekursionstiefe 2 Absorption (a), diffus (d) und spiegelnd (r). Die blauen Punkte sind Photonen, die in der Photon-Map mit jeweils 1/4Φ gespeichert werden. T. Grosch - 11 - Diffuse Reflexion Der Lichtstrom des Photons wird bei der Reflexion nicht verändert Mit Russischem Roulette wird entschieden, ob ein Photon reflektiert oder absorbiert wird z.B. ρ = 0.33 – Aus drei Photonen mit Δφ φ = 1 werden nicht drei Photonen mit Δφ´= 0.33 sondern nur ein Photon mit Δφ´= 1 Bei farbigen Oberflächen werden die Photonen nur „umgefärbt umgefärbt“ 1 ρ = ( ρ R + ρG + ρ B ) 3 ′ = ΔφRGB ρ RGB ΔφRGB ρ ′ = (3,0,0) – z.B ρ RGB = (1,0,0) ΔφRGB = (1,1,1) ρ = 13 ΔφRGB – Summe der RGB Komponenten von Δφ φ bleibt g gleich (falls vorher weiß) T. Grosch - 12 - Spekulare p Reflexion Der Grad der Reflexion ist abhängig vom Einfallswinkel des Lichts (z.B. Glas) und wird am besten mit Hilfe der F Fresnel l Gl Gleichungen i h d durch h den Brechungsindex automatisch berechnet. ρ|| = n2 cos θ1 − n1 cos θ 2 n2 cos θ1 + n1 cos θ 2 ρ⊥ = n1 cos θ1 − n2 cos θ 2 n2 cos θ1 + n1 cos θ 2 1 f r (θ ) = ⋅ (ρ||2 + ρ ⊥2 ) 2 Eine gute Approximation liefert Schlick: f r (θ ) ≈ f 0 + (1 − f 0 )(1 − cosθ ) 5 2 ⎛n −n ⎞ f0 = ⎜ 1 2 ⎟ ⎝ n1 + n2 ⎠ Üb R Über Russisches i h R Roulette l tt mit it fr wird entschieden, ob das Photon den gespiegelten oder den gebrochenen Pfad weiterverfolgt Das Photon wird nicht gespeichert Mit f r (θ ) 1 − f r (θ ) Auch hier wird der Lichtstrom unverändert gelassen, beim farbigem Glas kann man umfärben T. Grosch - 13 - Absorption Ein Photon speichert immer den einfallenden Lichtstrom Daher werden auch die absorbierten Photonen gespeichert Die Gewichtung mit der BRDF kommt später bei der Darstellung – Günstiger Gü ti für fü die di Darstellung D t ll ((siehe i h später) ät ) T. Grosch - 14 - Speicherung der Photonen In der Photon Map werden alle Photonen gespeichert Während des Photon Tracings werden nur diejenigen Photonen gespeichert, die auf diffuse Oberflächen treffen Zur Berechnung der Leuchtdichte an einem Punkt muß praktisch die “Dichte” Dichte der Photonen bestimmt werden – Daher werden Nachbarschaftsbeziehungen zwischen den Photonen benötigt. Eine effiziente Speicherung ist daher sehr wichtig! – Auch der Speicherplatzverbrauch sollte Berücksichtigung finden T. Grosch - 15 - Datenorganisation Wir haben zwei wichtige Anforderungen an die Datenstruktur Eine der besten Datenstrukturen für unsere Zwecke ist ein kd-Tree – Die n-nächstgelegenen Ph t Photonen müssen ü schnell h ll gefunden werden können – Ein bestimmtes Photon wird i D im Durchschnitt h h itt iin O(l O(log n)) gefunden – Sie muss speichereffizient sein – Die k nächsten werden dann in O(k+log n) gefunden! Übliche Datenstrukturen wie z B ein Octree sind nicht gut z.B. geeignet, da die Photonen hochgradig ungleichmäßig verteilt sind T. Grosch - 16 - kd Tree Im Prinzip ist dies ein binärer Suchbaum in k Dimensionen Die Erzeugung eines solchen Baumes ist relativ einfach – Man sucht die Raumachse mit der größten Ausdehnung – Entlang dieser Achse werden alle Photonen sortiert – Das “mittlere” Photon wird ein neuer Knoten im Baum – Alle “kleineren Photonen” kommen in den linken Teilbaum, alle größeren entsprechend in der rechten – Dieses Verfahren wird nun rekursiv auf beide Teilbäume angewendet D Der so erzeugte t Baum B ist i t nicht i ht vollständig, aber die Höhe ist log(n) T. Grosch - 17 - Kd Tree Beispiel 1 1. Achse mit maximaler Ausdehnung finden 2. Median finden 3. Datenmenge aufsplitten 4 Rekursiv die Operationen 1 bis 3 mit 4. den beiden neuen Teilmengen durchführen 6 2 3 4 2 5 6 3 X-Achse 5 1 4 Das alles funktioniert fast genauso im k-dimensionalen Raum T. Grosch - 18 - Kd Tree für Photonen in Cornell Box n Photonen Top n/4 Photonen Top-Left-Left n/2 Photonen Top-Left n/8 Photonen Top-Left-Left-Right T. Grosch - 19 - Speicherplatz Ein Photon wird repräsentiert durch float position[3] // Position unsigned char theta, phi // Einfallsrichtung* float power[3] // Lichtstrom short plane // supp. plane kd – => insgesamt 28 byte pro Photon Die Winkel Theta and Phi werden mit Hilfe einer look-up table komprimiert gespeichert Keine Child-Pointer, da kd Tree als Heap organisiert werden kann (siehe HH.W. W Jensen: Realistic Image Synthesis using Photon Mapping) (* für nicht-diffuse Materialien und Ausschluß „falscher“ Photonen (siehe Bias Folie)) T. Grosch - 20 - Zwei sind besser als eine Es ist sehr sinnvoll zwei getrennte Photon Maps zu verwenden: d eine i globale l b l Photon Ph t Map M und d eine i Caustic C ti Map – Die globale Photon Map enthält relativ wenige Photonen und wird so erzeugt wie beschrieben – Die Caustic Map allerdings sollte extrem viele Photonen enthalten, aber nur diejenigen, deren Pfad die Form LS*D hat, also mindestens einmal spekular reflektiert wurden Zusätzlich sollten diese Photonen auch nur in Richtung spekularer Flächen versendet werden werden, um Rechenzeit zu sparen – T. Grosch - 21 - Caustic Map Caustic-Map Φ Wenn hier von „spiegelnd“ gesprochen wird wird, sind damit immer auch die transparenten Objekte gemeint. r Eine Möglichkeit: Rejection Sampling r Glaskugel r Da jedes Photon den gleichen Lichtstrom repräsentiert, werden alle verworfen (aber mitgezählt) die nicht auf ein mitgezählt), spiegelndes Objekt treffen. r d Caustic-Photonen werden ebenfalls auf diffusen Objekten abgespeichert. b i h t T. Grosch - 22 - Caustic-Map, p, Alternativen Hemi-Cube: man projiziert die Welt auf einen Hemi Hemi-Cube Cube um die Lichtquelle und erkennt damit die R Raumwinkelbereiche, i k lb i h iin d denen spiegelnde Objekte zu finden sind. Die Photonen erhalten dann nur den anteiligen Lichtstrom angenommen Importance: angenommen, man möchte 10mal mehr Photonen in Caustic-Maps, als in der Global Map Map. – Generiere viele Photonen. – W Werden d diese di üb über spiegelnde Objekte transportiert, dann werden sie in der Caustic-Map eingetragen und mitgezählt. g – Werden diese nicht über spiegelnde Objekte transportiert werden sie transportiert, abhängig von der Anzahl der Photonen in der C Caustic-Map ti M verworfen, f so dass nur 1/10 in der Global Map gespeichert werden. T. Grosch - 23 - Second Pass Rendern des Bildes Auswertung der Photon Map T. Grosch - 24 - Radiance Estimate Durch die Photonen auf einer Oberfläche können wir die einfallende Beleuchtungsstärke - bzw. gewichtet i ht t mit it der d BRDF di die ausfallende Leuchtdichte schätzen Die Photonen haben alle diskrete Lichtstromwerte Hierzu wird um den untersuchten Punkt eine Kugel mit Radius r aufgespannt und alle Photonen eingesammelt Oder: die Anzahl der Photonen N wird vorgegeben und der dazugehörige g g Radius r ermittelt. Sie sind über die Flächen unterschiedlich dicht verteilt. 1 N Lr (x,ω o ) ≈ 2 ∑ f r (x,ω p ,ω o )Δφ p (x,ω p ) πr p=1 T. Grosch - 25 - Radiance Estimate Um die reflektierte Leuchtdichte zu ermitteln, müssten wir folgende Gleichung lösen Lr (x,ω o ) = ∫ f r (x,ω i ,ω o )Li (x,ω i )cos θdω i Ω Dies wird mit Hilfe der Photon Map bestimmt durch: 1 N Lr (x,ω o ) ≈ 2 ∑ f r (x,ω p ,ω o )Δφ p (x,ω p ) πr p=1 Zu einem beliebigen Punkt x suchen wir die maximal n nächsten Photonen (und damit den Radius r) Der Lichtstrom aller gefundener Photonen wird aufsummiert und durch die Fläche in der sie liegen geteilt T. Grosch - 26 - Radiance Estimate Nur direktes Licht Licht, ca. 30.000 Photonen 1 diffuse Reflexion Reflexion, ca. 40.000 Photonen 2 diffuse Reflexionen Reflexionen, ca. 45.000 Photonen T. Grosch - 27 - Suchradius r=1 r=2 Rauschen r=4 r=8 Detailverlust T. Grosch - 28 - Darstellung des Bildes Es wäre möglich die Photon Map direkt zur Darstellung zu verwenden, d d das würde ü d aber b sehr h flfleckige/verrauschte ki / ht Bilder liefern. Wozu dann eigentlich die Photonen? – – Wir verwenden Wi d die di Photon Ph t Map M für fü Kaustiken K tik und d fü für di die Approximation des (einfallenden) indirektens Lichts Für das direkte Licht und Spiegelungen greifen wir auf Path-Tracing oder Final Gathering zurück T. Grosch - 29 - Die Rendering Equation Eigentlich wollen wir diese Gleichung lösen v Lr ( x,ω ) = v v v v v v f ( x , ω ' , ω ) ⋅ L ( x , ω ') ⋅ (ω'on ) ⋅ dω' r i ∫ 2π wir können diese in drei Teile trennen, die wir einzeln lösen können (direktes Licht) = v v v v v v f ( x , ω ' , ω ) ⋅ L ( x , ω ') ⋅ (ω'on ) ⋅ dω' i ,l ∫r 2π (caustics) v v v v v v + ∫ f r ( x,ω' ,ω ) ⋅ Li ,c ( x,ω') ⋅ (ω'on ) ⋅ dω' 2π ( lt diff (mult. diffus)) v v v v v v + ∫ f r ( x,ω' ,ω ) ⋅ Li ,d ( x,ω') ⋅ (ω'on ) ⋅ dω' r Li ,l ( x, ω ') r Li ,c ( x, ω ') r Li ,d ( x, ω ') 2π Direktes Licht der Lichtquelle Caustic – indirekte Beleuchtung der Lichtquellen über Spiegelung/Transmission Indirekte Beleuchtung der Lichtquellen, mindestens einmal diffus reflektiert. T. Grosch - 30 - Rendern aber wie? Es gibt sehr viele Möglichkeiten wie man das Bild rendern d kkann, aber b eine i d der effizientesten ffi i t t iistt es einen i leicht modifizierten Path Tracer zu verwenden. Die Vorgehensweise ist zu Beginn ganz “normal” “normal”. Wir schießen n Strahlen durch jedes Pixel und mitteln danach die Ergebnisse Wir unterscheiden fortan zwischen einer exakten und einer ungefähren g Berechnung. g Eine ungefähre g Berechnung reicht immer dann, wenn der aktuelle Strahl nicht mehr viel zum Gesamtergebnis beiträgt! T. Grosch - 31 - Wie wird berechnet? E kt Exakt A Approximation i ti Direktes Licht Monte Carlo Global Map Spekular Monte Carlo Monte Carlo Kaustik Caustic Map p Global Map p Mehrfach diff diffus Monte Carlo Global Map T. Grosch - 32 - Schnellste Variante Durch das Pixel wird ein Strahl verschossen Die globale Photon Map wird ausgewertet Falls eine Caustic Map verwendet wird – Die Ca Caustic stic Map wird ird a ausgewertet sge ertet und addiert Keine rekursiven Aufrufe oder Strahlen (nur bei nicht-diffusen Flächen)) Schnelles Preview T. Grosch - 33 - Beispiel p ((Path Tracing) g) Durch das Pixel werden viele Strahlen verschossen Für jeden Schnittpunkt wird: – Das direkte Licht berechnet ((z.B. 1 Sample) – Die Caustic Map ausgewertet ein transparentes Objekt beim Schattenfühler muss dann als Schatten interpretiert werden – Per Russischem Roulette diffus (importance sampl.) oder spiegelnd weiterverfolgt Beim indirekten Licht werden dann die Photon Maps ausgewertet T. Grosch - 34 - Beispiel: Final Gathering Durch das Pixel werden wenige Strahlen verschossen Für jeden Schnittpunkt wird: – Das direkte Licht berechnet (viele Samples) – Die Caustic Map ausgewertet – Der Halbraum durch viele St hl abgetastet, Strahlen b t t t wobei b i die di Photon Maps an den Trefferpunkten ausgewertet werden. – Spiegelung wird rekursiv weiterverfolgt – Alle Anteile werden summiert und gem. der BRDF gewichtet. T. Grosch - 35 - Vergleich mit/ohne Final Gather Direkte Visualisierung der Photon Map Map, einige Sekunden Final Gathering mit 150 Strahlen Strahlen, mehrere Minuten T. Grosch - 36 - Direkte Visualisierung mit Caustic Map Kein Final Gathering, aber viele Ph t Photonen, daher d h Fl Flecken k nicht i ht mehr so deutlich sichtbar Neues Problem: Fehler an den Ecken T. Grosch - 37 - Verbesserungsmöglichkeiten Durch das Verwenden einer Kugel zum Einsammeln der Photonen werden an den Ecken viele “ungültige Photonen” mitgenommen. – Die Leuchtdichte wird somit evtl. überschätzt Stattdessen kann man die Kugel g der Normalen stauchen entlang um die Anzahl der falschen Photonen zu reduzieren – Jetzt bekommt man nur “gültige” gültige Photonen – Allerdings überschätzt man die Fläche, auf der Photonen liegen – Kanten können somit zu dunkel werden T. Grosch - 38 - Bias Typen Proximity • Topological Occlusion Proximity Bias: Details werden gefiltert • • • • Boundary Verbesserung: Filterung mit höherem Gewicht für nähere Photonen Boundary Bias: Fläche wird überschätzt Æ Kanten werden zu dunkel Topological Bias: Fläche wird unterschätzt Occlusion Bias: Light leaks • Nur Photonen mit ähnlichen Normalen mit einbeziehen; Photonen die in Richtung Oberflächennormale fliegen, fliegen können ausgeschlossen werden Bias - Unbias Da man beim Radiance Estimate praktisch immer eine Fläche anstelle eines Punkts betrachtet erhält man nicht die korrekte Leuchtdichte sondern eine gefilterte Version (Tiefpass) Æ Bias Bei Verwendung vieler Photonen kann der Suchradius immer kleiner gewählt werden, so daß die Simulation theoretisch gegen die korrekte Leuchtdichte konvergiert (unbiased) Diese Lösung ist aber praktisch kaum durchführbar durchführbar, da aufgrund des begrenzten Speichers nicht beliebig viele Photonen eingesetzt werden können Ein Lösungsansatz ist das sog. Progressive Photon Mapping [Hachisuka et al. 2008] – hier wird nur der Radiance Estimate pro Pixel gespeichert und nicht alle Photonen – Der Suchradius pro Pixel wird hier immer kleiner und nur Photonen innerhalb des Suchradius werden beibehalten,, Photonen außerhalb werden gelöschtÆDarstellung mit beliebig vielen Photonen simulieren T. Grosch - 40 - Progressive Photon Mapping Pro Pixel speichern: N, x, R 1. Simulation: N Photonen (danach Photonen löschen) 2. Simulation: M Photonen (danach Photonen löschen) Insgesamt N+M Photonen – Weniger Rauschen, aber gleicher Radius Annahme – Photonen sind gleichverteilt in Kreis Berechne kleineren Radius, sodass die Anzahl der Ph t Photonen immer i noch h größer öß iistt als l N [Hachisuka et al. 2008] – Mehr Photonen in kleinerem Radius – Beliebig oft wiederholen T. Grosch - 41 - Beschleunigungstechniken In der hier vorgestellten Verfahrensweise würde die Berechnung trotzdem noch recht lange dauern Einige Beschleunigungstechniken sind dringend erforderlich – Irradiance Caching [Ward 1988][Heckbert 1992][Krivanek 2005] – Visual Importance [Peter & Pietrek 1998][Suyken & Willems 2000] – Indirektes Licht zwischen Pixeln interpolieren Nur sichtbare Bereiche genauer simulieren Æ Importons Shadow Photons [Jensen 1995] Negative Photonen in Schattenbereichen (Schattenfühler sparen) T. Grosch - 42 - Beschleunigungstechniken – Parallelisierung [Kato et al. 2002] Photonen sind unabhängig voneinander (die Pixel ebenfalls) Kilauea – – Paralleler Photon Mapper (MPI) Fi l G Final Gathering, th i IIrradiance di C Caching, hi … Final Fantasy T. Grosch - 43 - Beschleunigungstechniken – Precomputed Irradiance [Jensen & Christensen 2001] – Radiance R di E Estimate ti t bei b i Ph Photon t speichern i h Æ schnelleres h ll Fi Finall Gathering Irradiance Atlas [Christensen et al. 2004] Octree mit Radiance Estimates T. Grosch - 44 - Beispiele Photon Mapping T. Grosch - 45 - Tageslicht T. Grosch - 46 - Glas Animation T. Grosch - 47 - Kommerzielle Produkte Final Render Splutterfish Vi t Li ht VirtuaLight T. Grosch - 48 - Kommerzielle Produkte Volume Photon Map Mental Ray T. Grosch - 49 - Abschließende Bewertung Photon Mapping ermöglicht komplizierte Effekte wie K Kaustiken tik und d transparente t t Materialien M t i li qualitativ lit ti hochwertig und schnell zu berechnen Photon Mapping ist relativ einfach zu implementieren da ein vorhandener Ray- oder Pathtracer erweitert werden kann Photon Mapping liefert bessere Ergebnisse und diese schneller als ein Path Tracer – Dafür Bias durch Radiance Estimate Photon Mapping wird zunehmend von kommerziellen Produkten verwendet. – Auch PovRayy beherrscht Photon Mapping pp g T. Grosch - 50 -