Path tracer - materiali multistrato e campionamento di importanza


12

Attualmente sto cercando di implementare un tracciatore di percorsi Monte Carlo. Ho fatto alcune ricerche e sembra che un approccio comune ai materiali sia quello di utilizzare un modello a strati. Qualcosa come questo:

inserisci qui la descrizione dell'immagine

Quando la luce colpisce la superficie, Fresnel ci dice quanta parte di quella luce viene riflessa dal primo strato e quanto va al secondo, e così via.

Così ho fatto qualcosa di simile, ma più semplice: solo uno strato di speculare e uno strato di diffuso. Nessuna trasmissione ancora. Fin qui tutto bene, io uso un semplice brdf ponderato al coseno per il mio diffuso e il modello in microfibra Cook-Torrance per il mio speculare.

Ora arriva la parte difficile: cosa devo fare una volta che un raggio colpisce la superficie? Normalmente, sceglierei il brdf corrispondente al materiale della superficie, campionerei una direzione della luce incidente, valuterei il brdf e dividerei per la giusta funzione di distribuzione della probabilità.

Ma qui, un colpo di superficie corrisponde effettivamente a più materiali. Il modo ingenuo di gestirlo sarebbe campionare una volta per ogni colpo di livello. Ma questo chiaramente è fonte di un enorme successo in termini di prestazioni, facendo sì che il mio percorso diventi effettivamente un albero.

C'è una soluzione migliore?


1
Non puoi "monte-carlo" gli strati materiali? Ad esempio, pesare ogni strato in base alla loro riflettività e sceglierne uno a caso in base a quello. Gli strati più profondi dovranno essere attenuati in base alla somma dell'assorbimento di tutti gli strati sopra di essi.
PaulHK,

PaulHK Questo è esattamente quello che sto facendo nel mio tracciatore di percorsi, la roulette russa per ogni interfaccia tra i livelli, quindi nessuna ramificazione. Sfortunatamente, la mia implementazione non è ancora terminata, quindi non ho informazioni relative alle prestazioni effettive. Ho basato la mia implementazione sull'articolo "Arbitrarily Layered Micro-Facet Surfaces" di Andrea Weidlich e Alexander Wilkie, che sembra essere più limitato della struttura di Wenzel Jakob (sottolineato nella risposta di Stefan), ma che è capace di generare risultati abbastanza buoni ed è molto più semplice da implementare.
Christian Pagot,

Risposte:


7

Wenzel Jakob et al. Hanno presentato un framework per materiali stratificati a SIGGRAPH 2014. La sezione 6.2 spiega l'importanza del campionamento. Se preferisci il codice rispetto alle equazioni, il metodo è implementato nel renderer Mitsuba .


2
Si noti che il metodo di Jakob et al. si basa sul rendering di dati tabulati di BSDF in alcune rappresentazioni di base di Fourier specializzate. Per i dettagli, consultare anche il rapporto tecnico corrispondente . Un'implementazione open source è disponibile anche nella più recente, terza edizione di PBRT . I file BSDF possono essere generati con layerlab in Python.
Tizian,
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.