Pfadverfolgung & Materialien

8

Ich wundere mich über die Technik, die beim Abtasten eines Schichtmaterials für das nächste Ereignis in einem Pfad-Tracer verwendet wird. Ich habe ein Material mit drei Schichten: eine Basis diffus, spiegelnd und Glanzlappen. Wie wählt man eine diskrete Schicht aus, die für die nächste Strahlrichtung abgetastet werden soll? Ist das nur eine zufällige Auswahl? Wenn ja, werden den Schichten gleiche Gewichte zugewiesen oder werden Gewichte basierend auf dem endgültigen Beitrag eines Lappens verwendet? Vielen Dank für jeden Einblick in diese Phase der Probenahme.

~ M.

Mark Davies
quelle

Antworten:

12

Diese Frage hat etwas mit dieser zu tun .

Wie Alan bereits gesagt hat, führt das Verfolgen des tatsächlichen Lichtwegs durch jede Schicht zu physikalisch genaueren Ergebnissen. Ich werde meine Antwort auf ein Papier von Andrea Weidlich und Alexander Wilkie ( "Arbitriary Layered Micro-Facet Surfaces" ) stützen , das ich gelesen und teilweise implementiert habe. In der Arbeit gehen die Autoren davon aus, dass der Abstand zwischen zwei Schichten kleiner ist als der Radius eines Differentialflächenelements. Diese Annahme vereinfacht die Implementierung, da wir Schnittpunkte nicht für jede Ebene separat berechnen müssen, sondern davon ausgehen, dass alle Schnittpunkte über den Ebenen genau der gleiche Punkt sind.

Dem Papier zufolge müssen zwei Probleme gelöst werden, um mehrschichtiges Material zu rendern. Die erste besteht darin, die Schichten richtig abzutasten, und die zweite darin, die resultierende BSDF zu finden, die durch die Kombination der mehreren BSDFs erzeugt wird, die entlang des Abtastpfads gefunden werden.

UPDATE: Eigentlich habe ich eine andere Methode gewählt, um die Bewertung dieses Schichtmodells zu implementieren. Während ich mich an die Idee gehalten habe, die Schnittpunkte als genau den gleichen Punkt entlang der Schichten zu betrachten, habe ich die Abtastung und die endgültige BRDF unterschiedlich berechnet: Für die Abtastung habe ich gewöhnliches Raytracing verwendet, jedoch durch die Schichten (mit Russisch) Roulette zur Auswahl zwischen Reflexion / Brechung, wenn dies der Fall ist); Für die endgültige BRDF-Bewertung multipliziere ich einfach jedes BRDF, das vom Strahlengang durchlaufen wird (Gewichtung der einfallenden Strahlungsdichten gemäß dem Kosinus des einfallenden Strahls).

Probenahme

In dieser ersten Stufe werden wir den tatsächlichen Lichtweg durch die Schichten bestimmen. Wenn sich ein Lichtstrahl von einem weniger dichten Medium, z. B. Luft, zu einem dichteren Medium, z. B. Glas, bewegt, wird ein Teil seiner Energie reflektiert und der verbleibende Teil übertragen. Sie können die Energiemenge finden, die durch die Fresnel-Reflexionsgleichungen reflektiert wird . Wenn beispielsweise das Fresnel-Reflexionsvermögen eines bestimmten Dielektrikums 0,3 beträgt, wissen wir, dass 30% der Energie reflektiert werden und 70% übertragen werden:

Geben Sie hier die Bildbeschreibung ein

Wenn sich der Lichtstrahl von einem dichteren zu einem weniger dichten Medium bewegt, gilt das gleiche Prinzip, das durch das Fresnel-Reflexionsvermögen beschrieben wird. In diesem speziellen Fall kann jedoch auch eine Totalreflexion (auch bekannt als TIR) auftreten, wenn der Winkel des einfallenden Strahls über dem kritischen Winkel liegt. Bei TIR werden 100% der Energie zurück in das Material reflektiert:

Geben Sie hier die Bildbeschreibung ein

Wenn Licht auf einen Leiter oder eine diffuse Oberfläche trifft, wird es immer reflektiert (dies ist die Richtung der Reflexion, die sich auf den Typ des BRDF bezieht). In einem mehrschichtigen Material ist der resultierende Lichtweg das Gesamtergebnis all dieser Möglichkeiten. Unter der Annahme, dass die erste und die zweite Schicht dielektrisch sind und die dritte Schicht diffus ist, könnten wir im Fall eines dreischichtigen Materials beispielsweise den folgenden Lichtweg (tatsächlich einen Baum) erhalten:

Geben Sie hier die Bildbeschreibung ein

Wir können diese Art der Interaktion simulieren, indem wir jeden Lichtweg durch Rekursion und Gewichtung entsprechend dem tatsächlichen Reflexionsvermögen / Transmissionsgrad an den entsprechenden Einfallspunkten gewichten. Ein Problem hinsichtlich der Verwendung der Rekursion in diesem Fall besteht darin, dass die Anzahl der Strahlen mit der Tiefe der Rekursion zunimmt, wodurch sich der Rechenaufwand auf Strahlen konzentriert, die einzeln fast nichts zum Endergebnis beitragen können. Andererseits kann das Gesamtergebnis dieser einzelnen Strahlen bei tiefen Rekursionsniveaus signifikant sein und sollte nicht verworfen werden. In diesem Fall können wir russisches Roulette (RR) verwenden, um Verzweigungen und probabilistische Endlichtwege zu vermeiden, ohne Energie zu verlieren, jedoch auf Kosten einer höheren Varianz (lauteres Ergebnis). In diesem Fall ist das Ergebnis des Fresnel-Reflexionsvermögens oder des TIR, wird verwendet, um zufällig auszuwählen, welchem ​​Pfad gefolgt werden soll. Zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Wie zu sehen ist, kann das TIR- oder Fresnel-Reflexionsvermögen dazu führen, dass einige Strahlen unbegrenzt zwischen den Schichten zurückprallen. Soweit ich weiß, implementiert Mitsuba Kunststoff als zweischichtiges Material und verwendet für diesen speziellen Fall eine geschlossene Lösung, die eine unendliche Anzahl von Lichtreflexen zwischen den Schichten berücksichtigt. Mitsuba ermöglicht jedoch auch die Erzeugung von mehrschichtigen Materialien mit einer beliebigen Anzahl von Schichten. In diesem Fall wird eine maximale Anzahl von internen Bounces auferlegt, da für den allgemeinen Fall keine Lösung in geschlossener Form zu existieren scheint. Als Nebeneffekt kann beim Rendern etwas Energie verloren gehen, wodurch das Material dunkler aussieht, als es eventuell sein sollte.

In meiner aktuellen Implementierung von mehrschichtigem Material erlaube ich eine beliebige Anzahl von internen Bounces auf Kosten längerer Renderzeiten (naja ... eigentlich habe ich nur zwei Schichten implementiert ... eine dielektrische und eine diffuse :).

Eine zusätzliche Option ist das Mischen von Verzweigung und RR. Zum Beispiel könnten die anfänglichen Strahlen (niedrigere Tiefen) einen wesentlichen Beitrag zum endgültigen Bild leisten. Daher kann man sich dafür entscheiden, nur an den ersten ein oder zwei Kreuzungen zu verzweigen und danach nur RR zu verwenden. Dies ist zum Beispiel der Ansatz von smallpt .

Ein interessanter Punkt in Bezug auf mehrschichtige Materialien ist, dass einzelne reflektierte / durchgelassene Strahlen gemäß den entsprechenden BRDFs / BTDFs jeder Schicht wichtig abgetastet werden können.

Bewertung des endgültigen BSDF

Betrachtet man den folgenden mit RR berechneten Lichtweg:

Geben Sie hier die Bildbeschreibung ein

Lr

Lr=(fr1cosθ1pdf1(fr2cosθ2pdf2(fr3cosθ3pdf3(fr2cosθ4pdf2(Lifr1cosθ5pdf1)))))

pdfLi

fr=fr1fr2fr3fr2fr1

pdf=pdf1pdf2pdf3pdf2pdf1

cosθ=cosθ1cosθ2cosθ3cosθ2cosθ1

Lr=(frcosθpdf)Li

Das Papier von Andrea Weidlich und Alexander Wilkie berücksichtigt auch die Absorption, dh jeder Lichtstrahl kann entsprechend dem Absorptionsfaktor jeder durchlässigen Schicht und ihrer Dicke abgeschwächt werden. Ich habe die Absorption noch nicht in meinen Renderer aufgenommen, aber sie wird durch nur einen Skalarwert dargestellt, der gemäß dem Biergesetz ausgewertet wird .

