Mengapa H (blinn) digunakan sebagai ganti R (phong) dalam naungan specular?

22

Saya tidak dapat menemukan alasan yang bagus untuk ini di mana saja. Vektor refleksi yang digunakan dalam phong memiliki dasar sederhana dalam fisika. Tetapi setengah vektor yang digunakan dalam blinn tampaknya tidak memiliki dasar rasional, dan bukan merupakan refleksi yang tepat. Namun itu digunakan dalam setiap fungsi yang disebut "berbasis fisik" fungsi. Jika ada dasar fisik yang baik untuk itu, saya ingin tahu.

Apa yang saya dapat temukan adalah beberapa alasan:

Ini lebih cepat - ada informasi beragam tentang ini, tetapi meskipun demikian itu akan menjadi alasan yang bagus ... di tahun 1998.

Ini menangani sudut lebih tinggi dari 90 derajat lebih baik - sejauh yang saya tahu satu-satunya alasan untuk ini adalah karena istilah phong telah digunakan secara tidak benar. Produk titik refleksi dan tampilan memberikan sudut antara -1 dan +1. Biasanya sudut ini dijepit ke 0 ke 1, ini adalah penyebab langsung dari masalah 90 derajat. Normalisasi ulang sudutnya alih-alih menjepitnya dan Anda mendapatkan cakupan penuh 180 derajat. Saya menolak untuk percaya bahwa operasi x * 0,5 + 0,5 yang sederhana telah menghindari dunia grafis selama 40 tahun.

ia menangani tepi dengan lebih baik - Tepi "masalah" juga ada dalam solusi blinn, hanya pada tingkat yang lebih rendah. Penyebab utamanya adalah simulasi pencahayaan area yang tidak tepat pada terminator, yang seharusnya penting untuk shader "berbasis fisik" apa pun. Tetapi bahkan dalam situasi yang lebih sederhana fungsi sigmoid dapat mendekati garis terminator lunak dengan benar. Mengalikan ke dalam istilah lambert tidak benar karena melemahkan istilah specular dengan tidak tepat, ini dapat membatalkan istilah fresnel dan menyebabkan kesalahan lebih lanjut.

Ini memiliki pantulan yang panjang di tepian - Bagi saya kelihatannya sementara refleksi anisotropik mungkin realistis, blinn bukanlah cara yang tepat untuk mengimplementasikannya, karena hanya muncul di tepian. Ini hanya kebetulan kebetulan bahwa kesalahan dalam istilah H terjadi terlihat realistis.

Tak satu pun dari alasan ini yang memuaskan, saya ingin memilah kegilaan ini.

Saya ingin mengklarifikasi bahwa saya tidak berbicara tentang blinn dan phong secara khusus , tetapi tentang komponen vektor H dan R, yang digunakan sebagai dasar untuk shader ini dan juga yang lainnya.

BmB
sumber

Jawaban:

24

Untuk permukaan reflektif sempurna, model Phong masuk akal. Namun, dari mana n in (RV) ^ n dari Phong-model untuk perkiraan permukaan yang lebih kasar berasal? Di mana teori bahwa Anda harus menaikkan hasil produk titik ke kekuatan kecuali bahwa itu hanya tampaknya memberikan hasil yang tepat secara empiris?

Untuk Blinn-model ada teori microfacet berbasis fisik untuk mendukung semua komponen dalam persamaan dan ada juga bukti empiris bahwa model mendekati permukaan dunia nyata lebih dekat (meskipun tidak sempurna). Setengah vektor dalam model Blinn digunakan sebagai input ke fungsi distribusi normal (NDF), yang merupakan perkiraan bagaimana mikrofacet didistribusikan tentang permukaan normal sebagai fungsi dari kekasaran permukaan. Yaitu ketika H-vector menunjuk ke arah normal nilainya tertinggi karena kebanyakan microfacets menunjuk ke arah itu, dan probabilitas menurun sesuai ketika sudut antara normal dan H-vector meningkat.

Model Blinn tidak sempurna dengan cara apa pun dan itu misalnya tidak memperhitungkan istilah geometri dari model microfacet (mis. Membayangi dan menutup-nutupi microfacet yang pentingnya meningkat dalam sudut penggembalaan).

