29.04.2015 Aufrufe

Photon Mapping Zusammenfassung

Photon Mapping Zusammenfassung

Photon Mapping Zusammenfassung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Photon</strong> <strong>Mapping</strong><br />

Thorsten Grosch<br />

Einleitung<br />

• Lichtsimulationsverfahren<br />

– Ray Tracing [Whitted 1980]<br />

• Nur Spiegel & Glas<br />

– Radiosity [Goral 1984]<br />

• Nur diffuse Materialien<br />

– Path Tracing [Kajiya 1986]<br />

• Alle Materialien, aber langsam &<br />

verrauscht<br />

– <strong>Photon</strong> <strong>Mapping</strong> [Jensen 1994]<br />

• Auch alle wichtigen Lichteffekte<br />

• Schneller für spezielle Effekte wie<br />

z.B. Kaustiken<br />

T. Grosch - 2 -<br />

1


Was sieht das Auge ?<br />

• Licht = elektromagnetische<br />

Welle<br />

• Lichtquelle versendet<br />

permanent kleine Wellenzüge<br />

(<strong>Photon</strong>en)<br />

• Die <strong>Photon</strong>en werden<br />

(mehrfach) auf den Oberflächen<br />

der Objekte reflektiert und<br />

nehmen dabei die Objektfarbe<br />

an<br />

• Gelangt ein <strong>Photon</strong> ins Auge,<br />

so wird idein Rezeptor auf fder<br />

Netzhaut aktiviert<br />

• Dieses Signal wird ans Gehirn<br />

weitergeleitet Das Bild<br />

entsteht<br />

Lichtmenge Q<br />

• Vorstellung<br />

– Eine Lichtquelle sendet<br />

permanent <strong>Photon</strong>en in alle<br />

Richtungen aus<br />

– Jedes <strong>Photon</strong> hat die Energie<br />

Ep<br />

• h: Planck Konstante h = 6.626⋅10<br />

• c: Lichtgeschwindigkeit<br />

– Die Lichtmenge Q ist die<br />

Summe aller <strong>Photon</strong>en-<br />

Energien<br />

• Selten verwendete<br />

(zeitabhängige) Größe…<br />

– Wird aber zur Definition<br />

wichtigerer Größen benötigt<br />

−34<br />

Js<br />

E p<br />

= h⋅<br />

f<br />

Einheit der Lichtmenge ist<br />

Lumen · Sekunde (lm · s)<br />

h⋅c<br />

=<br />

λ<br />

2


Lichtstrom φ<br />

• Interessanter ist, wieviele<br />

<strong>Photon</strong>en pro Zeit von der<br />

Lichtquelle emittiert werden<br />

• Diese Größe wird als<br />

Lichtstrom bezeichnet<br />

• Lichtstrom = Lichtmenge pro<br />

Zeit<br />

– Summe der <strong>Photon</strong>en-<br />

Energien, die pro Zeitraum Δt<br />

emittiert werden<br />

Δt<br />

ΔQ<br />

φ =<br />

ΔQ<br />

Δt<br />

Die Einheit des Lichtstroms<br />

ist das Lumen (lm)<br />

Radiometrische Einheit: Watt<br />

Raumwinkel ω<br />

• Der Raumwinkel ω ist eine<br />

räumliche Erweiterung des<br />

zweidimensionalen Winkels im<br />

Bogenmaß. Er ist definiert durch<br />

das Verhältnis der bedeckten<br />

Kugeloberfläche (Kugelkalotte)<br />

zum Quadrat des Kugelradius.<br />

– Größe der „Tüte“<br />

A k<br />

2<br />

ω =<br />

r<br />

• Hilfsgröße zur Definition<br />

richtungsabhängiger<br />

Lichtverteilungen<br />

Die Einheit des<br />

Raumwinkels ist<br />

Steradiant (sr)<br />

3


Winkel, Raumwinkel<br />

Radiant<br />

Steradiant<br />

Winkel: Bogenlänge auf<br />

Raumwinkel: Fläche auf<br />

Einheitskreis<br />

Einheitskugel<br />

Beispiel: Winkel Halbkreis = π,<br />

voller Kreis = 2π<br />

Beispiel: Raumwinkel Halbkugel = 2π sr,<br />

volle Kugel = 4π sr<br />

Lichtstärke I<br />

• Lichtquellen geben den<br />

Lichtstrom typischerweise nicht<br />

gleichmäßig in alle Richtungen<br />

ab<br />

– z.B. Spotlicht<br />

• Um festzulegen, wieviel<br />

Lichtstrom in eine „Richtung“<br />

fliegt, wird die Lichtstärke als<br />

Lichtstrom pro Raumwinkel<br />

definiert<br />

• Vorstellung<br />

– Wieviele <strong>Photon</strong>en sind in der<br />

Tüte<br />

I = 0<br />

Δω<br />

Δφ<br />

Die Einheit der Lichtstärke ist die<br />

Candela (cd)<br />

1 cd = 1 lm / sr<br />

Δφ<br />

I =<br />

Δω<br />

4


Beleuchtungsstärke E<br />

• Wieviel Licht kommt beim<br />

Empfänger an<br />

Δ<br />

in<br />

E = φ<br />

