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.
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.
sumber
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.
sumber