Percorso che traccia il Cook-Torrance BRDF


27

- Ci scusiamo per il lungo post, ma preferisco fare così perché "Il diavolo è nei dettagli " :)

Sto scrivendo un tracciatore di tracciati da zero e sta funzionando bene per superfici perfettamente diffuse (lambertiane) ( cioè il test del forno indica - almeno visivamente - che sta risparmiando energia e che le immagini renderizzate corrispondono a quelle generate con il renderer Mitsuba per lo stesso parametri). Ora sto implementando il supporto per il termine speculare dell'originale modello microfacet Cook-Torrance, al fine di rendere alcune superfici metalliche. Tuttavia, sembra che questo BRDF stia riflettendo più energia di quella ricevuta. Vedi le immagini di esempio di seguito:

Immagine di riferimento di Mitsuba.

Immagine sopra: immagine di riferimento di Mitsuba (presumibilmente corretta): tracciatura del percorso con campionamento della luce diretta, campionamento dell'emisfero di importanza, lunghezza del percorso massima = 5, 32 spp stratificati, filtro a scatola, rugosità superficiale = 0,2, RGB.

Immagine di rendering

Immagine sopra: Immagine renderizzata effettiva: Traccia percorso naïve forza bruta, campionamento emisfero uniforme, lunghezza percorso max = 5, 4096 spp stratificato, filtro box, rugosità superficiale = 0,2, RGB. Nonostante alcune differenze rispetto alle impostazioni di rendering, è chiaro che l'immagine renderizzata non converge al riferimento mostrato in precedenza.

Tendo a pensare che non si tratti di un problema di implementazione, ma di un problema relativo all'uso corretto del modello Cook-Torrance nel framework delle equazioni di rendering. Di seguito spiego come sto valutando il BRDF speculare e vorrei sapere se lo sto facendo correttamente e, in caso contrario, perché.

Prima di entrare nei dettagli nitidi, nota che il renderer è abbastanza semplice: 1) implementa solo l'algoritmo di tracciamento del percorso naïve della forza bruta - nessun campionamento della luce diretta, nessun tracciato bidirezionale, nessuna MLT; 2) tutto il campionamento è uniforme sull'emisfero sopra il punto di intersezione - nessun campionamento importante, né per le superfici diffuse; 3) il raggio percorso ha una lunghezza massima fissa di 5 - nessuna roulette russa; 4) radianza / riflettanza sono informate tramite tuple RGB - nessun rendering spettrale.

Modello in microfibet Cook Torrance

Ora proverò a costruire il percorso che ho seguito per implementare l'espressione speculare di valutazione BRDF. Tutto inizia con l'equazione di rendering dove è l'intersezione punto in superficie, è il vettore di visualizzazione,

Lo(p,wo)=Le+ΩLi(p,wi)fr(wo,wi)cosθdω
w o w i L o w o L i p w i cos θ = nw ipwowiè il vettore leggero, è la radiosità in uscita lungo , è l'incidente di radiosità su lungo e .LowoLipwicosθ=nwi

L'integrale di cui sopra ( ovvero il termine di riflessione dell'equazione di rendering) può essere approssimato con il seguente stimatore Monte Carlo dove è la funzione di densità di probabilità (PDF) che descrive la distribuzione del campionamento vettori . pwk

1Nk=1NLi(p,wk)fr(wk,wo)cosθp(wk)
pwk

Per il rendering effettivo, è necessario specificare BRDF e PDF. Nel caso del termine speculare del modello Cook-Torrance, sto usando il seguente BRDF dove Nelle equazioni precedenti, D=1

