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