Wahrscheinlichkeitstheorie fĂŒr physikalisch genaues Rendern

Bild

Einleitung


Beim Rendern wird hĂ€ufig die Berechnung mehrdimensionaler bestimmter Integrale verwendet: Zum Beispiel, um die Sichtbarkeit von rĂ€umlichen Lichtquellen (FlĂ€chenlicht), die den Pixelbereich erreichende Helligkeit, die ĂŒber einen Zeitraum eintreffende Helligkeit und die durch die Halbkugel eines OberflĂ€chenpunkts eintretende Strahlung zu bestimmen. Die Berechnung dieser Integrale erfolgt ĂŒblicherweise mit Hilfe der Monte-Carlo-Integration, bei der das Integral durch die Erwartung eines stochastischen Experiments ersetzt wird.

In diesem Artikel werde ich detailliert auf den grundlegenden Monte-Carlo-Integrationsprozess sowie auf verschiedene Techniken zur Reduzierung der Varianz der Technik eingehen. Dies erfolgt aus praktischer Sicht - es wird davon ausgegangen, dass der Leser mit der Wahrscheinlichkeitstheorie nicht sehr vertraut ist, aber dennoch effektive und korrekte Rendering-Algorithmen entwickeln möchte.

Definierte Integrale


Ein bestimmtes Integral ist ein Integral der Form  intbaf(x)dx wo [a,b] Ist ein Segment (oder eine Region), x - Skalar und f(x) - eine Funktion, die fĂŒr jeden Punkt im Segment berechnet werden kann. Wie in Wikipedia geschrieben , ist ein bestimmtes Integral ein Bereich mit einem Zeichen in einer Ebene x zeitlich begrenzt f Achse x und vertikale Linien x=a und x=b ( Abbildung 1a ).

Dieses Konzept erstreckt sich logischerweise auf eine grĂ¶ĂŸere Anzahl von Dimensionen: FĂŒr ein bestimmtes Doppelintegral wird der Bereich mit einem Vorzeichen zu einem Volumen mit einem Vorzeichen ( Abbildung 1b ), und fĂŒr bestimmte Mehrfachintegrale wird es im Allgemeinen zu einem mehrdimensionalen Volumen mit einem Vorzeichen .


Abbildung 1: Beispiele fĂŒr bestimmte Integrale.

In einigen FĂ€llen kann die FlĂ€che beispielsweise analytisch bestimmt werden , z f(x)=2 : auf dem Segment [a,b] Die FlĂ€che wird gleich sein 2(b−a) . In anderen FĂ€llen ist eine analytische Lösung beispielsweise unmöglich, wenn wir das Volumen des Teils des Eisbergs ĂŒber dem Wasser ermitteln mĂŒssen ( Abbildung 1c ). In solchen FĂ€llen f(x) oft kann durch Stichproben bestimmt werden.

Numerische Integration


Wir können die FlĂ€che komplexer Integrale durch numerische Integration nĂ€herungsweise berechnen. Ein Beispiel ist die Riemannsche Summe . Dieser Betrag wird berechnet, indem die FlĂ€che in regelmĂ€ĂŸige Formen (z. B. Rechtecke) unterteilt wird, die zusammen eine FlĂ€che bilden, die einer echten FlĂ€che Ă€hnlich ist. Die Riemannsche Summe ist wie folgt definiert:

 tag1S= sumni=1f(xi) Deltaxi


n Ist die Anzahl der Unterintervalle und  Deltaxi= fracb−an - die Breite eines Unterintervalls. FĂŒr jedes Intervall i wir probieren f an einem Punkt xi innerhalb des Unterintervalls (in Abbildung 2 befindet sich dieser Punkt am Anfang des Unterintervalls).


Abbildung 2: Riemann-Summe.

Es ist erwÀhnenswert, dass mit zunehmender n die Riemannsche Summe konvergiert gegen den realen Wert des Integrals:

 tag2 intbaf(x)dx= lim|| Deltax|| bis0 sumni=1f(xi) Deltaxi