fr(wi,wo)=DFGπ(nwi)(nwo)
F=cspec+(1-cspec)(1-wih)5G=min(1,2(nh)(nwo)
D=1m2(nh)4exp((nh)21m2(nh)2)
F=cspec+(1cspec)(1wih)5
G=min(1,2(nh)(nwo)woh,2(nh)(nwi)woh)
h=wo+wi|wo+wi| e è il colore speculare. Tutte le equazioni, ad eccezione di , sono state estratte dal documento originale. , nota anche come approssimazione di Schlick , è un'approssimazione efficiente e meno accurata dell'attuale termine di Fresnel.cspecFF

Sarebbe obbligatorio utilizzare il campionamento di importanza in caso di rendering di superfici speculari lisce. Tuttavia, sto modellando solo superfici ragionevolmente ruvide ( ), quindi ho deciso di continuare con un campionamento uniforme per un po '(a costo di tempi di rendering più lunghi). In questo caso, il PDF è Sostituendo il PDF uniforme e Cook-Torrance BRDF nello stimatore Monte Carlo (notare che è sostituita da , la variabile casuale), ottengo m0.2

p(wk)=12π
wiwk
1Nk=1NLi(p,wk)(DFGπ(nwk)(nwo))cosθ(12π)
Ora possiamo cancellare i e rimuovere la somma perché spariamo solo un raggio casuale dal punto di intersezione. con Dato che , possiamo semplificarlo ulteriormente π
2Li(p,wk)(DFG(nwk)(nwo))cosθ
cosθ=nwk
2Li(p,wk)(DFGnwo)

Quindi, questa è l'espressione che sto valutando quando un raggio colpisce una superficie speculare la cui riflettanza è descritta dal BRDF di Cook-Torrance. Questa è l'espressione che sembra riflettere più energia di quella ricevuta. Sono quasi sicuro che ci sia qualcosa di sbagliato (o nel processo di derivazione), ma non riesco proprio a individuarlo.

È interessante notare che, se moltiplico l'espressione sopra per , ottengo risultati che sembrano corretti. Tuttavia, mi sono rifiutato di farlo perché non posso giustificarlo matematicamente.1π

Qualsiasi aiuto è molto gradito! Grazie!

AGGIORNARE

Come sottolineato da @wolle di seguito, questo documento presenta una nuova formulazione più adatta per il tracciamento del percorso, in cui la normale funzione di distribuzione (NDF) include il fattore e il BRDF include il Fattore . Quindi e Rifai l'inclusione delle equazioni precedenti in l'equazione di rendering, ho finito con D1πfr14frnew(wi,wo

Dnew=1πm2(nh)4exp((nh)21m2(nh)2)
frnew(wi,wo)=DFG4(nwi)(nwo)
Dfr
π2Li(p,wk)(DnewFGnwo)
che ha funzionato bene! PS: Il problema ora è capire meglio come la nuova formulazione per e aiuta a mantenere il risparmio energetico ... ma questo è un altro argomento.Dfr

AGGIORNAMENTO 2

Come sottolineato da PeteUK , la paternità della formulazione di Fresnel presentata nel testo originale della mia domanda è stata erroneamente attribuita a Cook e Torrance. La formulazione di Fresnel usata sopra è in realtà conosciuta come approssimazione di Schlick e prende il nome da Christophe Schlick. Il testo originale della domanda è stato modificato di conseguenza.


Non sono sicuro se stai ancora visitando questo sito, ma ho una domanda sulla tua equazione di Fresnel e l'ho pubblicata qui
PeteUK

Risposte:


12

Secondo questo documento , il nel tuo dovrebbe essere : quindi con 1πfr14

fr=DFG4(nwi)(nwo),
π2Li(p,wk)(DFGnwo).

Ho visto quest'altra formulazione per il BRDF di Cook-Torrance, dove l'equazione viene moltiplicata per anziché . Tuttavia, alla fine, l'effetto di questa modifica è molto piccolo perché sostituiremmo 2, presente nell'equazione finale, con 1,57 ( ). Ho fatto un test qui (per ogni evenienza ...), e in effetti il ​​problema persisteva. 114 =π1π=π2
Christian Pagot,

@Capagot Un fattore di viene talvolta incorporato nelle intensità della sorgente luminosa (per convenzione) e escluso dai BRDF; vedi anche questa domanda . Ma questo è più comune nel rendering in tempo reale che nella traccia del percorso. Inoltre dici che i tuoi test lambertiani corrispondono perfettamente a Mitsuba, quindi sembra meno probabile che questo sia il problema ... comunque potrebbe valere la pena esaminarlo. 1/π
Nathan Reed,

@Capagot Credo che vi state perdendo un nella vostra funzione di distribuzione . Il documento a cui ho collegato include quel fattore nella distribuzione di Beckmann, che usi, quindi avere in e in dovrebbe fare il trucco. D11πD fr114fr D1πD
wolle,

@NathanReed Ho letto l'articolo sull'incorporamento nel colore. Tuttavia, per il motivo che hai citato, ero convinto che non fosse questo il problema. π
Christian Pagot,

@wolle Exactly! In realtà, avevo già dato una rapida occhiata al documento che hai menzionato, ma non me ne sono accorto! Ho appena modificato la mia implementazione per tenere conto di in e in , e ora tutto funziona come un incantesimo! Includerò un aggiornamento alla domanda con la risposta! Grazie! D11πD fr14fr
Christian Pagot,

13

Sto pubblicando questo per chiunque si chieda la confusione tra i termini e . 11π14

Il termine è un errore dal riferimento Cook-Torrance originale.1π

In effetti, l'intero termine deriva dal giacobino della trasformazione da angolo solido riflesso a angolo solido normale.14(nωi)

Secondo la maggior parte degli articoli, il termine apparso per la prima volta in [Torrance, 67] .14

Per una bella spiegazione del termine, dovresti controllare [Nayar, 91] , appendice D. Ecco un'immagine dallo stesso documento:

dω=dωr4cosθi

Inoltre, Joe Stam concorda con il termine Nayar in [Stam 01, Un modello di illuminazione per uno strato di pelle delimitato da superfici ruvide], appendice B.14

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.