Dağınık ve speküler terimler nasıl düzgün bir şekilde birleştirilir?


18

Anladığım kadarıyla, bir BRDF'de Fresnel terimi bize bir fotonun yüzeye çarptığında yansıma veya kırılma olasılığını anlatıyor.

Yansıyan fotonlar speküler terime katkıda bulunurken, kırılan fotonlar yaygın terime katkıda bulunacaktır. Bu nedenle, fiziksel olarak, bir ışığın malzemenin rengine katkısını belirlerken, sadece yazmak için cazip hissediyorum:

// Assuming for example:
//   diffuse = dot(L, N);
//   specular = pow(dot(H, N), alpha) * (alpha + 2.0) / 8.0;
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
color = lightIntensity * Lerp(diffuse * albedo, specular, fresnel);

Yine de, bu şekilde yazılmış gördüğümü sanmıyorum. Speküler terimin Fresnel terimine göre ağırlıklı olduğunu gördüm, ancak yaygın olanı değil. PBR ile ilgili geniş çapta atıfta bulunulan makalesinde Sébastien Lagarde , dağınık terimi ağırlıklandırmak için kullanmanın yanlış olduğunu bile belirtmektedir .(1-F)

Neyi kaçırıyorum?
Çok neden bu yanlış olacağını açık bir şekilde vurgulayan bir açıklama memnuniyetle karşılanacaktır.

Yanıtlar:


14

İki Fresnel terimi kullanmak, herhangi bir dağınık yolun yüzeyden iki kez geçmesi açısından doğrudur. Eğer tekrar dışarı çıkana kadar ortamdaki bir yolu izleyerek difüzyonu çözüyorsanız, o yüzeyle etkileşirken o yol için iki (veya daha fazla) Fresnel terimi elde edersiniz.

Ancak, yaygın bir BRDF ile yaptığınız şey bu değildir. Yaygın bir BRDF'nin tüm bu olası difüzyon yollarının ortalamasını temsil etmesi amaçlanmıştır. Lambertian durumunda, bu ortalama tekdüze yansıma ve difüzyon sırasında dahili enerji kaybını ölçen tek bir albedo değeri olarak modellenir, ancak daha karmaşık modeller mümkündür. Önemli bir şekilde: dağınık bir BRDF, daha da yayılmak için bazı yolların ortama geri yansıtılmasının ve bazılarının derhal dağılmasının toplam etkisini zaten içerecektir. BRDF¹ için zaten "fırınlanmış" ve tekrar hesaba katmanıza gerek yok.1-FÖut

Lambertian terimi içermeyen şey, ışığın difüzyon ortamına girmeden önce yansıtılarak kaybedilen enerjinin kısmıdır. Bu görünüme bağlıdır, ancak üstündeki hassas parlak loblara bağlıdır. (Metalik olmayan) bir yüzey arayüzünde enerji kaybı yoktur, bu yüzden yansıtılmayan her şey kırılır, yani aslında istediğiniz tüm yüzeydeki toplam enerji kaybını tüm giden yönlere entegre etmek, yani .1-glossy_bsdf(içinde,dışarı)ddışarı

Belirli BRDF'ler için bu integrale yaklaşık olarak ön hesaplama yapmak mümkündür. Nihai sonuç genel olarak görüş yönüne, malzeme pürüzlülüğüne ve en azından IOR'ye bağlı olacaktır. İlk yaklaşım olarak, parlak lobun mükemmel speküler bir reflektör olduğunu varsayabilirsiniz. Bu 1 - parlak bir ağırlık verir , tam olarak ilk önerdiğiniz şey.1-parlakddışarı=1-Fbenn

Buna ek olarak, Lambert BRDF bölü albedo olduğu not kosinüs terimi ve gelen ışık yüzeyinde ne kadar zayıflatılmış bir ölçüsüdür; hem parlak hem de dağınık yansıma için geçerlidir.π

Yani, kabaca:

// Assuming for example:
//   diffuse = albedo / PI;
//   specular = my_favorite_glossy_brdf(in_dir, out_dir, roughness);
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
//   total_surface_reflection = fresnel
color = lightIntensity * dot(L, N) * Lerp(diffuse, specular, total_surface_reflection);

F


8

Sorumu doğru bir şekilde yazmak için göz atarken, aslında çok basit olan cevabı buldum .

Başka bir Fresnel terimi de, fotonlar materyalden çıktıkça (havaya kırılır) ve yaygın terim haline geldikçe ağırlık kazanacaktır. Dolayısıyla dağınık terim için doğru faktör:

(1-Fbenn)*(1-FÖut)

1
Disney BRDF kağıt bölüm 5.3 Yanıtınızda denkleme karşılık gelir ve daha sonra farklı bir model belirlemek için devam ediyor. Parlak BRDF uygulamama yeni başladığımdan hiçbirini anladığımı iddia etmiyorum!
PeteUK

Bunun buradan devam edeceğini, burada dahili olarak geri yansıyan ışığın daha sonra yüzeye tekrar içeriden, karşı tarafta ve daha sonra tekrar tekrar ve her seferinde sonsuzluğa çarpacağını düşünüyorum: P (veya alt yüzey saçılma hehe)
Alan Wolfe

Başka bir Fresnel terimini nasıl hesaplıyorsunuz?
plasmacel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.