Die Riemann-Summe kann auch fĂŒr große Dimensionen verwendet werden ( Abbildung 3 ). Hier haben wir jedoch ein Problem: FĂŒr eine Funktion mit zwei Parametern sollte die Anzahl der Teilintervalle viel grĂ¶ĂŸer sein, wenn wir eine Auflösung erreichen wollen, die mit der im zweidimensionalen Fall verwendeten vergleichbar ist. Dieses PhĂ€nomen nennt man den Fluch der Dimensionen , und in höheren Dimensionen verschĂ€rft es sich.


Abbildung 3: Riemann-Summe fĂŒr ein Doppelintegral.

Nun werden wir die Genauigkeit der Riemann-Summe fĂŒr die folgende Funktion auswerten (wir haben absichtlich eine komplexe Funktion gewĂ€hlt):

 tag3f(x)= left| sin left( frac12x+ frac pi2 right) tan fracx27+ sin left( frac35x2 right)+ frac4x+ pi+1−1 right|


Funktionsdiagramm fĂŒr ein Segment [−2.5,2.5] unten gezeigt. Als Referenz haben wir ein bestimmtes Integral in Wolfram Alpha berechnet  int2.5−2.5f(x) Bereich bekommen 3.12970 . Die Grafik rechts zeigt die Genauigkeit der numerischen Integration unter Verwendung der Riemann-Summe zur Erhöhung n .


Abbildung 4: Funktionsgraph und Riemannsche Summengenauigkeit. Auch bei kleinen n Wir erhalten ein ziemlich genaues Ergebnis.

Um sich ein Bild von der Genauigkeit zu machen, geben wir die Zahlen ein: z n=50 der fehler ist  2 times10−3 . Bei n=100 der fehler ist  3 times10−4 . Die folgende GrĂ¶ĂŸenordnung ergibt sich mit n=200 .

Weitere Informationen zu Riemann-BetrÀgen finden Sie in den folgenden Ressourcen:


Monte Carlo (1)


Beim Rendern sind fast keine (und vielleicht ĂŒberhaupt keine?) Integrale einzeln . Das heißt, wir werden schnell auf den Fluch der Dimensionen stoßen. DarĂŒber hinaus ist das Abtasten einer Funktion in gleichen Intervallen nicht ausreichend abgetastet und verzerrt : Es können wichtige Werte der Funktion ĂŒbersprungen oder ungewollte gegenseitige Interferenzen zwischen der abgetasteten Funktion und dem Abtastmuster auftreten ( Abbildung 5 ).


Abbildung 5: Verzerrungen fĂŒhren zum Verlust von Teilen der abgetasteten Funktion (rot) und in diesem Fall zu einer völlig falschen Interpretation der Funktion.

Diese Probleme werden mit einer Technik namens Monte-Carlo-Integration gelöst. Ähnlich wie bei der Riemann-Summe wird auch bei einer Menge von Punkten eine Funktionsabtastung verwendet, aber im Gegensatz zum deterministischen Riemann-Summenmuster wird eine grundsĂ€tzlich nicht deterministische Zutat verwendet: Zufallszahlen.

Die Monte-Carlo-Integration basiert auf folgender Beobachtung: Das Integral kann durch die Erwartung eines stochastischen Experiments ersetzt werden:

 tag4 intbaf(x)dx=(ba)E left[f(X) right] ungefĂ€hr fracban sumni=1f(X)


Mit anderen Worten, wir testen die Funktion n Zeiten an zufĂ€lligen Punkten innerhalb eines Segments (bezeichnet mit einem Großbuchstaben) X ), mittle die Abtastwerte und multipliziere mit der Breite des Segments (fĂŒr eine eindimensionale Funktion). Wie im Fall der Riemannschen Summe, wenn n bis unendlich konvergiert der Durchschnittswert der Abtastwerte zur Erwartung, dh zum wahren Wert des Integrals.

