Sampling
7. Vorlesung
Photorealistische Computergrafik
Thorsten Grosch
Einleitung
Bisher
– Lösung der Rendering Equation durch das Radiosity
Verfahren mit den Vereinfachungen
Diskretisierung der Geometrie
Alle Materialien sind diffus
Heute
– Sampling
– Vorbereitung für Path Tracing
Geometrie bleibt kontinuierlich
„Beliebige“
g BRDF, Erweiterung
g zum einfachen Ray
y Tracer
Motivation: Sampling
Ein naiver (und sehr teurer) Ansatz, die Rendering Equation mit
Hilfe eines Raytracing-Ansatzes
Raytracing Ansatzes zu lösen
lösen, wäre
– wird eine diffuse Oberflächen getroffen, so werden viele Strahlen
weiterverfolgt
– trifft so ein Strahl wieder auf eine diffuse Oberfläche, geht man
genauso weiter, … bis eine Lichtquelle getroffen wird.
Wie „sampled
sampled“ man die Hemisphäre (gleichmässig) ?
Motivation: Sampling
Ein naiver (und sehr teurer) Ansatz, die Rendering Equation mit
Hilfe eines Raytracing-Ansatzes
Raytracing Ansatzes zu lösen
lösen, wäre
– wird eine diffuse Oberflächen getroffen, so werden viele Strahlen
weiterverfolgt
– trifft so ein Strahl wieder auf eine diffuse Oberfläche, geht man
genauso weiter, … bis eine Lichtquelle getroffen wird.
Wie „sampled
sampled“ man eine BRDF?
Motivation: Sampling
Ein anderer (immer noch naiver) Ansatz besteht darin, zumindest
die Lichtquellen direkt abzutasten
– Das direkte Licht wird also eingesammelt und man überlässt
es nicht dem Zufall, ob ein Strahl die Lichtquelle trifft
– Für das indirekte Licht werden wieder viele Strahlen
verschickt …
Wie
Wi „sampled“
l d“ man eine
i Li
Lichtquelle?
ht
ll ?
Beispiele
Im Zusammenhang mit
Computern verwenden wir
einen Zufallsgenerator
v
y
(float) rand() / RAND_MAX
liefert uns eine Zufallszahl im
Bereich [0,1]
Beispiel: Samplen eines
Parallelogramms
– Wähle zwei Zufallszahlen x
und y im Bereich [0,1]
– (x, y) ist damit der
gesuchte Sample
A
v
x
Beispiel: Kreisscheibe
Wie wählt man Samples auf
einer
i
K
Kreisscheibe?
i
h ib ?
v
y
Variante 1: „Rejection
Sampling
Sampling“
v
x
– Wähle zwei Zufallszahlen x
und y im Bereich [-1,1]
– Prüfe, ob (x, y) im Kreis liegt:
x2 + y2 ≤ 1
– Wenn ja, dann ist ein
Sample gefunden
– Wenn nein, wird der Sample
nicht verwendet.
A
Ergebnis: gleichmäßige
Verteilung, aber man generiert
P kt umsonst.
Punkte
t
Es ist unklar, wieviele Samples
man generieren muß, bis N gültige
Samples vorhanden sind
Beispiel Kreisscheibe
Einen Punkt innerhalb des
Kreises kann man berechnen
mit:
⎛ x⎞
⎛ cos ϕ ⎞
⎜⎜ ⎟⎟ = r ⋅ ⎜⎜
⎟⎟; r ∈ [0,1]; ϕ ∈ [0,2π ]
⎝ y⎠
⎝ sin ϕ ⎠
v
y
r
ϕ
Variante 2: „Versuch eines
direkten Samplings“
– Wähle eine Zufallszahl für r im
Bereich [0,1]
– Wähle eine zweite für ϕ und
multipliziere sie mit 2π
2π.
– Berechne daraus den
gesuchten Sample (x, y)
Ergebnis: keine gleichmäßige
Verteilung
g mehr…
v
x
Grundlagen
g der
Wahrscheinlichkeitsrechnung
Begriffe an Beispielen
Eine wichtige Basis in der
Wahrscheinlichkeitsrechnung
bildet das Zufallsexperiment
Mit Hilfe eines
Zufallsexperiments werden
zufällige Ergebnisse ω erzielt.
Ein Beispiel für ein diskretes
Zufallsexperiment ist das
dreimalige Werfen einer
Münze.
Einzelne Würfe:
– 0: „Wappen“
– 1:
1 „Zahl“
Zahl“
Mit den Wahrscheinlichkeiten
p=1/2 für Wappen
p
pp bzw. Zahl.
Die Ergebnismenge lässt sich
darstellen durch:
Ω = {(0,0,0 ), (0,0,1), ..., (1,1,1)}
Zufallsvariable
Mit Hilfe dieser Ergebnisse
werden Zufallsvariablen X
definiert, die die jeweiligen
Ergebnisse auf reelle Zahlen
abbilden
bbild
X :Ω →ℜ
Eine Zufallsvariable ist also
eine Abbildung.
Beispiel: Untersucht wird die
Anzahl der „Wappen
Wappen“ beim
dreimaligen Werfen einer
Münze
X ((0,0,0)) = 3
X ((0,0,1)) = 2
M
X ((1,1,1)) = 0
Zufallsvariable
Zum Verständnis:
– Wi
Wir haben
h b ein
i
Zufallsexperiment
– Daraus erzielen wir
zufällige Ergebnisse
– Diese Ergebnisse werden
auf Zahlen abgebildet
Umgekehrt:
– Die Zufallsvariablen sind
„Wahrscheinlichkeitsbehaftet“
– Wi
Wir erzeugen die
di Z
Zahlen
hl
mit gewissen
Wahrscheinlichkeiten
Wahrscheinlichkeiten
Die Wahrscheinlichkeit, dass X
einen bestimmten Wert
annimmt, erhält man z.B.
durch Abzählen:
P( X
P( X
P( X
P( X
1
= 3) =
8
3
= 2) =
8
3
= 1) =
8
1
= 0) =
8
Verteilungsfunktion
Oftmals interessiert man sich
nicht direkt für die
Wahrscheinlichkeit P(X = x) für
einen bestimmten Wert von X,
sondern für die
Wahrscheinlichkeit, dass X in
einem bestimmten Bereich
liegt
Hierfür verwendet man die
Verteilungsfunktion F(x)
Die Verteilungsfunktion erhält
quasi die kumulierten
Wahrscheinlichkeiten
Für ein beliebiges Intervall
(a,b] der Zufallsvariablen X
lässt sich die
Wahrscheinlichkeit mit Hilfe
der Verteilungsfunktion
berechnen durch
P(a < X ≤ b ) = F (b ) − F (a )
F ( x ) = P( X ≤ x ), x ∈ ℜ
Wahrscheinlichkeit und
V
Verteilungsfunktion
il
f ki
P( X = x )
F ( x ) = P( X ≤ x )
8/8
8/8
6/8
6/8
4/8
4/8
2/8
2/8
X
0
0
1
2
Wahrscheinlichkeiten
3
X
0
0
1
2
Verteilungsfunktion
3
Eigenschaften
P( X = x )
F ( x ) = P( X ≤ x )
8/8
8/8
6/8
6/8
4/8
4/8
2/8
2/8
X
0
0
1
2
3
Wahrscheinlichkeiten:
• Werte im Bereich [0
[0,1]
1]
X
0
0
1
2
3
Verteilungsfunktion:
• Werte im Bereich [0
[0,1]
1]
• Monoton wachsend (1 am rechten Rand)
Stetig verteilte Zufallsvariablen
Bisher:
– Diskrete
Di k t E
Ergebnisse
b i
– Diskrete Zufallsvariablen
– Wahrscheinlichkeiten
konnten klar zugeordnet
werden
Stetige Verteilung
– Beispiel: Der Winkel ϕ
beim Drehen eines Rades
– Problem: wie groß ist die
Wahrscheinlichkeit für ein
b ti
bestimmtes
t Ergebnis?
E b i ?
ϕ
Stetig verteilte Zufallsvariablen
F ( x ) = P( X ≤ x )
Die Wahrscheinlichkeit für ein
bestimmtes Ergebnis ist Null
Die Wahrscheinlichkeiten
können nur für Intervalle
angegeben werden
1
– z.B. Aufteilung Rad in Sektoren
Wichtig ist hier also die
Verteilungsfunktion
P(a < X ≤ b ) = F (b ) − F (a )
Mit den „<“ oder „<=“ nimmt
man es hier
hi nicht
i ht so genau, d
da
die Wahrscheinlichkeit für
einen bestimmten Wert
ohnehin Null ist.
0
X
0°
360°
Dichte Dichtefunktion
Dichte,
Bei diskreten Ergebnissen gab es Wahrscheinlichkeiten
– die Verteilungsfunktion ergab sich durch Summation
– „… die Zufallsvariable nimmt mit einer Wahrscheinlichkeit einen
Wert an…“
Bei stetig verteilten Zufallsvariablen gibt es eine Dichtefunktion
(pdf, probability density function)
– Di
Die Verteilungsfunktion
V t il
f kti ((cdf,
df cumulative
l ti di
distribution
t ib ti ffunction)
ti )
ergibt sich durch Integration
– Definition der Dichtefunktion durch die Hintertür…
Eine Zufallsvariable X heißt stetig verteilt mit der Dichte p, falls sich
ihre Verteilungsfunktion schreiben lässt als:
F (x) =
x
∫ p(t ) dt
−∞
1
F (x) =
Glücksrad
x
∫ p(t ) dt
−∞
x
0
a
ϕ
b
Verteilungsfunktion
1
1
b−a
p(t )
t
0
a
b
Dichte
Eigenschaften
1
1
F (x) =
x
∫ p(t ) dt
−∞
1
b−a
p(t )
t
0
a
b
Dichte
W
Werte
t sind
i d nicht
i ht negativ,
ti
können beliebig groß werden
Fläche unter der Kurve muss
Eins sein:
∫ p(t )dt = 1
x∈Ω
x
0
a
b
Verteilungsfunktion
Monoton
M
t steigend
t i
d
Werte im Bereich [0,1]
Rechteck (Gleich)-Verteilung
(Gleich) Verteilung
⎧ 1
⎪b − a
⎪
p(t ) = ⎨
⎪ 0
⎪⎩
a<t <b
⎧ 0
⎪x − a
F (x) = ⎨
⎪b − a
⎩ 1
sonst
1
x≤a
a< x<b
x≥b
1
1
b−a
t
0
a
b
Dichte
x
0
a
b
Verteilungsfunktion
[0 1]-Gleichverteilung
[0,1]
Gleichverteilung
⎧1
⎪
p(t ) = ⎨
⎪0
⎩
0 < t <1
⎧0
⎪
F (x) = ⎨x
⎪1
⎩
sonst
1
x≤0
0 < x <1
x ≥1
1
t
0
0
1
Dichte
x
0
0
1
Verteilungsfunktion
[0, 1]-gleichverteilte Zufallsvariablen werden auch als „ξ“
geschrieben
Die Zufallswerte der rand()/RAND_MAX-Funktion sind [0,1]-verteilt
Beispiel: Samples
Die Idee ist, dass wir uns
Zufallsvariablen mit einer
bestimmten Dichte erzeugen
Die Zufallsvariablen
beschreiben in unserem
Kontext oft einen Ort auf
einer Oberfläche,
Oberfläche wodurch
die Bedeutung sehr
anschaulich wird.
„Hat die Dichte an einer
Stelle einen großen Wert,
dann ist hier auch die
Wahrscheinlichkeit sehr
hoch, dass hier Samples
generiert werden“
werden .
Dichte
Beispiel
Dichte
Wie groß ist die
Wahrscheinlichkeit, dass
S
Samples
l zwischen
i h P
Position
iti 1
und 2 generiert werden?
g
Verteilungsfunktion
P(1 ≤ X ≤ 2 ) = F (2 ) − F (1) ≈ 0.35
Die große Frage
Frage…
Wie generiert man
Zufallszahlen mit einer
gegebenen Dichte?
3
p( x ) = ⋅ x 2 , x ∈ (− 1, 1)
2
Als Basis haben wir den [0,1]verteilten Zufallsgenerator
unseres Computers (rand) …
Beispiel:
– Wir haben eine Reihe von
[0,1]-gleichverteilten
Zufallszahlen
(ξ1 , ξ 2 , K , ξ n )
– Wir wollen daraus Samples
xi mit einer gegebenen
Dichte erzeugen (s.
(s Bsp
Bsp.))
Di h
Dichte
Inverse CDF-Methode
CDF Methode
Wie generiert man Zufallszahlen mit einer gegebenen Dichte p ?
Vorgehen
– Bestimme die Verteilungsfunktion
– Invertiere diese: F −1 (
F(
)
)
– Bildet man gleichverteilte Samples ξ mit F −1 (
erhält
hält man S
Samples,
l
di
die nach
h p verteilt
t ilt sind.
i d
X = F −1 (ξ )
) ab, so
Erklärung zu inverserξ CDF
i
x
x
Dichte
Gegeben:
Verteilungsfunktion
– Punkt x mit F(x) = 0.7
Also:
– 70% aller Samples sollten links von
x sein und 30% rechts
Wenn man N gleichverteilte Samples ξ i
auf die y-Achse legt, dann sind etwa
70% davon unter F(x)=0.7
( )
Bildet man die Samples mit F −1 ( ) ab,
so landen diese 70% links von x auf der
x-Achse (da F monoton wachsend ist)
also genau das,
das was wir wollen
p( x )
Beispiel
2
p( x) = 2 x
Bestimme Zufallszahlen mit
der Dichte
p( x ) = 2 x, x ∈ (0, 1)
Verteilungsfunktion
Invertierung
2 x
0
0
Dichte
1
F (x) = x2
= x2
0
x= ξ
Pseudocode
ξ = (float) rand()/RAND_MAX;
x = sqrt
q (ξ);
F (x)
1
ξ = F ( x ) = ∫ 2t ⋅ dt = [t ]
x
0
x
0
0
1
Verteilungsfunktion
g
Beispiel 2
Bestimme Zufallszahlen mit
der Dichte
3 2
p( x ) = ⋅ x , x ∈ (− 1, 1)
2
Die Verteilungsfkt. erhält man
durch:
ξ = F ( x ) = ∫ p(t )dt =
−1
x
3
1
= ∫ ⋅ t 2 dt = ⎡⎢ ⋅ t 3 ⎤⎥ =
2
⎣ 2 ⎦ −1
−1
x3 1
= +
2 2
x3 1
ξ= +
2 2
x 3 = 2ξ − 1
x = 3 2ξ − 1
x
x
Invertierung liefert
Mehrdimensionale Zufallszahlen
Zunächst diskreter Fall
Beispiel
B i i l
– 3 x 3 Matrix mit
Wahrscheinlichkeiten
a sc e c e te P(x,y)
( ,y)
Frage: Wie generiert man
Samples nach dieser
Wahrscheinlichkeit
– also zz.B.
B 20% aller Samples
im rechten oberen Feld ?
Hier keine direkte Invertierung
möglich (!)
0.1
0.1
0.2
0.05 0.0
0.3
0.1
0.05 0.1
2 Schritt Verfahren
1. Schritt
– wähle eine Spalte aus
0.1
Bilde Spaltensummen
– Entspricht der
W h h i li hk it d
Wahrscheinlichkeit,
dass
ein Sample innerhalb der
Spalte
Spa
e landet
a de
– Reduktion 2D Æ 1D
0.1
0.2
0.05 0.0
0.3
0.1
Σ
0.05 0.1
0.25 0.15 0.6
z.B. 60% aller
Samples
landen in der
rechten Spalte
2 Schritt Verfahren
Generiere Sampleposition
nach
h iinverser CDF d
der
Spaltensummen
P( X = x )
P
F
0.25 0.15 0.6
0.25 0.4
1.0
F ( x ) = P( X ≤ x )
1.0
1.0
0.75
0.75
0.5
0.5
0.25
0.25
X
0
1
2
3
ξ1
X
0
1
2
3
P( y | x ) =
2 Schritt Verfahren
2. Schritt
– wähle Zeile innerhalb der
gewählten Spalte
– Normiere Spalte auf Summe 1
– Berechne Sampleposition
innerhalb der Spalte
S
mit
inverser CDF Methode
P( X = x )
0.1
0.1
P ( x, y )
P ( x)
0.33
0.2
: 0.6
0.05 0.0
0.1
0.3
0.5
0.16
0.05 0.1
F ( x ) = P( X ≤ x )
1.0
1.0
0.75
0.75
0.5
0.5
0.25
0.25
X
0
1
2
3
ξ2
X
0
1
2
3
Zusammenfassung
Bilde Spaltensummen
Wähle x-Position mit inverser CDF
Normiere gewählte Spalte
Wähle y-Position in Spalte mit inverser CDF
Wir haben uns im Beispiel für Feld (3,2) entschieden
Bei Wiederholung
g bekommt man Samples,
p , die nach P
verteilt sind
Stetige 2D Verteilung
Gegeben ist eine stetige
Dichtefunktion zz.B.
Dichtefunktion,
B
definiert auf einem
Rechteck
Gesucht: SampleVerteilung nach dieser
Dichte
F(x,y) :
Wahrscheinlichkeit, dass
Sample in Rechteck
[xmin, x] x [ymin, y] liegt
ymax
y
p ( x, y )
y
ymin
xmin
p=0
x
x
xmax
p>0
Verteilungsfunktion F(x
F(x,y)
y)
F(
F(x,y):
)
Wahrscheinlichkeit, dass
ein Sample im Bereich
[xmin, x] x [ymin, y] landet
F(x
F( min,ymin) = 0
F(xmax,ymax) = 1
ymax
y
1
F ( x, y )
ymin
0
x
xmin
F ( x, y ) =
xmax
y
x
∫ ∫ p( x' , y') dx' dy'
y min xmin
2 Schritt Verfahren
Schritt 1
– Auswahl
A
hl von x
ymax
y
– y wird auf Maximum
gesetzt
p ( x, y )
– Reduktion 2D Æ 1D
F ( x, ymax ) =
y max
x
∫ ∫ p(x' , y') dx' dy'
y min xmin
F(x,ymax) ist die
Wahrscheinlichkeit, daß
ein S
Sample
p links von x liegt
g
Bestimme x durch inverse
CDF mit F(x,ymax)
ymin
x
xmin
xmax
0
1
F ( x, ymax )
x
ξ1 = F ( x, ymax )
2 Schritt Verfahren
Schritt 2
– A
Auswahl
hl von y, wenn x
bekannt
p( y | x) =
ymax
p ( x, y )
=
p( x)
y
p ( x, y )
y max
∫ p(x, y') dy'
y min
– Suche y in „unendlich
dünnem“ Streifen
p ( x, y )
– Normierung
y
ξ 2 = F ( y | x) =
∫ p(x, y') dy'
y min
y max
∫ p(x, y') dy'
y min
F (ξ1 , y )
ξ2 =
F (ξ1 , ymax )
ymin
x
xmin
xmax
0
1
F ( x, ymax )
Die untere Formel gilt, falls sich p darstellen lässt als p( x, y ) = f ( x) ⋅ g ( y )
x
ξ1 = F ( x, ymax )
(Beweis Übung)
2D-Samples
2D
Samples Zusammenfassung
Problem: Bestimme 2D-Samples mit einer 2D-Dichte aus
zweii (0
(0, 1)
1)-gleichverteilten
l i h t ilt Z
Zufallsvariablen
f ll
i bl ξ1 und
d ξ2.
Berechne Verteilungsfunktion
F ( x, y ) =
x
∫ ∫ p( x' , y') dx' dy'
y min xmin
1. Schritt
2. Schritt
y
ξ1 = F ( x, ymax )
ξ2 =
F (ξ1 , y )
F (ξ1 , ymax )
Beispiel
Gegeben ist eine
Dichtefunktion p im Bereich
[0,1]x [0,1] und
Verteilungsfunktion F
p( x, y ) = 4 xy
x
⎡ x′ 2 ⎤
x2 y2
F ( x, y ) = ∫ ∫ p( x' , y ') dx′dy′ = ∫ ∫ 4 x′y′ dx′dy′ = 4 ∫ ⎢ ⎥ y′dy′ = 4
= x2 y 2
2 ⎦0
2 2
0 0
0 ⎣
0 0
p ist
i t eine
i Di
Dichte,
ht d
da F (1,1) = 1
y x
y x
Gesucht sind nach p verteilte
Samples
y
F ( x, ymax ) = F ( x,1) = x 2
ξ1 = x 2 ⇒ x = ξ1
F (ξ1 , y )
ξ1 y 2 y 2
ξ2 =
= 2 2 =
⇒ y = ξ2
F (ξ1 , ymax ) ξ1 1
1
2
Beispiel: Kreisscheibe
Gegeben ist eine Kreisscheibe
mit Radius R.
R Gesucht sind
gleichverteilte Samples
innerhalb des Kreises, also mit
Di ht
Dichte
F ( x, y ) =
x
d ' dy
d '
∫ ∫ p( x' , y') dx
123
y min xmin
ϕ r
dA
F (r , ϕ ) = ∫ ∫ p(r ' , ϕ ') r '⋅dr '⋅dϕ '
0 0
r
ϕ
R
1
p (r , ϕ ) =
π ⋅ R2
y
dA = r ⋅ dr ⋅ dϕ
Beispiel: Kreisscheibe
Berechnung der Verteilungsfunktion
ϕ r
r'
r 2 ⋅ϕ
F (r , ϕ ) = ∫ ∫
⋅dr '⋅dϕ ' =
2
2
π
⋅
R
2
⋅
π
⋅
R
0 0
1. Schritt
r 2 ⋅ 2π r 2
ξ1 = F (r , ϕ max ) = F (r , 2π ) =
= 2 ; r = R ξ1
2
R
2π ⋅ R
2. Schritt
F (ξ1 , ϕ )
ξ1 ⋅ ϕ 2π ⋅ R 2 ϕ
ξ2 =
=
⋅ 2
=
; ϕ = 2π ⋅ ξ 2
2
F (ξ1 , ϕ max ) 2π ⋅ R ξ1 ⋅ 2π 2π
2
Vergleich: Kreisscheibe
r = R ⋅ ξ1
r = R ξ1
ϕ = 2π ⋅ ξ 2
ϕ = 2π ⋅ ξ 2
Beispiel: Samplen einer Halbkugel
… gemäß dem Phong-Beleuchtungsmodell:
Dichte
n +1 n
p(θ , ϕ ) =
cos θ
2π
Verteilungsfunktion
θ ϕ
F (θ , ϕ ) = ∫ ∫ p(θ ' , ϕ ') sin θ '⋅dθ '⋅dϕ '
Samples
– (Beweis als Übung)
0 0
1
⎛
θ = arccos⎜ (1 − ξ1 )n +11 ⎞⎟
⎝
⎠
ϕ = 2π ⋅ ξ 2
Beispiel: Phong
n =1
(vollständig diffuse Oberfläche)
n = 10
Beispiele anderer
Samplingfunktionen
(Graphics Gems III)
Zusammenfassung
Generierung von Samples nach einer Dichte p
Diskret, stetig, 1D, 2D
Nächstes Mal
Berechnung eines Integrals mit Hilfe der Samples
Rendering Equation Æ Path Tracing