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:
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?