Ein bisschen Wahrscheinlichkeitstheorie


Es ist wichtig, jedes der hier verwendeten Konzepte zu verstehen. Beginnen wir mit dem Warten : Dies ist der Wert, der fĂŒr eine einzelne Stichprobe erwartet wird. Beachten Sie, dass dies nicht unbedingt ein möglicher Wert ist, der möglicherweise nicht intuitiv zu sein scheint. Wenn wir zum Beispiel den WĂŒrfel werfen, ist die Erwartung gleich 3.5 - der Durchschnitt aller möglichen Ergebnisse: (1+2+3+4+5+6)/6=21/6=3.5 .

Das zweite Konzept sind Zufallszahlen . Dies mag offensichtlich erscheinen, aber fĂŒr die Monte-Carlo-Integration benötigen wir gleichmĂ€ĂŸig verteilte Zufallszahlen, d.h. Jeder Wert sollte die gleiche Wahrscheinlichkeit der Erzeugung haben. Wir werden spĂ€ter mehr darĂŒber sprechen.

Das dritte Konzept ist die Abweichung und die damit verbundene Varianz . Selbst wenn wir eine kleine Anzahl von Zahlen verwenden, sollten der erwartete Durchschnittswert sowie die Erwartung fĂŒr jede einzelne Stichprobe gleich sein. Bei der Berechnung von Gleichung 4 erhalten wir jedoch selten einen solchen Wert. Abweichung ist der Unterschied zwischen der Erwartung und dem Ergebnis des Experiments: X−E(X) .

In der Praxis hat diese Abweichung eine interessante Verteilung:


Dies ist ein Diagramm der Normalverteilung oder der Gaußschen Verteilung : Es zeigt, dass nicht alle Abweichungen gleich wahrscheinlich sind. TatsĂ€chlich liegen ungefĂ€hr 68,2% der Proben im Bereich −1 sigma..1 sigma wo  sigma (Sigma) ist die Standardabweichung . Die Standardabweichung kann auf zwei Arten beschrieben werden:

  • Die Standardabweichung ist ein Maß fĂŒr die DatenvariabilitĂ€t .
  • 95% der Datenpunkte liegen innerhalb 2 sigma vom Durchschnitt.

Es gibt zwei Methoden, um die Standardabweichung zu bestimmen:

  1. Standardabweichung  sigma= sqrt frac1n sumni=1 left(Xi−E left[X right] right)2 : Kann berechnet werden, wenn eine diskrete Wahrscheinlichkeitsverteilung vorliegt und die Erwartung bekannt ist E[X] . Dies gilt fĂŒr WĂŒrfel, in denen X=1,2,3,4,5,6 und E[X]=3.5 . Wenn wir die Zahlen ersetzen, bekommen wir  sigma=1.71 .
  2. Auch die Standardabweichung der Stichproben kann wie folgt berechnet werden  sigma= sqrt frac1n−1 sumni=1 left(Xi−X right)2 . Lesen Sie mehr dazu auf Wikipedia .

ÜberprĂŒfen Sie: Ist das richtig? Wenn  sigma=1.71 erklĂ€ren wir, dass 68,2% der Proben innerhalb von 1,71 von 3,5 liegen. Wir wissen das 2,3,4,5 dieses Kriterium erfĂŒllen und 1 und 6 - Nein. Vier von sechs sind 66,7%. Wenn unser WĂŒrfel irgendeinen Wert in dem Intervall erzeugen könnte [1..6] Dann wĂŒrden wir genau 68,2% bekommen.

Anstelle der Standardabweichung wird das zugehörige Konzept der Varianz definiert als Var left[X right]= sigma2 . Da das Quadrat verwendet wird, ist die Varianz immer positiv, was bei den Berechnungen hilfreich ist.