• Definition:<br />

ΔAA<br />

– Beleuchtungsstärke =<br />

Δφ in<br />

Ankommender Lichtstrom φ pro<br />

Empfängerfläche ΔA<br />

• Der Lichtstrom kommt dabei<br />

aus allen Richtungen<br />

• E ist unabhängig vom<br />

Empfängermaterial<br />

• Vorstellung<br />

– Wieviele <strong>Photon</strong>en kommen<br />

(pro Zeit) auf der Fläche an<br />

ΔA<br />

Die Einheit der<br />

Beleuchtungsstärke ist das<br />

Lux (lx)<br />

1 lx = 1 lm / m²<br />

Radiosity B<br />

• Wieviel Licht sendet eine<br />

Fläche ab<br />

Δ<br />

B = φ<br />

• Definition:<br />

ΔAA<br />

– Radiosity = Versendeter<br />

Δφ out<br />

Lichtstrom φ pro Senderfläche<br />

ΔA<br />

out<br />

• Der Lichtstrom geht dabei in<br />

alle Richtungen<br />

• Gleiche Definition wie E, aber B<br />

ist eine Sendergröße<br />

ΔA<br />

Die Einheit der Radiosity<br />

ist lm / m²<br />

• Vorstellung<br />

– Wieviele <strong>Photon</strong>en werden (pro<br />

Zeit) von der Fläche versendet<br />

5


Leuchtdichte L<br />

• Alle bisherigen Größen sind<br />

unsichtbar und sagen i.A.<br />

nichts über die Helligkeit von<br />

Fläche bzw. Lichtquelle aus<br />

• Definition der Leuchtdichte<br />

– Versendeter Lichtstrom Δφ pro<br />

(sichtbarer) Empfängerfläche<br />

ΔAcosθ und Raumwinkel Δω<br />

– entspricht der gesehenen<br />

Helligkeit<br />

– Lichtstrom t dabei nur in<br />

Richtung Auge<br />

– schwierigste Größe…<br />

• Vorstellung<br />

– Wieviele <strong>Photon</strong>en fliegen ins<br />

Auge (pro Zeit und pro<br />

gesehener Fläche)<br />

Δφ<br />

L =<br />

ΔA⋅cosθ<br />

⋅Δω<br />

ΔA ⋅cosθ<br />

θ<br />

ΔA<br />

Δω<br />

Δφ out<br />

: Gesehene Fläche<br />

Die Einheit der<br />

Leuchtdichte ist cd / m²<br />

<strong>Zusammenfassung</strong><br />

Photometrische<br />

Bezeichnung<br />

Einheit<br />

Radiometrische<br />

Bezeichnung<br />

Einheit<br />

Vereinfachter<br />

Zusammenhang<br />

Q<br />

Lichtmenge<br />

(luminous energy)<br />

Strahlungsmenge<br />

(radiant energy)<br />

φ<br />

I<br />

E<br />

Lichtstrom<br />

(luminous flux)<br />

Lichtstärke<br />

(luminous intensity)<br />

Beleuchtungsstärke<br />

(illuminance)<br />

lm<br />

cd<br />

lx<br />

Strahlungsfluß<br />

(radiant flux)<br />

Strahlstärke<br />

(radiant intensity)<br />

Bestrahlungsstärke<br />

(irradiance)<br />

W<br />

W / sr<br />

W / m²<br />

B Radiosity lm / m² Radiosity W / m²<br />

L<br />

Leuchtdichte<br />

(luminance)<br />

cd / m²<br />

Strahldichte<br />

(radiance)<br />

W / m²sr<br />

φ =<br />

L =<br />

ΔA<br />

ΔQ<br />

Δt<br />

Δφ<br />

I =<br />

Δω<br />

Δ<br />

E = φ<br />

ΔAA<br />

e<br />

Δ<br />

B Δ<br />

= φ A s<br />

Δφ<br />

⋅cosθ<br />

⋅ Δω<br />

6


Materialien<br />

Spiegel Glänzend Diffus<br />

Materialien: Spiegel<br />

• Beobachtung<br />

– Einfallsrichtung = Ausfallsrichtung<br />

– In alle anderen Richtungen wird<br />

kein Licht reflektiert (!)<br />

0<br />

L<br />

7


Materialien: Diffuse Fläche<br />

• Beobachtung:<br />

– Die Helligkeit (Leuchtdichte) einer<br />

diffusen Fläche hängt nicht von der<br />

Richtung des Betrachters ab (Lambert)<br />

– Beispiel: Kreide, Papier<br />

• Einfache Erklärung<br />

– Die Oberfläche besteht aus vielen<br />

kleinen Spiegeln, die in einer zufälligen<br />

Richtung orientiert sind<br />

– Die reflektierte Richtung ist Zufall <br />

Gleich viele Lichtstrahlen in alle<br />

Richtungen<br />

L<br />

L<br />

L<br />

Materialien: Glänzende Fläche<br />

• Beobachtung<br />

– Verschwommenes Spiegelbild L<br />

L max<br />

• Einfache Erklärung<br />

– Vorzugsrichtung bei der<br />

Reflexion<br />

– Kleinere Variation der<br />

Orientierung der Spiegel<br />

“Reflexions-Keule“ (Lobe)<br />

