Il campionamento dell'emisfero ponderato per il coseno richiede ancora NdotL nel calcolo del contributo per la luce indiretta?


12

Durante la conversione da campionamento di emisfero uniforme a campionamento di emisfero ponderato per coseno, sono confuso da una dichiarazione in un articolo.

Il mio attuale contributo indiretto è calcolato come:

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

Dove il prodotto punto è cos (θ)

Ma in questo articolo su un migliore campionamento ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) l'autore suggerisce che il PDF è (cos (θ) / pi) e non ci sono prove di il calcolo del punto N.

La mia domanda è: significa che non ho più bisogno di eseguire il normale dot rayDirection perché è incluso nel PDF o è in aggiunta al pdf?

Risposte:


12

Devi sempre moltiplicare per il termine coseno (che fa parte dell'equazione di rendering). Tuttavia, quando si fa diffusione indiretta utilizzando il ray-tracing e quindi l'integrazione monte-carol (che è la tecnica più comune in questo caso), è necessario dividere il contributo di ciascun campione per il PDF . Questo è ben esemplificato qui .

Si noti inoltre che nel riferimento citato, se il PDF ha termini che si trovano anche nelle equazioni di rendering, è possibile ottimizzare il codice se lo si desidera, annullando questi termini.

Non dimenticare che il BRDF di una superficie diffusa è ρ / π dove ρ rappresenta l'albedo di superficie. Quindi dobbiamo dividere il risultato per π. Sebbene nel caso del componente diffuso indiretto, non dimenticare che avremmo dovuto dividere il risultato di castRay per il PDF della variabile casuale, che come abbiamo mostrato in precedenza in questo capitolo è 1 / (2π). Dividere indirettamente il Diffuso per 1 / (2π) equivale a moltiplicare questo valore per 2π. E poiché l'albedo è anche diviso per π possiamo semplificare il codice ...

Hai una situazione simile. Se guardi il PDF per il campionamento del coseno, ti accorgerai che i termini possono essere cancellati. Il che non significa che non siano "non" strettamente necessari. Lo sono, si annullano a vicenda, il che consente di ottimizzare leggermente il codice (ed evitare alcune divisioni, moltiplicazioni, ecc.). Sei più interessato alla micro-ottimizzazione qui ... che può essere fonte di confusione se provi ad apprendere la teoria semplicemente guardando il codice ottimizzato (che spesso non è adeguatamente commentato).

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


1
Grazie! Ciò ha senso. Intuitivamente sapevo che era necessario ma non riconoscevo che fosse un'ottimizzazione.
Steven,

5
Solo per essere sicuro che questo sia esplicito ... non solo l'emisfero ponderato per il coseno è un'ottimizzazione perché richiede meno istruzioni, ma è anche un'ottimizzazione perché converge più rapidamente. Sono necessari meno campioni per ottenere un risultato migliore. Questa è una forma di campionamento importante.
Alan Wolfe,

Esatto - quello era il mio desiderio mentre cercavo di ridurre il numero di campioni per i calcoli indiretti nel mio lightmapper.
Steven,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.