Monte Carlo (2)


Oben haben wir Gleichung 3 mit der Riemann-Summe nÀherungsweise berechnet. Nun wiederholen wir dieses Experiment mit der Monte-Carlo-Integration. Denken Sie daran, dass die Monte-Carlo-Integration wie folgt definiert ist:

 tag5 intbaf(x)dx=(ba)E left[f(X) right] ungefĂ€hr fracban sumni=1f(X)


Lassen Sie uns dies in C-Code ĂŒbersetzen:

double sum = 0; for( int i = 0; i < n; i++ ) sum += f( Rand( 5 ) - 2.5 ); sum = (sum * 5.0) / (double)n; 

Ergebnis fĂŒr Werte von n=2 vorher n=200 in der folgenden Tabelle gezeigt. Daraus ist zu schließen, dass die Monte-Carlo-Integration deutlich schlechter ausfĂ€llt als die Riemann-Summe. Eine genauere Betrachtung des Fehlers besagt, dass mit n=200 der durchschnittliche Fehler der Riemann-Summe ist 0,0002 und Monte Carlo 0.13 .


Abbildung 6: Monte-Carlo-Fehler bei 2..200 Stichproben.

In höheren Dimensionen wird dieser Unterschied verringert, aber nicht vollstÀndig beseitigt. Die unten gezeigte Gleichung ist eine erweiterte Version der oben verwendeten und empfÀngt zwei Parameter:

f(x,y)= left| sin left( frac12x+ frac pi2 right) tan fracx27+ sin left( frac16x2 right)+ frac4x+ pi+1−1 right| left| sin left(1.1y right) cos left(2.3x right) right|(6)



Abbildung 7: Graph der obigen Gleichung.

Im Bereich der Definition x∈[−2,5,2,5],y∈[−2,5,2,5] Volumen durch diese Funktion und Ebene begrenzt xy ist gleich 6.8685 . Bei n=400 (20 × 20 Abtastwerte) ist der Fehler der Riemannschen Summe 0.043 . Bei der gleichen Anzahl von Abtastwerten betrĂ€gt der durchschnittliche Monte-Carlo-Integrationsfehler 0,33 . Dies ist besser als das vorherige Ergebnis, aber der Unterschied ist immer noch signifikant. Um dieses Problem zu verstehen, werden wir die bekannte Monte-Carlo-Integrationsdispersionsreduktionstechnik untersuchen, die als "Schichtung" bezeichnet wird.


Abbildung 8: Auswirkungen der Schichtung; a) Proben mit schlechter Verteilung; b) Proben mit gleichmĂ€ĂŸiger Verteilung.

Durch die Schichtung wird die Einheitlichkeit der Zufallszahlen erhöht. In 8a werden acht Zufallszahlen verwendet, um die Funktion abzutasten. Da jede Zahl zufĂ€llig ausgewĂ€hlt wird, stellt sich heraus, dass sie hĂ€ufig ungleichmĂ€ĂŸig ĂŒber den Definitionsbereich verteilt sind. Abbildung 8b zeigt den Effekt der Schichtung: Der Definitionsbereich ist in acht Schichten unterteilt, und in jeder Schicht wird eine zufĂ€llige Position ausgewĂ€hlt, wodurch die GleichmĂ€ĂŸigkeit verbessert wird.

Der Effekt auf die Varianz ist ziemlich offensichtlich. 9a zeigt eine grafische Darstellung der Ergebnisse mit und ohne Schichtung. Abbildung 9b zeigt den ungefĂ€hren Wertefehler. Bei n=10 Der durchschnittliche Fehler fĂŒr 8 Schichten ist 0.05 ; fĂŒr 20 Schichten - 0.07 und fĂŒr 200 Schichten sinkt es auf 0,002 € . Aufgrund dieser Ergebnisse scheint es sinnvoll, eine große Anzahl von Streifen zu verwenden. Die Schichtung weist jedoch Nachteile auf, die mit zunehmender Anzahl von Schichten zunehmen. Erstens sollte die Anzahl der Stichproben immer ein Vielfaches der Anzahl der Schichten sein. zweitens leidet die Schichtung wie in der Riemannschen Summe unter dem Fluch der Dimensionen.