L<br />

8


Wie misst/beschreibt man<br />

Reflexion?<br />

• Messung für alle Einfalls- und<br />

Ausfallswinkel<br />

• Für einfallendes Licht misst man<br />

Beleuchtungsstärke<br />

– Andere Größe praktisch kaum<br />

messbar, da man sonst in den<br />

Objektmittelpunkt einen Sensor<br />

integrieren müsste.<br />

• Ausfallendes Licht: Leuchtdichte<br />

• Resultat: Angenäherte BRDF des<br />

• Resultat: Angenäherte BRDF des f<br />

( ω , ω<br />

)<br />

Materials [Nicodemus 1977]<br />

– Bi-direktionale Reflexions-<br />

Verteilungsfunktion (Bidirectional<br />

Reflectance Distribution Function)<br />

ω v o<br />

i: incoming<br />

o: outgoing<br />

ω v i<br />

v v dL ( v ω o<br />

)<br />

r i o<br />

= v<br />

dE<br />

oi<br />

( ω i<br />

)<br />

v<br />

dLo<br />

( ωo<br />

)<br />

= v<br />

dL ω ⋅cosθ<br />

⋅dω<br />

i<br />

(<br />

i<br />

)<br />

i i<br />

Reflexionsgrad (Reflectance)<br />

• Anstatt der Werte der BRDF im<br />

