Benötigt die Kosinus-gewichtete Hemisphären-Probenahme bei der Berechnung des Beitrags für indirektes Licht noch NdotL?

12

Bei der Umstellung von einer einheitlichen Hemisphärenprobe auf eine kosinusgewichtete Hemisphärenprobe bin ich durch eine Aussage in einem Artikel verwirrt.

Mein aktueller indirekter Beitrag berechnet sich wie folgt:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

Wobei das Punktprodukt cos (θ) ist

In diesem Artikel über bessere Stichproben ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) schlägt der Autor jedoch vor, dass das PDF (cos (θ) / pi) ist und es keine Beweise dafür gibt die N Punkt L Berechnung.

Meine Frage ist - bedeutet das, dass ich die normale Punktstrahlrichtung nicht mehr ausführen muss, weil sie im PDF enthalten ist, oder zusätzlich zum PDF?

Steven
quelle

Antworten:

12

Sie müssen in der Tat immer mit dem Cosinus-Term multiplizieren (das ist Teil der Rendering-Gleichung). Wenn Sie jedoch indirekt mithilfe von Raytracing und damit Monte-Carol-Integration diffundieren (was in diesem Fall die häufigste Technik ist), müssen Sie den Beitrag jeder Probe durch Ihr PDF teilen . Dies ist gut exampled hier .

Beachten Sie auch, dass Sie in der genannten Referenz, wenn das PDF Begriffe enthält, die Sie auch in den Rendering-Gleichungen finden, den Code optimieren können, wenn Sie dies wünschen, indem Sie diese Begriffe streichen.

Vergessen Sie nicht, dass der BRDF einer diffusen Oberfläche ρ / π ist, wobei ρ für die Oberflächenalbedo steht. Wir müssen also das Ergebnis durch π teilen. Vergessen Sie jedoch nicht, dass wir im Fall der indirekten diffusen Komponente das Ergebnis von castRay durch das PDF der Zufallsvariablen teilen sollten, die, wie wir weiter oben in diesem Kapitel gezeigt haben, 1 / (2π) ist. Das Teilen von indirektem Diffus durch 1 / (2π) entspricht dem Multiplizieren dieses Wertes mit 2π. Und da die Albedo auch durch π geteilt wird, können wir den Code vereinfachen ...

Sie haben eine ähnliche Situation. Wenn Sie sich das PDF für die Kosinusabtastung ansehen, werden Sie feststellen, dass Begriffe aufgehoben werden können. Das heißt nicht, dass sie nicht unbedingt notwendig sind. Sie heben sich nur gegenseitig auf, wodurch der Code leicht optimiert werden kann (und einige Teilungen, Multiplikationen usw. vermieden werden). Sie sind hier mehr in der Mikrooptimierung ... was verwirrend sein kann, wenn Sie versuchen, die Theorie zu lernen, indem Sie nur optimierten Code betrachten (der oft nicht richtig kommentiert wird).

(cos(θ)...)PDF=(cos(θ)...)cos(θ)π=...

user18490
quelle
1
Vielen Dank! Das macht Sinn. Intuitiv wusste ich, dass es erforderlich war, aber ich erkannte nicht, dass es sich um eine Optimierung handelte.
Steven
5
Nur um sicherzustellen, dass dies explizit ist. Die kosinusgewichtete Hemisphäre ist nicht nur eine Optimierung, da weniger Anweisungen erforderlich sind, sondern auch eine Optimierung, da sie schneller konvergiert. Es werden weniger Proben benötigt, um ein besseres Ergebnis zu erzielen. Dies ist eine Form der Wichtigkeitsstichprobe.
Alan Wolfe
Genau - das war mein Wunsch, als ich versuchte, die Anzahl der Samples für indirekte Berechnungen in meinem Lightmapper zu reduzieren.
Steven