Pelacakan & Bahan Jalur

8

Saya bertanya-tanya tentang teknik yang digunakan saat mengambil sampel bahan berlapis untuk acara berikutnya dalam pelacak jalur. Saya memiliki bahan dengan tiga lapisan: dasar berdifusi, lobus specular dan kemilau. Bagaimana cara memilih lapisan diskrit untuk sampel untuk arah ray berikutnya? Apakah ini hanya pilihan acak? Jika demikian, apakah bobot yang sama diberikan pada layer atau apakah bobot digunakan berdasarkan kontribusi akhir lobe? Terima kasih atas wawasan tentang tahap pengambilan sampel ini.

~ M.

Mark Davies
sumber

Jawaban:

12

Pertanyaan ini agak terkait dengan yang ini .

Seperti yang telah dikatakan Alan, mengikuti jalur cahaya aktual melalui setiap lapisan mengarah ke hasil yang lebih akurat secara fisik. Saya akan mendasarkan jawaban saya di atas kertas oleh Andrea Weidlich dan Alexander Wilkie ( "Permukaan Micro-Facet Surface Arbitrrary" ) yang telah saya baca dan sebagian implementasikan. Dalam makalah penulis mengasumsikan bahwa jarak antara dua lapisan lebih kecil dari jari-jari elemen daerah diferensial. Asumsi ini menyederhanakan implementasi karena kita tidak perlu menghitung titik persimpangan secara terpisah untuk setiap lapisan, sebenarnya kita mengasumsikan bahwa semua titik persimpangan di atas lapisan hanyalah titik yang sama.

Menurut makalah itu, dua masalah harus diselesaikan untuk membuat bahan berlapis-lapis. Yang pertama adalah untuk sampel lapisan dengan benar dan yang kedua adalah untuk menemukan hasil BSDF yang dihasilkan oleh kombinasi beberapa BSDF yang ditemukan di sepanjang jalur pengambilan sampel.

UPDATE: Sebenarnya saya telah mengadopsi metode yang berbeda untuk menerapkan evaluasi model berlapis ini. Sementara saya terus dengan gagasan untuk mempertimbangkan titik persimpangan menjadi titik yang sama di sepanjang lapisan, saya telah menghitung pengambilan sampel dan BRDF akhir secara berbeda: untuk pengambilan sampel, saya telah menggunakan penelusuran sinar biasa, tetapi melalui lapisan (menggunakan bahasa Rusia Roulette untuk memilih antara refleksi / pembiasan ketika itu terjadi); untuk evaluasi BRDF akhir, saya hanya mengalikan setiap BRDF yang dilalui oleh jalur sinar (membobotkan cahaya insiden sesuai dengan kosinus sinar datang).

Contoh

Pada tahap pertama ini kita akan menentukan jalur cahaya yang sebenarnya melalui lapisan. Ketika sinar cahaya bergerak dari media yang kurang padat, misalnya udara, ke media yang lebih padat, misalnya kaca, sebagian energinya dipantulkan dan bagian yang tersisa ditransmisikan. Anda dapat menemukan jumlah energi yang dipantulkan melalui persamaan reflektansi Fresnel . Jadi, misalnya, jika reflektansi Fresnel dari dielektrik yang diberikan adalah 0,3, kita tahu bahwa 30% energi dipantulkan dan 70% akan ditransmisikan:

masukkan deskripsi gambar di sini

Ketika sinar cahaya bergerak dari media yang lebih padat ke yang kurang padat, prinsip yang sama yang dijelaskan oleh reflektansi Fresnel berlaku. Namun, dalam kasus khusus ini, refleksi internal total (alias TIR) juga dapat terjadi jika sudut sinar datang di atas sudut kritis. Dalam kasus TIR, 100% energi dipantulkan kembali ke dalam bahan:

masukkan deskripsi gambar di sini

Ketika cahaya mengenai konduktor atau permukaan difus, cahaya akan selalu dipantulkan (menjadi arah refleksi terkait dengan jenis BRDF). Dalam bahan berlapis-banyak, jalur cahaya yang dihasilkan akan menjadi hasil agregat dari semua kemungkinan itu. Jadi, dalam kasus bahan 3-lapisan, dengan asumsi bahwa lapisan pertama dan kedua adalah dielektrik dan lapisan ketiga berdifusi, kita mungkin berakhir, misalnya, dengan jalur cahaya berikut (sebatang pohon sebenarnya):

masukkan deskripsi gambar di sini

