Photon Mapping Zusammenfassung
Photon Mapping Zusammenfassung
Photon Mapping Zusammenfassung
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