- 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 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 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,
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
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
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
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.
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 frnew(wi,wo
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.