Kita dapat mensimulasikan jenis interaksi ini menggunakan rekursi dan pembobotan setiap jalur cahaya sesuai dengan reflektansi aktual / transmitansi pada titik-titik insiden yang sesuai. Masalah mengenai penggunaan rekursi dalam kasus ini adalah bahwa jumlah sinar meningkat dengan kedalaman rekursi, memusatkan upaya komputasi pada sinar yang secara individual mungkin berkontribusi hampir tidak ada pada hasil akhir. Di sisi lain, hasil agregat dari masing-masing sinar pada tingkat rekursi yang dalam dapat menjadi signifikan dan tidak boleh dibuang. Dalam hal ini, kita dapat menggunakan Russian Roulette (RR) untuk menghindari percabangan dan jalur cahaya akhir probabilistik tanpa kehilangan energi, tetapi dengan biaya varian yang lebih tinggi (hasil yang lebih berisik). Dalam hal ini, hasil reflektansi Fresnel, atau TIR, akan digunakan untuk secara acak memilih jalur mana yang harus diikuti. Contohnya:

masukkan deskripsi gambar di sini

Seperti dapat dilihat, reflektansi TIR atau Fresnel mungkin membuat beberapa sinar memantul tanpa batas di antara lapisan-lapisan. Sejauh yang saya tahu, Mitsuba menerapkan plastik sebagai bahan dua lapisan, dan menggunakan solusi bentuk tertutup untuk kasus khusus ini yang menyumbang jumlah tak terbatas cahaya memantul di antara lapisan. Namun, Mitsuba juga memungkinkan untuk pembuatan bahan multilayer dengan jumlah lapisan yang sewenang-wenang, dalam hal ini memaksakan jumlah maksimum pantulan internal karena tidak ada solusi bentuk tertutup yang tampaknya ada untuk kasus umum. Sebagai efek samping, beberapa energi dapat hilang dalam proses rendering, membuat material terlihat lebih gelap dari yang seharusnya.

Dalam implementasi material multilayer saya saat ini, saya mengizinkan jumlah bouncing internal yang sewenang-wenang dengan biaya rendering yang lebih lama (well ... sebenarnya, saya hanya menerapkan dua layer .. satu dielektrik dan satu difus :).

Opsi tambahan adalah mencampur percabangan dan RR. Sebagai contoh, sinar awal (level bawah yang lebih dalam) mungkin memberikan kontribusi besar pada gambar akhir. Jadi, seseorang dapat memilih untuk bercabang hanya pada satu atau dua persimpangan pertama, hanya menggunakan RR setelahnya. Ini, misalnya, pendekatan yang digunakan oleh smallpt .

Suatu hal yang menarik mengenai bahan berlapis-lapis adalah bahwa sinar pantulan / yang ditransmisikan secara individu dapat menjadi sampel penting sesuai dengan BRDF / BTDF yang sesuai pada setiap lapisan.

Mengevaluasi BSDF Final

Mempertimbangkan jalur cahaya berikut yang dihitung menggunakan RR:

masukkan deskripsi gambar di sini

Kami dapat mengevaluasi jumlah total cahaya Lrtercermin oleh multilayer BSDF yang mempertimbangkan setiap lapisan sebagai objek individual dan menerapkan pendekatan yang sama yang digunakan dalam penelusuran jalur biasa (yaitu sinar yang meninggalkan lapisan akan menjadi sinar insiden untuk lapisan berikutnya). Estimator akhir dengan demikian dapat diwakili oleh produk dari masing-masing estimator Monte Carlo:

Lr=(fr1cosθ1pdf1(fr2cosθ2pdf2(fr3cosθ3pdf3(fr2cosθ4pdf2(Lifr1cosθ5pdf1)))))

Karena semua ketentuan estimator dikalikan, kami dapat menyederhanakan implementasi dengan menghitung BSDF final dan pdf dan memfaktorkan Li istilah:

fr=fr1fr2fr3fr2fr1

pdf=pdf1pdf2pdf3pdf2pdf1

cosθ=cosθ1cosθ2cosθ3cosθ2cosθ1

Lr=(frcosθpdf)Li

The kertas oleh Andrea Weidlich dan Alexander Wilkie juga membutuhkan penyerapan menjadi pertimbangan, yaitu masing-masing sinar cahaya mungkin dilemahkan sesuai dengan faktor penyerapan setiap lapisan transmissive dan ketebalannya. Saya belum memasukkan penyerapan ke penyaji saya, tetapi ini hanya diwakili oleh satu nilai skalar, yang akan dievaluasi sesuai dengan Hukum Beer's .

Pendekatan alternatif

