Path Tracer - mehrschichtige Materialien und Stichproben


12

Ich versuche derzeit, einen Monte-Carlo-Pfad-Tracer zu implementieren. Ich habe einige Nachforschungen angestellt und es scheint, dass ein gängiger Ansatz für Materialien darin besteht, ein Schichtenmodell zu verwenden. Etwas wie das:

Bildbeschreibung hier eingeben

Wenn Licht auf die Oberfläche trifft, gibt Fresnel an, wie viel von diesem Licht von der ersten Schicht reflektiert wird und wie viel zur zweiten und so weiter fließt.

Also habe ich etwas ähnliches gemacht, aber einfacher: nur eine Schicht Spiegel und eine Schicht diffus. Noch keine Übertragung. Soweit so gut, verwende ich für mein diffuses Modell eine einfache cosinusgewichtete brdf und für mein Spiegelbild das mikrofacettierte Cook-Torrance-Modell.

Nun kommt der schwierige Teil: Was soll ich tun, wenn ein Strahl auf die Oberfläche trifft? Normalerweise würde ich das dem Oberflächenmaterial entsprechende brdf auswählen, eine einfallende Lichtrichtung abtasten, das brdf auswerten und durch die richtige Wahrscheinlichkeitsverteilungsfunktion dividieren.

Aber hier entspricht ein Oberflächenschlag effektiv mehreren Materialien. Die naive Möglichkeit, dies zu handhaben, besteht darin, für jeden Layer-Treffer ein Sample zu erstellen. Aber dies ist eindeutig die Quelle eines riesigen Leistungseinbruchs, der dazu führt, dass mein Weg effektiv zu einem Baum wird.

Gibt es eine bessere Lösung?


1
Können Sie die Materialschichten nicht 'monte-carlo'? ZB: Gewichten Sie jede Schicht nach ihrem Reflexionsvermögen und wählen Sie eine davon nach dem Zufallsprinzip aus. Bei tieferen Schichten ist eine gewisse Dämpfung erforderlich, die auf der Summe der Absorption aller darüber liegenden Schichten basiert.
PaulHK

PaulHK Genau das mache ich in meinem Path Tracer, russisches Roulette für jede Schnittstelle zwischen Ebenen, also überhaupt keine Verzweigung. Leider ist meine Implementierung noch nicht abgeschlossen, daher liegen mir keine Informationen zur tatsächlichen Leistung vor. Ich habe meine Implementierung auf der Arbeit "Beliebig geschichtete Mikro-Facetten-Oberflächen" von Andrea Weidlich und Alexander Wilkie aufgebaut, die begrenzter zu sein scheint als das Framework von Wenzel Jakob (in der Antwort von Stefan), aber in der Lage ist ziemlich gute Ergebnisse zu generieren und ist viel einfacher zu implementieren.
Christian Pagot

Antworten:


7

Wenzel Jakob et al. Stellten auf der SIGGRAPH 2014 ein Framework für Schichtmaterialien vor . Abschnitt 6.2 erläutert die Stichprobenerhebung. Wenn Sie Code gegenüber Gleichungen bevorzugen, wird die Methode im Mitsuba-Renderer implementiert .


2
Es ist zu beachten, dass die Methode von Jakob et al. stützt sich auf das Rendern tabellarischer BSDF-Daten in einer speziellen Fourier-Basis-Darstellung. Einzelheiten finden Sie auch im entsprechenden technischen Bericht . Eine Open-Source-Implementierung ist auch in der neuesten, 3. Ausgabe von PBRT verfügbar . Die BSDF-Dateien können mit Layerlab in Python generiert werden .
Tizian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.