Alternative Ansätze

Der Mitsuba-Renderer verwendet eine alternative Darstellung für mehrschichtiges Material basierend auf der "Tabellierung der Reflexionsfunktionen auf Fourier-Basis". Ich habe mich noch nicht damit befasst, könnte aber von Interesse sein: " Ein umfassender Rahmen für das Rendern von Schichtmaterialien " von Wenzel Jacob et al . Es gibt auch eine erweiterte Version dieses Papiers.

Christian Pagot
quelle
1
Ich möchte fragen (in der Hoffnung, dass Sie sich an das Papier erinnern), ob Sie sicher sind, Kosinusbegriffe für jede Ebene hinzuzufügen? Soweit ich weiß, berechnen wir die Rendering-Gleichung nur auf der obersten Ebene. Wir gehen nach unten, um die endgültige Ausgangsrichtung und die BRDF zu bestimmen. Vermisse ich etwas
Mustafa Işık
@ MustafaIşık Sie haben Recht, in der Zeitung werden die Kosinusbegriffe nicht zum endgültigen BRDF hinzugefügt. Tatsächlich habe ich einen etwas anderen Ansatz gewählt als den im Papier vorgeschlagenen (das werde ich in meine Antwort aufnehmen). In der Arbeit schlagen sie die Definition eines eindeutigen BRDF aus den geschichteten BRDFs vor. Ich fand den Ableitungsprozess etwas verwirrend: 1) Ich verstehe nicht, warum sie die einzelnen BRDFs hinzufügen (ich denke, sie sollten multipliziert werden);
Christian Pagot
t=(1G)+T21G
1
Das Papier sieht einfach aus, ist es aber nicht, da nicht jeder Begriff oder jede Strategie für eine genaue Implementierung klar genug erklärt wird. Es ist jedoch einflussreich. Ihre ist eher eine Simulation, die vom Papier vermieden wird, aber genauer.
Mustafa Işık
3

Wenn man es vom physischen Standpunkt aus betrachtet, scheint es, als würde es wie eine verallgemeinerte Version der diffusen / spiegelnden Berechnung funktionieren.

Sie würden mit der obersten Schicht beginnen und Fresnel usw. verwenden, um einen Prozentsatz des Lichts zu berechnen, der im Vergleich zu den Durchlässigkeiten reflektiert wird. Sie verwenden dann eine Zufallszahl, um zu bestimmen, welche davon für Ihre Stichprobe zu tun sind.

Im Falle einer Reflexion würden Sie den Spiegellappen Ihrer obersten Schicht machen, von der Oberfläche reflektieren und weitermachen.

Im Falle einer Übertragung würden Sie zur 2. Schicht wechseln.

Auf dieser Ebene würden Sie erneut die prozentuale Wahrscheinlichkeit berechnen, zu reflektieren oder zu übertragen.

Im Falle einer Reflexion würden Sie den Spiegellappen dieser zweiten Schicht verwenden, die Reflexion durchführen und weitermachen.

Im Falle einer Übertragung würden Sie zur inneren Schicht wechseln.

Für diese innerste Schicht würden Sie noch einmal herausfinden, ob Sie reflektieren oder übertragen müssen.

Zur Reflexion würden Sie den Spiegellappen dieser inneren Schicht verwenden.

Für die Transmission würden Sie Ihre diffuse Berechnung durchführen oder was auch immer Ihre innerste Oberfläche für das durchgelassene Licht tun möchte (Streuung unter der Oberfläche? Brechung? Usw.).

Ich bin mir nicht sicher, ob jede Schicht ihre eigene Brechung durchführen soll und ob Sie den Strahl technisch ein kleines Stück zwischen den Schichten bewegen sollten, um realistischere Effekte zu erzielen. Für Ihren Fall macht es möglicherweise keinen Unterschied.

Aber im Grunde genommen, wenn Sie eine Kugel mit 3 Schichten darauf hatten, sollte es sich so verhalten, als ob Sie 3 verschiedene Kugeln ineinander verschachtelt hätten, die jeweils eine einzelne Schicht hatten, die Transmission gegen Reflexion handhabte.

Ein geschichtetes Material ist nur eine kompaktere Art zu sagen, dass dies das ist, was Sie wollen, im Vergleich zu den drei separaten Objekten.

Alan Wolfe
quelle