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