Was ist eine wichtige Stichprobe? In jedem Artikel, den ich darüber lese, wird "PDF" erwähnt. Was ist das auch?
Wie ich erfahre, handelt es sich bei der Wichtigkeitsprobe um eine Technik, mit der nur Bereiche auf einer Hemisphäre untersucht werden, die wichtiger sind als andere. Idealerweise sollte ich also Strahlen auf Lichtquellen richten, um das Rauschen zu verringern und die Geschwindigkeit zu erhöhen. Auch haben einige BRDFs bei Streifwinkeln kaum einen Unterschied in der Berechnung, also ist es gut, eine Stichprobe mit Wichtigkeit zu verwenden, um zu vermeiden, dass dies gut ist?
Wie könnte ich dies tun, wenn ich eine Stichprobe für einen Cook-Torrance-BRDF durchführen würde?
brdf
importance-sampling
Arjan Singh
quelle
quelle
Antworten:
Kurze Antwort:
Die Wichtigkeitsabtastung ist eine Methode zur Verringerung der Varianz in der Monte-Carlo-Integration, indem ein Schätzer ausgewählt wird, der der Form der tatsächlichen Funktion nahe kommt.
PDF ist eine Abkürzung für Probability Density Function . Ap df( x ) gibt die Wahrscheinlichkeit an, dass eine erzeugte Zufallsstichprobe x .
Lange Antwort:
Lassen Sie uns zunächst untersuchen, was Monte-Carlo-Integration ist und wie sie mathematisch aussieht.
Die Monte-Carlo-Integration ist eine Technik zur Schätzung des Wertes eines Integrals. Es wird normalerweise verwendet, wenn es keine geschlossene Formlösung für das Integral gibt. Es sieht aus wie das:
Auf Englisch bedeutet dies, dass Sie ein Integral approximieren können, indem Sie aufeinanderfolgende Zufallsstichproben aus der Funktion mitteln. WennN groß wird, kommt die Approximation der Lösung immer näher. p df( xich) repräsentiert die Wahrscheinlichkeitsdichtefunktion jeder Zufallsstichprobe.
Lassen Sie uns ein Beispiel: Berechnen Sie den Wert des Integralsich .
Nutzen wir die Monte Carlo Integration:
Ein einfaches Python-Programm, um dies zu berechnen, ist:
Wenn wir das Programm ausführen, erhalten wirI=0.4986941
Durch die Trennung nach Teilen erhalten wir die genaue Lösung:
Sie werden feststellen, dass die Monte-Carlo-Lösung nicht ganz korrekt ist. Dies liegt daran, dass es sich um eine Schätzung handelt. Das heißt, wennN gegen unendlich geht, sollte die Schätzung immer näher an die richtige Antwort heranreichen. Bereits bei N= 2000 einige Läufe fast identisch mit der richtigen Antwort.
Ein Hinweis zum PDF: In diesem einfachen Beispiel nehmen wir immer eine einheitliche Zufallsstichprobe. Eine einheitliche Zufallsstichprobe bedeutet, dass jede Stichprobe mit genau der gleichen Wahrscheinlichkeit ausgewählt wird. Wir tasten im Bereich[ 0 , 2 & pgr;] also ist p df( X ) = 1 / ( 2 π- 0 )
Die Stichprobenerhebung erfolgt durch nicht einheitliche Stichprobenerhebung. Stattdessen versuchen wir, mehr Samples auszuwählen, die viel zum Ergebnis beitragen (wichtig), und weniger Samples, die nur wenig zum Ergebnis beitragen (weniger wichtig). Daher der Name, die Bedeutung der Stichprobe.
Wenn Sie eine Sampling-Funktion wählen, deren PDF-Datei sehr genau der Form vonf , können Sie die Varianz stark reduzieren, was bedeutet, dass Sie weniger Samples nehmen können. Wenn Sie jedoch eine Abtastfunktion wählen, deren Wert sich stark von f , können Sie die Varianz erhöhen . Siehe folgendes Bild:
Bild aus der Dissertation von Wojciech Jarosz, Anhang A
Ein Beispiel für eine wichtige Abtastung bei der Pfadverfolgung ist die Auswahl der Richtung eines Strahls, nachdem er auf eine Oberfläche auftrifft. Wenn die Oberfläche nicht perfekt spiegelnd ist (z. B. ein Spiegel oder ein Glas), kann der austretende Strahl überall auf der Hemisphäre sein.
Wir könnten die Hemisphäre gleichmäßig abtasten, um den neuen Strahl zu erzeugen. Wir können jedoch die Tatsache ausnutzen, dass die Rendering-Gleichung einen Kosinusfaktor enthält:
Insbesondere wissen wir, dass alle Strahlen am Horizont stark abgeschwächt werden (speziellcos(x) ). Nahe am Horizont erzeugte Strahlen tragen also nicht viel zum Endwert bei.
Um dem entgegenzuwirken, verwenden wir Wichtigkeitsproben. Wenn wir Strahlen gemäß einer Kosinus-Halbkugel erzeugen, stellen wir sicher, dass mehr Strahlen weit über dem Horizont und weniger in der Nähe des Horizonts erzeugt werden. Dies verringert die Varianz und reduziert das Rauschen.
In Ihrem Fall haben Sie angegeben, dass Sie ein auf Mikrofacetten basierendes Cook-Torrance-BRDF verwenden. Die übliche Form ist:
woher
Der Blog "A Graphic's Guy's Note" bietet hervorragende Informationen zum Probieren von Cook-Torrance-BRDFs. Ich werde Sie auf seinen Blog-Beitrag verweisen . Trotzdem werde ich versuchen, im Folgenden eine kurze Übersicht zu erstellen:
Der NDF ist im Allgemeinen der dominierende Anteil des Cook-Torrance-BRDF. Wenn wir also eine Stichprobe von Bedeutung durchführen, sollten wir die Stichprobe auf der Grundlage des NDF durchführen.
Cook-Torrance gibt keinen bestimmten NDF an, der verwendet werden soll. es steht uns frei zu wählen, was unseren Vorstellungen entspricht. Das heißt, es gibt ein paar beliebte NDFs:
Jeder NDF hat eine eigene Formel, daher muss jede anders abgetastet werden. Ich werde nur die endgültige Sampling-Funktion für jeden zeigen. Wenn Sie sehen möchten, wie die Formel abgeleitet wird, lesen Sie den Blog-Beitrag.
GGX ist definiert als:
Zum Abtasten des sphärischen Koordinatenwinkelsθ können wir die Formel verwenden:
woherξ ist eine einheitliche Zufallsvariable.
Wir gehen davon aus, dass der NDF isotrop ist, damit wir eine Probe entnehmen könnenϕ gleichmäßig:
Beckmann ist definiert als:
Welche kann mit probiert werden:
Schließlich ist Blinn definiert als:
Welche kann mit probiert werden:
Umsetzen in die Praxis
Schauen wir uns einen grundlegenden Pfadfinder für Rückwärtsgänge an:
IE. Wir hüpfen durch die Szene und akkumulieren dabei Farbe und Lichtschwächung. Bei jedem Sprung müssen wir eine neue Richtung für den Strahl wählen. Wie oben erwähnt, könnten wir die Hemisphäre gleichmäßig abtasten, um den neuen Strahl zu erzeugen. Der Code ist jedoch schlauer. es ist wichtig, die neue Richtung auf der Grundlage der BRDF abzutasten. (Hinweis: Dies ist die Eingaberichtung, da wir ein Rückwärtspfadverfolger sind.)
Welche könnte implementiert werden als:
Nachdem wir die inputDirection ('wi' im Code) abgetastet haben, verwenden wir diese, um den Wert der BRDF zu berechnen. Und dann teilen wir nach der Monte-Carlo-Formel durch das pdf:
Wobei Eval () nur die BRDF-Funktion selbst ist (Lambert, Blinn-Phong, Cook-Torrance usw.):
quelle
wi
? Ich verstehe, wie man den sphärischen Koordinatenwinkel θ abtastet, aber wie wird das für den tatsächlichen Richtungsvektor gemacht?Wenn Sie eine 1D-Funktion habenf( x ) und Sie möchten diese Funktion von beispielsweise 0 bis 1 integrieren. Eine Möglichkeit, diese Integration durchzuführen, besteht darin, N Zufallsstichproben im Bereich [0, 1] auszuwerten f( x ) für jede Stichprobe und berechnen Sie den Durchschnitt der Stichproben. Diese "naive" Monte-Carlo-Integration soll jedoch "langsam konvergieren", dh Sie benötigen eine große Anzahl von Abtastwerten, um der Grundwahrheit nahe zu kommen, insbesondere wenn die Funktion hohe Frequenzen aufweist.
Bei der Wichtigkeitsabtastung nehmen Sie anstelle von N Zufallsstichproben im Bereich [0, 1] mehr Stichproben in den "wichtigen" Regionen vonf( x ) Das trägt am meisten zum Endergebnis bei. Da Sie die Abtastung jedoch auf die wichtigen Bereiche der Funktion ausrichten, müssen diese Abtastungen weniger gewichtet werden, um der Verzerrung entgegenzuwirken, mit der die PDF-Funktion (Wahrscheinlichkeitsdichtefunktion) einhergeht. PDF gibt die Wahrscheinlichkeit einer Stichprobe an einer bestimmten Position an und berechnet den gewichteten Durchschnitt der Stichproben, indem jede Stichprobe durch den PDF-Wert an jeder Stichprobenposition dividiert wird.
Bei Cook-Torrance-Stichproben besteht die übliche Praxis darin, Stichproben auf der Grundlage der Normalverteilungsfunktion NDF zu verteilen. Wenn NDF bereits normalisiert ist, kann es direkt als PDF dienen, was praktisch ist, da der Begriff aus der BRDF-Auswertung gestrichen wird. Sie müssen dann nur noch Beispielpositionen auf Basis von PDF verteilen und BRDF ohne den NDF-Begriff auswerten, d. H
Für NDF müssen Sie die kumulative Verteilungsfunktion des PDF- Dokuments berechnen , um die gleichmäßig verteilte Probenposition in die PDF-gewichtete Probenposition zu konvertieren. Für isotrope NDF vereinfacht sich dies aufgrund der Symmetrie der Funktion zur 1D-Funktion. Weitere Informationen zur CDF-Ableitung finden Sie in diesem alten GPU Gems-Artikel .
quelle