Path tracer - material multi-lapis dan sampel penting

12

Saat ini saya mencoba menerapkan pelacak jalur Monte Carlo. Saya telah melakukan beberapa penelitian dan tampaknya pendekatan umum untuk bahan adalah dengan menggunakan model berlapis. Sesuatu seperti ini:

masukkan deskripsi gambar di sini

Ketika cahaya mengenai permukaan, Fresnel memberi tahu kita berapa banyak cahaya yang dipantulkan oleh lapisan pertama dan berapa banyak yang ke lapisan kedua, dan seterusnya.

Jadi saya melakukan sesuatu yang serupa, tetapi lebih sederhana: hanya satu lapisan specular dan satu lapisan difus. Belum ada transmisi. Sejauh ini bagus, saya menggunakan brdf sederhana berbobot kosinus untuk difus dan model mikrofaset Cook-Torrance untuk specular saya.

Sekarang sampai pada bagian yang sulit: apa yang harus saya lakukan begitu sinar menyentuh permukaan? Biasanya, saya akan memilih brdf yang sesuai dengan bahan permukaan, sampel arah cahaya kejadian, mengevaluasi brdf, dan membaginya dengan fungsi distribusi probabilitas yang tepat.

Tapi di sini, permukaan yang dihantam secara efektif berhubungan dengan banyak material. Cara naif untuk menangani ini adalah dengan mengambil sampel satu kali untuk setiap layer hit. Tapi ini jelas merupakan sumber hit kinerja yang besar, menyebabkan jalan saya menjadi pohon yang efektif.

Apakah ada solusi yang lebih baik?

pemain
sumber
1
Tidak bisakah kamu 'monte-carlo' lapisan material? Misalnya Berat setiap lapisan sesuai dengan reflektifitasnya dan pilih satu secara acak berdasarkan itu. Lapisan yang lebih dalam akan membutuhkan pelemahan berdasarkan jumlah penyerapan semua lapisan di atasnya.
PaulHK
PaulHK Itulah tepatnya yang saya lakukan di jalur tracer saya, roulette Rusia untuk setiap antarmuka antar lapisan, jadi, tidak ada percabangan sama sekali. Sayangnya, implementasi saya belum selesai, jadi saya tidak memiliki informasi mengenai kinerja yang sebenarnya. Saya telah mendasarkan implementasi saya di atas kertas "Permukaan Mikro-Faset Berlapis Sewenang-wenang" oleh Andrea Weidlich dan Alexander Wilkie, yang tampaknya lebih terbatas daripada kerangka kerja Wenzel Jakob (ditunjukkan dalam jawaban oleh Stefan), tetapi yang mampu menghasilkan hasil yang cukup baik dan jauh lebih mudah diterapkan.
Christian Pagot

Jawaban:

7

Wenzel Jakob dkk mempresentasikan kerangka kerja untuk Bahan berlapis di SIGGRAPH 2014. Bagian 6.2 menjelaskan pentingnya sampel. Jika Anda lebih suka kode daripada persamaan, metode ini diterapkan di penyaji Mitsuba .

Stefan Werner
sumber
2
Perhatikan bahwa metode ini oleh Jakob et al. mengandalkan rendering data BSDF yang ditabulasi dalam beberapa representasi basis Fourier khusus. Untuk perincian, lihat juga laporan teknis terkait . Implementasi open-source juga tersedia dalam edisi terbaru PBRT ke-3 . File BSDF dapat dibuat dengan layerlab dengan Python.
tizian