JarkkoL
sumber
Saya tidak berbicara tentang implementasi spesifik phong yang memang tidak memiliki dasar fisik. Tapi saya tidak bisa melihat bagaimana teori mikrofacet mendukung H lebih baik daripada R sebagai dasar untuk vektor refleksi. Tidak ada model naungan didukung secara empiris, setiap orang gagal mereproduksi bahan nyata sesuai dengan "Validasi eksperimental BRDF" addy 2005. Tampaknya bagi saya bahwa mikrofacet dimodelkan dalam phong melalui produk titik R · V, yang dapat berfungsi sebagai dasar untuk sorotan yang lebih benar secara fisik baik melalui fungsi remapping atau ramp. Fungsi daya hanyalah pemetaan ulang yang paling sederhana dan paling tidak benar.
BmB
2
@ BmB Tidak, microfacets tidak "dimodelkan dalam phong" tetapi menggunakan distribusi probabilitas dari microfacets yang didefinisikan dengan NDF, itu "sampel" dengan vektor H. NDF umumnya simetris tentang normal (isotropik / anisotropik) sehingga masuk akal untuk menggunakan vektor-H untuk itu. Saya mengatakan ada bukti empiris bahwa model Blinn lebih mendekati bahan dunia nyata daripada Phong.
JarkkoL
Setiap refleksi yang tidak terletak di sepanjang vektor refleksi bukanlah refleksi cermin yang sempurna. Produk titik menghasilkan nilai pemantulan untuk sudut yang tidak sempurna. Seharusnya, ini harus diproduksi oleh microfacets. Oleh karena itu, produk titik tidak memodelkan model mikro. Titik sederhana menghasilkan distribusi linier. Tetapi distribusinya dapat dimodelkan oleh fungsi apa pun dengan R sama seperti H. Ini tidak menjelaskan apa pun tentang validitas H atas R.
BmB
1
@ BmB Saya sarankan Anda membaca tentang teori microfacet dan secara khusus tentang bagian NDF untuk memahami konsep. Itu akan membantu Anda mendapatkan jawaban atas pertanyaan Anda.
JarkkoL
1
Anda harus membuka pertanyaan baru tentang microfacets dan NDF karena jelas ada banyak hal yang tidak Anda mengerti tentang konsep-konsep ini dan komentar bukanlah tempat yang tepat untuk menjelaskannya.
JarkkoL
6

Sebenarnya, saya pikir Anda sendiri menyebutkan alasan mengapa Blinn adalah default atas Phong.

Setiap alasan yang Anda sebutkan di sana sebenarnya adalah area di mana Blinn terbukti lebih unggul daripada Phong.

Secara keseluruhan, semua ini mengarah ke Blinn sebagai standar yang lebih baik daripada Phong.

Apakah Blinn sempurna? Apakah ini lebih baik daripada Phong?

Tidak.

Tapi itu adalah standar yang masuk akal. Jangan ragu untuk mengganti Phong dengan Blinn dalam setiap renderer / shader yang Anda tulis.

John
sumber
Setuju, ini persisnya. Tidak ada model yang sempurna. Perkiraan Blinn di atas semua optimasi kinerja saat itu, karena menghitung setengah sudut jauh lebih murah. Ternyata itu terlihat lebih baik sebagian besar waktu juga.
Damon
-2

Saya telah menemukan alasan untuk menggunakan vektor H. Sayangnya ini bukan cara yang digunakan dalam sebagian besar model naungan, yang kemudian dapat disimpulkan salah.

Untuk cahaya yang dipantulkan secara fisik bayangan harus mematuhi persamaan fresnel. (Sebagian besar shaders "berbasis fisik" tidak) Microfacets juga harus mematuhi persamaan fresnel, yang bergantung pada sudut datangnya cahaya serta indeks bias antarmuka untuk menghasilkan hasil yang benar.

Menurut hukum refleksi, sudut datang harus dicerminkan dengan sudut refleksi sepanjang permukaan normal. Agar sinar cahaya mengenai kamera - yang kita tahu benar - pasti dipantulkan dari cahaya - yang kita ketahui arahnya. Jadi permukaan normal harus dengan deduksi menjadi sumbu cermin untuk dua arah ini. Ini memberi kita setengah vektor H yang ada di antara mereka. Dihitung dengan menormalkan jumlah keduanya.

Sekarang dengan menghitung sudut antara arah cahaya L dan setengah vektor H kita memperoleh sudut insidensi untuk refleksi specular dari mikrofacet, dan dapat dengan tepat melemahkannya menggunakan istilah fresnel.

Perhatikan bahwa arah tampilan sama dengan R untuk mikrofacet itu, H bukan istilah refleksi. Blinn, Cook, Torrance, dan Sparrow dapat menyedotnya. Phong dan Fresnel benar.

BmB
sumber
Istilah Fresnel adalah bagian dari persamaan BRDF mikrofacet dan mikrofacet individu tidak memperhitungkan ini karena mereka dimodelkan sebagai reflektor sempurna. Anda juga tidak menghitung sudut antara vektor L dan H tetapi vektor N dan H. Ini akan memberi Anda petunjuk mengapa H digunakan. Anda perlu sedikit lebih banyak pengetahuan tentang topik untuk menyimpulkan siapa yang benar atau "lebih tepat";)
JarkkoL
Microfacet suatu material memiliki sifat yang sama dengan material tersebut. Karena itu, mikrofetet reflektor yang tidak sempurna tidak dapat dengan sendirinya menjadi reflektor yang sempurna. Logika Anda tidak sehat dan tidak membantu. N dot H tidak memiliki signifikansi fisik.
BmB
4
Tidak, itu bukan cara kerja model microfacet. Logika saya sangat sempurna karena siapa pun yang memahami bahkan dasar-dasar model mikrofacet dapat mengonfirmasi. Setiap microfacet adalah reflektor sempurna (yaitu datar secara optik) dan refleksi tidak sempurna dari suatu material berasal dari varian normal mikrofacet seperti yang didefinisikan oleh NDF. Ketekunan Anda untuk menentang nasihat yang benar-benar valid memang lucu;)
JarkkoL
Anda tidak memberikan saran, yang telah Anda lakukan adalah bertahan dalam menyatakan bahwa Anda benar dengan tidak ada yang mendukungnya dan melemparkan penghinaan. H adalah normal dari sebuah mikrofaset, bukan refleksi. Refleksi dapat dihitung dengan normal. Fisika dasar tidak setuju dengan Anda.
BmB