Perender Mitsuba menggunakan representasi alternatif untuk bahan berlapis-lapis berdasarkan "tabulasi fungsi pemantulan dalam basis Fourier". Saya belum menggali ke dalamnya, tetapi mungkin menarik: " Kerangka Komprehensif untuk Rendering Layered Materials " oleh Wenzel Jacob et al . Ada juga versi yang diperluas dari makalah ini.

Christian Pagot
sumber
1
Saya ingin bertanya (berharap Anda ingat kertas) apakah Anda yakin tentang menambahkan istilah cosinus untuk setiap lapisan? Sejauh yang saya mengerti, kami menghitung persamaan rendering hanya pada lapisan atas. Kami pergi ke bawah untuk menentukan arah keluar akhir dan untuk menentukan BRDF. Apakah saya melewatkan sesuatu?
Mustafa Işık
@ MustafaIşık Anda benar, di surat kabar mereka tidak menambahkan istilah cosinus ke BRDF akhir. Sebenarnya, saya telah mengadopsi pendekatan yang sedikit berbeda dari yang diusulkan dalam makalah (saya akan memasukkan itu ke jawaban saya). Di koran, mereka mengusulkan definisi BRDF unik dari BRDF berlapis. Saya menemukan proses derivasi agak membingungkan: 1) Saya tidak mengerti mengapa mereka menambahkan BRDF individu (saya pikir mereka harus dikalikan);
Christian Pagot
@ MustafaIşık 2) seperti yang telah Anda tunjukkan, tidak ada penggandaan dengan istilah cosinus (saya pikir Anda harus melakukannya karena kami hanya mempertimbangkan energi yang terjadi pada area diferensial); 3) mereka tidak mengembangkan ekspresit=(1G)+T21G; 4) Saya tidak tahu apakah mereka telah mencairkan istilah kosinus di dalam BRDF; 5) juga, TIR dapat menyebabkan hilangnya energi. Karena alasan itu, saya telah memutuskan untuk melacak setiap sinar menggunakan Roulette Rusia untuk memutuskan untuk pembiasan atau refleksi, dengan biaya waktu render yang lebih lama daripada yang akhirnya diperoleh oleh mereka.
Christian Pagot
1
Makalah ini terlihat langsung tetapi tidak karena tidak setiap istilah atau strategi dijelaskan cukup jelas untuk implementasi yang tepat. Tapi itu berpengaruh. Milikmu lebih seperti simulasi yang dihindari oleh kertas tetapi lebih akurat.
Mustafa Işık
3

Memikirkannya dari sudut pandang fisik, tampaknya itu akan berfungsi seperti versi umum dari perhitungan difus / specular.

Anda akan mulai dengan lapisan paling atas dan menggunakan fresnel dll untuk menghitung persentase cahaya yang mencerminkan vs mentransmisikan. Anda kemudian menggunakan nomor acak untuk menentukan mana yang harus dilakukan untuk sampel Anda.

Dalam hal refleksi, Anda akan melakukan lobus specular dari lapisan paling atas Anda, memantul dari permukaan dan melanjutkan.

Dalam hal transmisi, Anda akan pindah ke lapisan ke-2.

Pada lapisan ini, Anda akan sekali lagi menghitung persentase peluang untuk merefleksikan vs pengiriman.

Dalam hal refleksi, Anda akan menggunakan lobus specular dari lapisan kedua ini, lakukan refleksi dan lanjutkan.

Dalam hal transmisi, Anda akan pindah ke lapisan dalam.

Untuk lapisan paling dalam ini, Anda akan sekali lagi mencari tahu apakah Anda perlu merefleksikan atau mengirim.

Untuk refleksi Anda akan menggunakan lobus specular lapisan dalam ini.

Untuk transmisi, Anda akan melakukan perhitungan difus, atau apa pun yang ingin dilakukan sebagian besar permukaan bagian dalam untuk cahaya yang ditransmisikan (hamburan permukaan? Refraksi?

Saya tidak yakin apakah setiap lapisan harus melakukan pembiasan sendiri dan jika secara teknis Anda harus memindahkan sedikit sinar di antara lapisan untuk mendapatkan efek yang lebih realistis. Untuk kasus Anda, itu mungkin tidak membuat perbedaan.

Tetapi pada dasarnya, jika Anda memiliki bola dengan 3 lapisan di atasnya, itu HARUS berperilaku seolah-olah Anda memiliki 3 bola yang berbeda bersarang satu sama lain yang masing-masing memiliki lapisan tunggal yang menangani transmisi vs refleksi.

Memiliki bahan berlapis hanyalah cara yang lebih ringkas untuk mengatakan bahwa inilah yang Anda inginkan, dibandingkan dengan memiliki tiga objek terpisah.

Alan Wolfe
sumber