Abbildung 9: Schichtung und Varianz: a) ein ungefĂ€hrer Wert fĂŒr die Anzahl der Stichproben von n = 2 bis n = 200; b) Abweichung.

Beispiel fĂŒr die Wichtigkeit


In den vorherigen Abschnitten haben wir die Gleichungen gleichmĂ€ĂŸig abgetastet. Die Erweiterung der Integrationsfunktion von Monte Carlo ermöglicht es uns, die Situation zu Ă€ndern:

 tag7 intbaf(x)dx=(ba)E left[f(X) right] ungefĂ€hr fracban sumni=1 fracf(X)p(X)


Hier p(X) Ist eine Wahrscheinlichkeitsdichtefunktion (pdf) : Sie bestimmt die relative Wahrscheinlichkeit, dass eine Zufallsvariable einen bestimmten Wert annimmt.

FĂŒr eine einheitliche Zufallsvariable im Intervall 0..1 , pdf ist 1 ( Abbildung 10 a), und dies bedeutet, dass jeder Wert die gleiche Wahrscheinlichkeit der Wahl hat. Wenn wir diese Funktion ĂŒber integrieren [0,0.5] dann bekommen wir die Wahrscheinlichkeit in 0.5 von was X< frac12 . FĂŒr X> frac12 Wir haben offensichtlich die gleiche Wahrscheinlichkeit.


Abbildung 10: Wahrscheinlichkeitsverteilungen. a) Konstante pdf, bei der jede Stichprobe die gleiche Wahrscheinlichkeit der Wahl hat; b) pdf, wenn Stichproben unter 0,5 eine höhere Selektionswahrscheinlichkeit haben.

Abbildung 10b zeigt ein weiteres PDF. In diesem Fall ist die Wahrscheinlichkeit, eine Zahl zu erzeugen, geringer  frac12 gleich 70%. Dies kann mit dem folgenden Code-Snippet implementiert werden:

 float SamplePdf() { if (Rand() < 0.7f) return Rand( 0.5f ); else return Rand( 0.5f ) + 0.5f; } 

Dieses PDF ist wie folgt definiert:

