Nehmen wir an, wir verfolgen den Pfad und es gibt ein Objekt, das eine gewisse diffuse Reflexion und eine gewisse spiegelnde Reflexion aufweist.
Was ist der beste oder richtige Weg, um damit im Pfad-Tracer umzugehen?
Bei Betrachtung von smallpt ( http://www.kevinbeason.com/smallpt/ ) ist es nicht möglich, dass Objekte beides haben, sondern dass Materialien entweder diffus oder spiegelnd sind.
Ich habe einen anderen Pfadverfolgungscode gesehen, der eine Zufallszahl würfelt, um den Weg zu wählen, wobei die Luminanz des diffusen und spiegelnden Reflexionsvermögens als Gewichtung in der Zufallsrolle verwendet wird.
Ich habe auch Code gesehen, der in beiden Fällen beiden Pfaden folgt und divergiert und die Ergebnisse summiert, wobei jeder rekursive Strahl mit seinem entsprechenden Reflexionsvermögen multipliziert wurde.
Ich habe gesehen, wie die Brechung ähnlich wie oben behandelt wurde.
Gibt es eine physikalisch korrekte Möglichkeit, mit diesen Situationen umzugehen?
quelle
Antworten:
Machen wir einen Schritt zurück. Wenn Sie die Pfadverfolgung durchführen, führen Sie eine Monte-Carlo-Integration durch. Was bedeutet das? Sie versuchen zu lösen∫f(x)dx durch Probenahme. Die Monte-Carlo-Integration spricht für eine ausreichend großen :: 1n∑ni=0f(xi)→∫f(x)p(x)dx
Wenn wir stattdessen summierenf(xi)p(xi) wir bekommen 1n∑ni=0f(xi)p(xi)→∫f(x)dx . Nun deinf(x) ist die Rendering-Gleichung und Sie haben eine Möglichkeit, die Rendering-Gleichung zu approximieren.
Nachdem wir uns nun auf derselben Seite mit den Grundlagen befinden, wollen wir uns überlegen, was Sie tun. Sie erzeugen einen Lichtweg, der zu einer der Proben wirdf(xi)p(xi) . Dazu modellieren Sie die Wechselwirkung des Lichts mit der Oberfläche bei jedem Schritt entlang des Pfades. Und Sie aktualisieren immer Ihre aktuelle Pfadwahrscheinlichkeitp(xi) .
Was ist nun der richtige Weg, um mit einem Material umzugehen, das mehrere verschiedene Möglichkeiten hat, wie sich ein Strahl bewegen kann? Es gibt keinen richtigen Weg. Der einzige wichtige Teil ist, dass Ihre Werten , f(xi) und p(xi) bleib korrekt.
Wenn Sie den Pfad divergieren und zwei Strahlen erzeugen, müssen Sie die Anzahl erhöhenn der Gesamtproben entsprechend, weil Sie jetzt zwei Proben gemacht haben. Behandeln Sie dann beide Pfade so, als wären sie von Anfang an getrennt.
Wenn Sie nur einen Weg fortsetzen möchten, können Sie dies mit dem russischen Roulette tun. Definieren Sie drei Intervalle (eine übliche Methode besteht darin, die Intervalle als Partition der Zahlen zwischen 0 und 1 auszuwählen). Die relativen Größen dieser Intervalle müssen proportional zum Material sein. Der schwierige Teil ist, wie Sie dies entwerfen. In meiner Klasse haben wir ein Zahlenreflexionsvermögen definiertρ . Wir ziehen eine Zufallszahl zwischen 0 und 1, wenn sie niedriger als istρ Der Weg endet. Sonst denken wir nach. Das BRDF achtet darauf, den spiegelnden gegenüber dem diffusen Teil zu gewichten, wenn Sie genügend Proben machen.
Natürlich können Sie dies durch Wichtigkeitsstichproben verbessern, und hier haben Sie wahrscheinlich Probleme. Für ein sehr spiegelndes Oberflächendesign eine zufällige Verteilung, die nur mehr Richtungen aus der spiegelnden Reflexionsrichtung zieht. Die Ruhe wird diffus sein. Ich habe nicht genug Erfahrung mit dem Bulding von Pfad-Tracern, um Ihnen beim Entwerfen eines zu helfen, aber Ihre Quellen werden hier wahrscheinlich etwas haben.
Wichtig ist hier noch einmal: Entwerfen Sie es so, dass Sie wissen, wie wahrscheinlich eine bestimmte Richtung ist, und behalten Sie dann Ihrep(xi) Sie können also am Ende durch diese dividieren und eine korrekte Monte-Carlo-Schätzung erhalten.
TL; DR Es gibt keinen richtigen Weg. Es ist NUR wichtig, die Wahrscheinlichkeiten von Proben zu berücksichtigen.
Ich hoffe, ich habe den Punkt Ihrer Frage nicht ganz übersehen.
Ergänzung: Monte-Carlo-Sampling konvergiert immer mit unendlichen Samples gegen den korrekten Wert, solange Sie die Gewichtung nach Wahrscheinlichkeit korrigieren. Dies bedeutet, dass selbst wenn Sie eine völlig dumme Methode zum Generieren von Samples verwenden, dies funktioniert, wenn Sie dies lange genug tun. Vielleicht nicht in Ihrem Leben oder dem Ihrer Urenkel, aber es wird.
quelle