Bereich [0,∞[ ist der<br />

Reflexionsgrad im Bereich (0,1)<br />

oft hilfreich (speziell in diffusen<br />

Umgebungen)<br />

• Er ist definiert als der gesamte<br />

ausfallende Lichtstrom im<br />

Verhältnis zum gesamten<br />

eingestrahlten Lichtstrom<br />

v<br />

∫ Lo<br />

( ωo<br />

) ⋅cosθo<br />

⋅d<br />

φo<br />

B<br />

2π<br />

ρ = = = v<br />

φ E L ω ⋅cosθ<br />

⋅d<br />

i<br />

∫<br />

i<br />

2π<br />

( )<br />

i<br />

i<br />

ω<br />

ω<br />

i<br />

o<br />

φ i<br />

φ o<br />

9


Die Rendering Equation [Kajiya 1986]<br />

• Das Licht an einem Punkt x<br />

ergibt sich aus dem<br />

gesamten einfallenden Licht,<br />

das in Richtung des<br />

Betrachters reflektiert wird<br />

• Für das einfallende Licht an<br />

jedem Punkt y entsteht<br />

wieder das gleiche Problem<br />

y<br />

• Dies führt zu einer<br />

Integralgleichung:<br />

L o<br />

v ωo<br />

x<br />

v<br />

ω<br />

f r<br />

i<br />

L i<br />

v v<br />

v v<br />

v v<br />

L ( x,<br />

ω ) = L ( x,<br />

ω ) + ∫ f ( x,<br />

ω , ω ) ⋅cosθ<br />

⋅ L ( x,<br />

ω ) ⋅ dω<br />

o<br />

o<br />

e<br />

o<br />

r<br />

2π<br />

sr<br />

i<br />

o<br />

i<br />

i<br />

i<br />

Lösung der Rendering Equation<br />

durch <strong>Photon</strong> <strong>Mapping</strong><br />

• <strong>Photon</strong> <strong>Mapping</strong> wurde 1993/94<br />

von Henrik Wann Jensen entwickelt<br />

• Dieser Ansatz ermöglicht die effiziente<br />

Berechnung aller wichtigen visuellen globalen<br />

Beleuchtungseffekte, z.B.<br />

– spekulare Reflektionen, diffuse Reflexion<br />

(color bleeding), transluzente Materialien,<br />

Volumen Simulation, Dispersion und<br />

insbesondere auch sog. Kaustiken<br />

• geometrieunabhängig<br />

• Basiert auf Particle Tracing [Arvo 1988]<br />

T. Grosch - 20 -<br />

10


Die Idee: two-pass Algorithmus<br />

• In einem ersten Schritt werden<br />

von allen Lichtemittern<br />

<strong>Photon</strong>en ausgesendet<br />

(sogenanntes Particle Tracing)<br />

• Auf diffusen Oberflächen<br />

werden “Treffer” gespeichert<br />

und falls das <strong>Photon</strong> nicht<br />

absorbiert wird, wird es<br />

weiterverfolgt.<br />

• In einem zweiten Schritt wird<br />

die Szene durch einen<br />

Raytracer gerendert, wobei an<br />

entsprechenden Stellen kein<br />

Monte Carlo Sampling oder<br />

ähnliches durchgeführt wird,<br />

sondern die <strong>Photon</strong> Map<br />

abgefragt wird<br />

• Zur Bildentstehung gehen wir<br />

also aus zwei Richtungen vor:<br />

vom Auge (Ray Tracing) und<br />

von den Lichtquellen (Particle<br />

Tracing)<br />

T. Grosch - 21 -<br />

First Pass<br />

Aufbau der <strong>Photon</strong> Map<br />

T. Grosch - 22 -<br />

11


Sampling der Lichtquelle<br />

• Zunächst einmal müssen die Lichtquellen <strong>Photon</strong>en<br />

emittieren<br />

• Wenn eine Lichtquelle N <strong>Photon</strong>en entsendet, dann trägt<br />

jedes <strong>Photon</strong> genau den 1/N Teil des Lichtstroms<br />

• An dieser Stelle muss man sich eine Sampling Strategie<br />

für Position und Richtung der <strong>Photon</strong>en überlegen.<br />

• Die Basis für die Sampling-Strategie ist die Verteilung<br />

des Lichtstroms über die Raumwinkel<br />

– … also die Lichtstärkeverteilung<br />

T. Grosch - 23 -<br />

LVK-Sampling<br />

• Lichtstärke ist definiert als<br />

Lichtstrom pro Raumwinkel<br />

• In den Halbraum werden N<br />

<strong>Photon</strong>en verschossen, die<br />

alle den gleichen Lichtstrom<br />

Φ/N transportieren sollen<br />

• Um das zu erreichen, müssen<br />

in die Raumwinkel mit hohen<br />

Lichtstärken auch<br />

entsprechend mehr <strong>Photon</strong>en<br />

verschickt werden.<br />

• Die LVK muss daher als<br />

Dichtefunktion verwendet<br />

werden.<br />

Bsp.: Lambert Emitter<br />

Φ =1000lm<br />

dΦ<br />

I =<br />

dω<br />

T. Grosch - 24 -<br />

12


<strong>Photon</strong>enverteilung<br />

• Für einen (kleinen) Lambert<br />

Emitter ergibt sich etwa folgende<br />

<strong>Photon</strong>enverteilung<br />

– Anzahl <strong>Photon</strong>en pro<br />

Raumwinkel ~ cosθ<br />

• Mehr <strong>Photon</strong>en in Richtung<br />

Normale<br />

• Weniger <strong>Photon</strong>en in<br />

seitliche Richtungen<br />

Δφ out<br />

ΔA<br />

• Für andere Lichtquellen<br />

– Punktlicht: Zufällige Richtung<br />

– Spot: ~ (cosθ)^n<br />

T. Grosch - 25 -<br />

<strong>Photon</strong> Scattering<br />

• Trifft das <strong>Photon</strong> auf eine<br />

Oberfläche, dann werden folgende<br />

Fälle unterschieden<br />

• Diffuse Fläche:<br />

– das <strong>Photon</strong> wird mit der<br />

aktuellen Position in der<br />

<strong>Photon</strong>-Map abgespeichert.<br />

– eine neue Richtung wird durch<br />

Importance Sampling (Dichte<br />

ähnlich der BDRF des<br />

Materials) zufällig erzeugt und<br />

ein (neues) <strong>Photon</strong> wird in<br />

diese Richtung versendet<br />

• Spekulare<br />

Reflexion/Transmission:<br />

– das <strong>Photon</strong> wird in der<br />

entsprechenden Richtung<br />

weiterverfolgt und nicht<br />

abgespeichert<br />

• Absorption<br />

– das <strong>Photon</strong> wird mit der<br />

aktuellen Position in der<br />

<strong>Photon</strong>-Map abgespeichert.<br />

– Es wird nichts weiterverfolgt.<br />

• Als Abbruch wird eine maximale<br />

Rekursionstiefe verwendet<br />

Diffus Spekular Spiegel<br />

T. Grosch - 26 -<br />

13


Kombinierte Materialien<br />

• Man kann auch Materialien kombinieren<br />

– z.B. 80% diffus, 10% spiegelnd,<br />

10% transmittierend<br />

• Um die exponentielle Anzahl von<br />

Strahlen zu vermeiden, wird auch hier<br />

nur ein Strahl weiterverfolgt<br />

• Die Entscheidung, welcher Pfad das ist,<br />

erfolgt durch „Russisches Roulette“<br />

– Wähle Zufallszahl ξ<br />

ξ ∈[0,<br />

k ] → diffus<br />

ξ ∈<br />

[ k<br />

, k<br />

d<br />

d<br />

d<br />

+ k<br />

] → reflexion<br />

s<br />

ξ ∈ [ k + k , k + k + k ] → transmission<br />

d<br />

s<br />

d<br />

s<br />

t<br />

0<br />

=80% k d<br />

ξ<br />

=10% k s<br />

=10% k t<br />

1<br />

• Funktioniert nur, wenn<br />

k<br />

d<br />

+ ks<br />

+ kt<br />

≤1<br />

T. Grosch - 27 -<br />

Beispiel<br />

• Material ist 50% diffus und<br />

25% spiegelnd (also 25%<br />

absorbierend)<br />

– 50% der auftreffenden<br />

<strong>Photon</strong>en werden gespeichert<br />

und weiterverfolgt<br />

Φ<br />

– 25% der auftreffenden<br />

<strong>Photon</strong>en werden – ohne<br />

Speicherung – reflektiert a d r d<br />

– 25% der auftreffenden<br />

<strong>Photon</strong>en werden absorbiert<br />

– Entscheidung über<br />

Russisches Roulette<br />

Beispiel: 4 <strong>Photon</strong>en mit Rekursionstiefe 2<br />

Absorption (a), diffus (d) und spiegelnd (r).<br />

Die blauen Punkte sind <strong>Photon</strong>en, die in der<br />

<strong>Photon</strong>-Map mit jeweils 1/4Φ gespeichert werden.<br />

T. Grosch - 28 -<br />

14


Diffuse Reflexion<br />

• Der Lichtstrom des <strong>Photon</strong>s wird bei der Reflexion nicht verändert<br />

• Mit Russischem Roulette wird entschieden, ob ein <strong>Photon</strong> reflektiert<br />

oder absorbiert wird<br />

• z.B. ρ = 033 0.33<br />

– Aus drei <strong>Photon</strong>en mit Δφ = 1 werden nicht drei <strong>Photon</strong>en mit<br />

Δφ´= 0.33 sondern nur ein <strong>Photon</strong> mit Δφ´= 1<br />

Δφ<br />

3<br />

Δφ<br />

3<br />

Δφ<br />

3<br />

Δφ<br />

Δφ<br />

Δφ<br />

Δφ<br />

Δφ<br />

Δφ<br />

Δφ<br />

Ohne RR<br />

Mit RR<br />

T. Grosch - 29 -<br />

Spekulare Reflexion<br />

• Der Grad der Reflexion ist<br />

abhängig vom Einfallswinkel<br />

des Lichts (z.B. Glas) und wird<br />

am besten mit Hilfe der<br />

Fresnel Gleichungen durch<br />

den Brechungsindex<br />

automatisch berechnet.<br />

n<br />

ρ||<br />

=<br />

n<br />

2<br />

2<br />

cosθ1<br />

− n1<br />

cosθ2<br />

cosθ<br />

+ n cosθ<br />

n1<br />

cosθ1<br />

− n2<br />

cosθ2<br />

ρ⊥<br />

=<br />

n cosθ<br />

+ n cosθ<br />

f r<br />

2<br />

1 2 2<br />

( θ ) = ⋅( ρ + ρ )<br />

2<br />

1<br />

1<br />

||<br />

1<br />

1<br />

⊥<br />

2<br />

2<br />

• Eine gute Approximation liefert<br />

Schlick:<br />

• Mit<br />

( θ ) ≈<br />

f<br />

+ ( 1−<br />

f<br />

)<br />

( 1−<br />

θ<br />

)<br />

5<br />

f r 0 0<br />

cos<br />

2<br />

⎛ n1<br />

− n2<br />

⎞<br />

f0 = ⎜ ⎟<br />

n1<br />

+ n2<br />

⎠<br />

⎝<br />

• Über Russisches Roulette mit fr<br />

wird entschieden, ob das <strong>Photon</strong><br />

den gespiegelten oder den<br />

gebrochenen Pfad weiterverfolgt<br />

• Das <strong>Photon</strong> wird nicht gespeichert<br />

f r<br />

( θ )<br />

1− f r<br />

( θ )<br />

Auch hier wird der Lichtstrom unverändert gelassen, beim farbigem Glas kann man umfärben<br />

T. Grosch - 30 -<br />

15


Absorption<br />

• Ein <strong>Photon</strong> speichert immer den einfallenden Lichtstrom<br />

• Daher werden auch die absorbierten <strong>Photon</strong>en<br />

gespeichert<br />

• Die Gewichtung mit der BRDF kommt später bei der<br />

Darstellung<br />

– Günstiger für die Darstellung (siehe später)<br />

T. Grosch - 31 -<br />

Speicherung der <strong>Photon</strong>en<br />

• In der <strong>Photon</strong> Map werden alle <strong>Photon</strong>en gespeichert<br />

• Während des <strong>Photon</strong> Tracings werden nur diejenigen<br />

<strong>Photon</strong>en gespeichert, die auf diffuse Oberflächen<br />

treffen<br />

• Zur Berechnung der Leuchtdichte an einem Punkt muß<br />

praktisch die “Dichte” der <strong>Photon</strong>en bestimmt werden<br />

– Daher werden Nachbarschaftsbeziehungen zwischen den<br />

<strong>Photon</strong>en benötigt. Eine effiziente Speicherung ist daher<br />

sehr wichtig!<br />

– Auch der Speicherplatzverbrauch sollte Berücksichtigung<br />

finden<br />

T. Grosch - 32 -<br />

16


Datenorganisation<br />

• Wir haben zwei wichtige<br />

Anforderungen an die<br />

Datenstruktur<br />

– Die n-nächstgelegenen<br />

<strong>Photon</strong>en müssen schnell<br />

gefunden werden können<br />

– Sie muss speichereffizient<br />

sein<br />

• Übliche Datenstrukturen wie<br />

z.B. ein Octree sind nicht gut<br />

geeignet, da die <strong>Photon</strong>en<br />

hochgradig ungleichmäßig<br />

verteilt sind<br />

• Eine der besten<br />

Datenstrukturen für unsere<br />

Zwecke ist ein kd-Tree<br />

– Ein bestimmtes <strong>Photon</strong> wird<br />

im Durchschnitt in O(log n)<br />

gefunden<br />

– Die k nächsten werden dann<br />

in O(k+log n) gefunden!<br />

T. Grosch - 33 -<br />

kd Tree<br />

• Im Prinzip ist dies ein binärer<br />

Suchbaum in k Dimensionen<br />

• Die Erzeugung eines solchen<br />

Baumes ist relativ einfach<br />

– Man sucht die Raumachse mit<br />

der größten Ausdehnung<br />

– Entlang dieser Achse werden<br />

alle <strong>Photon</strong>en sortiert<br />

– Das “mittlere” <strong>Photon</strong> wird ein<br />

neuer Knoten im Baum<br />

– Alle “kleineren <strong>Photon</strong>en”<br />

kommen in den linken<br />

Teilbaum, alle größeren<br />

entsprechend in der rechten<br />

– Dieses Verfahren wird nun<br />

rekursiv auf beide Teilbäume<br />

angewendet<br />

• Der so erzeugte Baum ist nicht<br />

vollständig, aber die Höhe ist<br />

log(n)<br />

T. Grosch - 34 -<br />

17


Kd Tree Beispiel<br />

1<br />

6<br />

1. Achse mit maximaler Ausdehnung finden<br />

2. Median finden<br />

3. Datenmenge aufsplitten<br />

4. Rekursiv die Operationen 1 bis 3 mit<br />

den beiden neuen Teilmengen durchführen<br />

2<br />

3<br />

5<br />

4<br />

2<br />

X-Achse<br />

3<br />

6<br />

5 1<br />

4<br />

Das alles funktioniert fast genauso im k-dimensionalen Raum<br />

T. Grosch - 35 -<br />

Kd Tree für <strong>Photon</strong>en in Cornell Box<br />

n <strong>Photon</strong>en<br />

Top<br />

n/2 <strong>Photon</strong>en<br />

Top-Left<br />

n/4 <strong>Photon</strong>en<br />

Top-Left-Left<br />

n/8 <strong>Photon</strong>en<br />

Top-Left-Left-Right<br />

T. Grosch - 36 -<br />

18


Speicherplatz<br />

• Ein <strong>Photon</strong> wird repräsentiert durch<br />

float position[3]<br />

// Position<br />

unsigned char theta, phi<br />

// Einfallsrichtung<br />

*<br />

float power[3]<br />

short plane<br />

// Lichtstrom<br />

// supp. plane kd<br />

– => insgesamt 28 byte pro <strong>Photon</strong><br />

• Die Winkel Theta and Phi werden mit Hilfe einer look-up<br />

table komprimiert gespeichert<br />

• Keine Child-Pointer, da kd Tree als Heap organisiert<br />

werden kann (siehe H.W. Jensen: Realistic Image Synthesis using <strong>Photon</strong> <strong>Mapping</strong>)<br />

( * für nicht-diffuse Materialien und Ausschluß „falscher“ <strong>Photon</strong>en (siehe Bias Folie))<br />

T. Grosch - 37 -<br />

Zwei sind besser als eine<br />

• Es ist sehr sinnvoll zwei getrennte <strong>Photon</strong> Maps zu<br />

verwenden: eine globale <strong>Photon</strong> Map und eine Caustic<br />

Map<br />

– Die globale <strong>Photon</strong> Map enthält relativ wenige <strong>Photon</strong>en<br />

und wird so erzeugt wie beschrieben<br />

– Die Caustic Map allerdings sollte extrem viele <strong>Photon</strong>en<br />

enthalten, aber nur diejenigen, deren Pfad die Form LS*D<br />

hat, also mindestens einmal spekular reflektiert wurden<br />

– Zusätzlich sollten diese <strong>Photon</strong>en auch nur in Richtung<br />

spekularer Flächen versendet werden, um Rechenzeit zu<br />

sparen<br />

T. Grosch - 38 -<br />

19


Caustic-Map<br />

Φ<br />

Glaskugel<br />

Normales <strong>Photon</strong><br />

d<br />

• Caustic-<strong>Photon</strong>en werden ebenfalls auf diffusen Objekten<br />

abgespeichert.<br />

T. Grosch - 39 -<br />

Second Pass<br />

Rendern des Bildes<br />

Auswertung der <strong>Photon</strong> Map<br />

T. Grosch - 40 -<br />

20


Radiance Estimate<br />

• Durch die <strong>Photon</strong>en auf einer<br />

Oberfläche können wir die<br />

einfallende<br />

Beleuchtungsstärke - bzw.<br />

gewichtet mit der BRDF die<br />

ausfallende Leuchtdichte -<br />

schätzen<br />

• Die <strong>Photon</strong>en haben alle<br />

diskrete Lichtstromwerte<br />

• Sie sind über die Flächen<br />

unterschiedlich h dicht verteilt.<br />

• Hierzu wird um den<br />

untersuchten Punkt eine Kugel<br />

mit Radius r aufgespannt und<br />

alle <strong>Photon</strong>en eingesammelt<br />

• Oder: die Anzahl der <strong>Photon</strong>en<br />

N wird vorgegeben und der<br />

dazugehörige Radius r<br />

ermittelt.<br />

L r<br />

(x,ω o<br />

) ≈ 1<br />

N<br />

∑ f<br />

πr 2 r<br />

(x,ω p<br />

,ω o<br />

)Δφ p<br />

(x,ω p<br />

)<br />

p=1<br />

T. Grosch - 41 -<br />

Radiance Estimate<br />

• Um die reflektierte Leuchtdichte zu ermitteln, müssten wir folgende<br />

Gleichung lösen<br />

L r<br />

(x,ω o<br />

) =<br />

∫<br />

Ω<br />

f r<br />

(x,ω i<br />

,ω o<br />

)L i<br />

(x,ω i<br />

)cosθdω i<br />

• Dies wird mit Hilfe der <strong>Photon</strong> Map bestimmt durch:<br />

L r<br />

(x,ω o<br />

) ≈ 1<br />

N<br />

∑ f<br />

πr 2 r<br />

(x,ω p<br />

,ω o<br />

)Δφ p<br />

(x,ω p<br />

)<br />

p=1<br />

• Zu einem beliebigen Punkt x suchen wir die maximal n nächsten<br />

<strong>Photon</strong>en (und damit den Radius r)<br />

• Der Lichtstrom aller gefundener <strong>Photon</strong>en wird aufsummiert und<br />

durch die Fläche in der sie liegen geteilt<br />

T. Grosch - 42 -<br />

21


Radiance Estimate<br />

Nur direktes Licht, 1 diffuse Reflexion, 2 diffuse Reflexionen,<br />

ca. 30.000000 <strong>Photon</strong>en ca. 40.000000 <strong>Photon</strong>en ca. 45.000 <strong>Photon</strong>en<br />

T. Grosch - 43 -<br />

Suchradius<br />

r=1 r=2<br />

Rauschen<br />

r=4 r=8<br />

Detailverlust<br />

T. Grosch - 44 -<br />

22


Darstellung des Bildes<br />

• Es wäre möglich die <strong>Photon</strong> Map direkt zur Darstellung<br />

zu verwenden, das würde aber sehr fleckige/verrauschte<br />

Bilder liefern.<br />

• Wozu dann eigentlich die <strong>Photon</strong>en?<br />

– Wir verwenden die <strong>Photon</strong> Map für Kaustiken und für die<br />

Approximation des (einfallenden) indirektens Lichts<br />

– Für das direkte Licht und Spiegelungen greifen wir auf<br />

Path-Tracing oder Final Gathering zurück<br />

T. Grosch - 45 -<br />

Die Rendering Equation<br />

• Eigentlich wollen wir diese Gleichung lösen<br />

v v v v v v v<br />

L ( x,<br />

ω) f ( x,<br />

ω',<br />

ω) ⋅L<br />

( x,<br />

ω'<br />

) ⋅( ω'<br />

on) ⋅dω'<br />

r<br />

= ∫<br />

r<br />

2π<br />

i<br />

• wir können diese in drei Teile trennen, die wir<br />

einzeln lösen können<br />

v v v v v v<br />

(direktes Licht) = ∫ fr<br />

( x,<br />

ω',<br />

ω) ⋅Li<br />

, l<br />

( x,<br />

ω'<br />

) ⋅( ω'<br />

on)<br />

⋅dω'<br />

(caustics)<br />

(mult. diffus)<br />

+<br />

+<br />

i<br />

( x,<br />

')<br />

( ,<br />

r<br />

i ,<br />

x ω'<br />

)<br />

( x,<br />

')<br />

L l<br />

L c<br />

L i d<br />

,<br />

ω r<br />

,<br />

ω r<br />

2π<br />

∫<br />

f<br />

r<br />

2π<br />

∫<br />

f<br />

r<br />

2π<br />

v<br />

( x,<br />

ω',<br />

ω) ⋅ L ( x,<br />

ω'<br />

) ⋅( ω'<br />

on)<br />

v<br />

v<br />

v<br />

i,<br />

c<br />

( x,<br />

ω',<br />

ω) ⋅ L ( x,<br />

ω'<br />

) ⋅( ω'<br />

on) ⋅dω'<br />

i,<br />

d<br />

Direktes Licht der Lichtquelle<br />

v<br />

v<br />

v v v<br />

⋅dω'<br />

v<br />

v<br />

Caustic – indirekte Beleuchtung der Lichtquellen über Spiegelung/Transmission<br />

Indirekte Beleuchtung der Lichtquellen, mindestens einmal diffus reflektiert.<br />

v<br />

T. Grosch - 46 -<br />

23


Rendern aber wie?<br />

• Es gibt sehr viele Möglichkeiten wie man das Bild<br />

rendern kann, aber eine der effizientesten ist es einen<br />

leicht modifizierten Path Tracer zu verwenden.<br />

• Die Vorgehensweise ist zu Beginn ganz “normal”. Wir<br />

schießen n Strahlen durch jedes Pixel und mitteln<br />

danach die Ergebnisse<br />

• Wir unterscheiden fortan zwischen einer exakten und<br />

einer ungefähren Berechnung. Eine ungefähre<br />

Berechnung reicht immer dann, wenn der aktuelle Strahl<br />

nicht mehr viel zum Gesamtergebnis beiträgt!<br />

T. Grosch - 47 -<br />

Wie wird berechnet?<br />

Exakt<br />

Approximation<br />

Direktes Licht Monte Carlo Global Map<br />

Spekular Monte Carlo Monte Carlo<br />

Kaustik Caustic Map Global Map<br />

Mehrfach<br />

diffus<br />

Monte Carlo<br />

Global Map<br />

T. Grosch - 48 -<br />

24


Schnellste Variante<br />

• Durch das Pixel wird ein Strahl<br />

verschossen<br />

• Die globale <strong>Photon</strong> Map wird<br />

ausgewertet<br />

• Falls eine Caustic Map verwendet<br />

wird<br />

– Die Caustic Map wird ausgewertet<br />

und addiert<br />

• Keine rekursiven Aufrufe oder<br />

Strahlen (nur bei nicht-diffusen<br />

Flächen)<br />

• Schnelles Preview<br />

T. Grosch - 49 -<br />

Beispiel: Final Gathering<br />

• Durch das Pixel werden<br />

wenige Strahlen verschossen<br />

• Für jeden Schnittpunkt wird:<br />

– Das direkte Licht berechnet<br />

(viele Samples)<br />

– Die Caustic Map ausgewertet<br />

– Der Halbraum durch viele<br />

Strahlen abgetastet, wobei die<br />

<strong>Photon</strong> Maps an den<br />

Trefferpunkten ausgewertet<br />

werden.<br />

– Spiegelung wird rekursiv<br />

weiterverfolgt<br />

– Alle Anteile werden summiert<br />

und gem. der BRDF<br />

gewichtet.<br />

T. Grosch - 50 -<br />

25


Beispiel (Path Tracing)<br />

• Durch das Pixel werden viele<br />

Strahlen verschossen<br />

• Für jeden Schnittpunkt wird:<br />

– Das direkte Licht berechnet (z.B. 1<br />

Sample)<br />

– Die Caustic Map ausgewertet<br />

• ein transparentes Objekt beim<br />

Schattenfühler muss dann als<br />

Schatten interpretiert werden<br />

– Per Russischem Roulette<br />

• diffus (importance sampl.)<br />

• oder spiegelnd weiterverfolgt<br />

• Beim indirekten Licht werden dann<br />

die <strong>Photon</strong> Maps ausgewertet<br />

T. Grosch - 51 -<br />

Vergleich mit/ohne Final Gather<br />

Direkte Visualisierung der <strong>Photon</strong> Map,<br />

einige Sekunden<br />

Final Gathering mit 150 Strahlen,<br />

mehrere Minuten (gleiche Anzahl <strong>Photon</strong>en!)<br />

T. Grosch - 52 -<br />

26


Direkte Visualisierung mit Caustic Map<br />

Kein Final Gathering, aber viele<br />

<strong>Photon</strong>en, daher Flecken nicht<br />

mehr so deutlich sichtbar<br />

Neues Problem:<br />

Fehler an den Ecken<br />

T. Grosch - 53 -<br />

Verbesserungsmöglichkeiten<br />

• Durch das Verwenden einer Kugel<br />

zum Einsammeln der <strong>Photon</strong>en<br />

werden an den Ecken viele<br />

“ungültige <strong>Photon</strong>en”<br />

mitgenommen.<br />

– Die Leuchtdichte wird somit<br />

evtl. überschätzt<br />

• Stattdessen kann man die Kugel<br />

entlang der Normalen stauchen<br />

um die Anzahl der falschen<br />

<strong>Photon</strong>en zu reduzieren<br />

– Jetzt bekommt man nur<br />

“gültige” <strong>Photon</strong>en<br />

– Allerdings überschätzt man<br />

die Fläche, auf der <strong>Photon</strong>en<br />

liegen<br />

– Kanten können somit zu<br />

dunkel werden<br />

T. Grosch - 54 -<br />

27


Bias Typen<br />

Proximity Boundary Topological Occlusion<br />

• Proximity Bias: Details werden gefiltert<br />

• Verbesserung: Filterung mit höherem Gewicht für nähere <strong>Photon</strong>en<br />

• Boundary Bias: Fläche wird idüberschätzt t Kanten werden zu dunkel<br />

• Topological Bias: Fläche wird unterschätzt<br />

• Occlusion Bias: Light leaks<br />

• Nur <strong>Photon</strong>en mit ähnlichen Normalen mit einbeziehen; <strong>Photon</strong>en die in<br />

Richtung Oberflächennormale fliegen, können ausgeschlossen werden<br />

Abschließende Bewertung<br />

• <strong>Photon</strong> <strong>Mapping</strong> ermöglicht komplizierte Effekte wie<br />

Kaustiken und transparente Materialien qualitativ<br />

hochwertig und schnell zu berechnen<br />

• <strong>Photon</strong> <strong>Mapping</strong> ist relativ einfach zu implementieren da<br />

ein vorhandener Ray- oder Pathtracer erweitert werden<br />

kann<br />

• <strong>Photon</strong> <strong>Mapping</strong> liefert bessere Ergebnisse und diese<br />

schneller als ein Path Tracer<br />

– Dafür Bias durch Radiance Estimate<br />

• <strong>Photon</strong> <strong>Mapping</strong> wird zunehmend von kommerziellen<br />

Produkten verwendet.<br />

– Auch PovRay beherrscht <strong>Photon</strong> <strong>Mapping</strong><br />

T. Grosch - 56 -<br />

28


Termin<br />

• Raum G29 – 224<br />

• Fr, 11.6., 11 – 15 Uhr<br />

T. Grosch - 57 -<br />

29

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!