\ tag {8} p (x) = \ left \ {\ begin {matrix} 1.4, wenn x <\ frac {1} {2} \\ 0.6, andernfalls \ end {matrix} \ right.


Die zahlen 1.4 und 0.6 reflektieren die Notwendigkeit dieser Wahrscheinlichkeit x< frac12 war gleich 70%. Bei der Integration von PDF von [0.. frac12] gibt 1.4 times frac12 und 0.6 times frac12 gleich 0.3 . Dies zeigt eine wichtige Anforderung fĂŒr alle PDFs im Allgemeinen: Das Ergebnis der PDF-Integration sollte 1 sein. Eine weitere Anforderung ist die folgende p(x) kann nicht null sein, wenn f(x) ungleich null: es wĂŒrde bedeuten, dass die teile f haben eine Stichprobenwahrscheinlichkeit von Null, was sich offensichtlich auf den Wert auswirkt.

Einige Tipps zum VerstÀndnis des PDF-Konzepts:

  • Ein PDF-Wert beschreibt nicht die Wahrscheinlichkeit: Daher kann das lokale PDF grĂ¶ĂŸer als 1 sein (z. B. wie im gerade untersuchten PDF).
  • Das Integral ĂŒber den Definitionsbereich von pdf ist jedoch eine Wahrscheinlichkeit, was bedeutet, dass die Integration von pdf 1 ergibt.

Ein Wert kann als relative Möglichkeit des Auftretens eines bestimmten Werts interpretiert werden.

Es ist zu bedenken, dass die Normalverteilung eine Wahrscheinlichkeitsverteilungsfunktion ist: Sie gibt uns die Wahrscheinlichkeit, dass sich eine Zufallsvariable in einem bestimmten Intervall befindet. Bei einer Normalverteilung ist diese Zufallsvariable eine Abweichung vom Mittelwert. Wie bei jedem anstÀndigen PDF ist das Ergebnis der Integration der Normalverteilung 1.

Daher können wir mit Gleichung 7 eine ungleichmĂ€ĂŸige Abtastung durchfĂŒhren. Sie kompensiert dies, indem sie jede Stichprobe durch die relative Wahrscheinlichkeit ihrer Wahl dividiert. Wie wichtig dies ist, zeigt Abbildung 11a . Der Funktionsgraph zeigt ein signifikantes Intervall, in dem sein Wert liegt 0 . Das Abtasten in diesem Bereich ist sinnlos: Der Summe wird nichts hinzugefĂŒgt, wir teilen einfach durch eine grĂ¶ĂŸere Zahl. Denken Sie an den Eisberg aus Abbildung 1c : Es macht keinen Sinn, die Höhe in einem großen Bereich um den Eisberg zu messen.


Abbildung 11: pdf fĂŒr eine Funktion mit Nullwerten.

Ein PDF mit dieser Kenntnis der Funktion ist in Abbildung 11b dargestellt . Beachten Sie, dass dieses PDF fĂŒr den Wertebereich tatsĂ€chlich Null ist. Dies macht es nicht zu einem falschen PDF: An manchen Stellen ist die Funktion Null. Wir können diese Idee ĂŒber Null hinaus erweitern. Die Proben werden am besten an den Stellen ausgegeben, an denen die Funktion signifikante Werte aufweist. TatsĂ€chlich ist das ideale PDF proportional zur abgetasteten Funktion . Ein sehr gutes PDF fĂŒr unsere Funktion ist in Abbildung 12a dargestellt . Ein noch besseres PDF wird in Abbildung 12b gezeigt . In beiden FĂ€llen dĂŒrfen wir nicht vergessen, es so zu normalisieren , dass das Integral gleich 1 ist.


Abbildung 12: Erweitertes PDF fĂŒr die Funktion in Abbildung 11.

Das PDF in Abbildung 12 stellt uns vor zwei Aufgaben:

  1. Wie erstelle ich ein solches PDF?
  2. wie man ein solches pdf probiert?

Die Antwort auf beide Fragen ist die gleiche: Wir brauchen das nicht zu tun. In vielen FĂ€llen ist die Funktion, die wir integrieren möchten, unbekannt, und die einzige Möglichkeit, die Stellen zu bestimmen, an denen sie von Bedeutung ist, besteht darin, sie abzutasten. Dazu benötigen wir PDF-Dateien. klassische Situation von "HĂŒhnchen und Eiern".

In anderen FÀllen haben wir jedoch eine ungefÀhre Vorstellung davon, wo die Funktion höhere Werte oder Nullwerte liefern kann. In solchen FÀllen ist ein sehr raues PDF oft besser als kein PDF.

Möglicherweise haben wir auch die Möglichkeit, PDFs im laufenden Betrieb zu erstellen. Einige Beispiele geben eine Vorstellung von der Form der Funktion, und auf deren Grundlage richten wir die nachfolgenden Beispiele an die Stellen, an denen wir hohe Werte erwarten, die wir zur Verbesserung von PDF-Dateien usw. verwenden.

Im nÀchsten Artikel wenden wir diese Konzepte auf die Rendering-Implementierung an. Eine ernsthafte Herausforderung ist das Erstellen von PDF. Wir untersuchen mehrere FÀlle, in denen pdfs bei der Stichprobenauswahl hilfreich ist.

Source: https://habr.com/ru/post/de480926/


All Articles