Apakah pengambilan sampel hemisfer berbobot kosinus masih membutuhkan NdotL saat menghitung kontribusi cahaya tidak langsung?

12

Ketika mengkonversi dari sampling hemisfer yang seragam menjadi cosinus hemisfer yang berbobot, saya bingung dengan pernyataan dalam sebuah artikel.

Kontribusi tidak langsung saya saat ini dihitung sebagai:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

Di mana produk titik adalah cos (θ)

Tetapi dalam artikel ini tentang pengambilan sampel yang lebih baik ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) penulis menyarankan PDF adalah (cos (θ) / pi), dan tidak ada bukti dari perhitungan N dot L.

Pertanyaan saya adalah - apakah itu berarti saya tidak perlu lagi melakukan dot rayDirection yang normal karena sudah termasuk dalam PDF, atau apakah itu tambahan pada pdf?

Steven
sumber

Jawaban:

12

Anda selalu perlu mengalikannya dengan istilah cosinus memang (itu bagian dari persamaan rendering). Meskipun ketika Anda melakukan difusi tidak langsung menggunakan ray-tracing dan dengan demikian integrasi monte-carol (yang merupakan teknik paling umum dalam kasus ini), Anda harus membagi kontribusi masing-masing sampel dengan PDF Anda . Ini dicontohkan dengan baik di sini .

Perhatikan juga bahwa dalam referensi yang disebutkan, jika PDF memiliki istilah yang juga Anda temukan dalam persamaan rendering maka Anda dapat mengoptimalkan kode jika Anda ingin membatalkan syarat-syarat ini.

Jangan lupa bahwa BRDF dari permukaan difus adalah ρ / π di mana ρ berarti albedo permukaan. Jadi kita perlu membagi hasilnya dengan π. Meskipun dalam kasus komponen difus tidak langsung, jangan lupa bahwa kita seharusnya membagi hasil castRay dengan PDF dari variabel acak, yang seperti yang kita tunjukkan sebelumnya dalam bab ini adalah 1 / (2π). Membagi indirectDiffuseby 1 / (2π) mis sama dengan mengalikan nilai ini dengan 2π. Dan karena albedo juga dibagi dengan π kita dapat menyederhanakan kode ...

Anda memiliki situasi yang serupa. Jika Anda melihat PDF untuk pengambilan sampel cosinus, maka Anda akan menyadari bahwa persyaratan dapat dibatalkan. Yang tidak berarti mereka 'tidak' sepenuhnya diperlukan. Mereka, mereka hanya membatalkan satu sama lain yang memungkinkan untuk mengoptimalkan kode sedikit (dan menghindari beberapa divisi, perkalian, dll.). Anda lebih menyukai optimasi mikro di sini ... yang dapat membingungkan jika Anda mencoba mempelajari teorinya dengan hanya melihat kode yang dioptimalkan (yang sering tidak dikomentari dengan benar).

(cHais(θ)...)PDF=(cHais(θ)...)cHais(θ)π=...

pengguna18490
sumber
1
Terima kasih! Itu masuk akal. Secara intuitif saya tahu itu diperlukan tetapi saya tidak menyadari bahwa itu adalah optimasi.
Steven
5
Hanya untuk memastikan ini eksplisit .. tidak hanya kosinus belahan tertimbang optimasi karena dibutuhkan lebih sedikit instruksi, itu juga optimasi karena konvergen lebih cepat. Dibutuhkan lebih sedikit sampel untuk mendapatkan hasil yang lebih baik. Ini adalah bentuk sampel penting.
Alan Wolfe
Tepat - itu adalah keinginan saya karena saya mencoba mengurangi jumlah sampel untuk perhitungan tidak langsung di lightmapper saya.
Steven