据我了解,在BRDF中,菲涅耳项告诉我们光子撞击表面时被反射或折射的可能性。

反射的光子将有助于镜面项,而折射的将有助于弥散项。因此,当以基于物理的方式确定光对材料颜色的贡献时,我很想写:

认为我从未见过这样写过。我已经看到镜面反射项是根据菲涅耳项进行加权的,而不是弥散项。塞巴斯蒂安·拉加德(SébastienLagarde)在其关于PBR的大量引用文章中甚至指出,使用$(1- F)$来加权扩散项是不正确的。

我缺少什么?一种解释,以明显的方式突出了为什么这是不正确的。

#1 楼

在任何给定的漫反射路径将两次通过曲面的意义上,使用两个菲涅耳项是正确的。如果您通过追踪穿过介质的路径直到其再次反弹来解决扩散问题,那么当该路径与表面相互作用时,您将获得该路径的两个(或多个)菲涅耳项。那不是您使用分散BRDF所做的。扩散BRDF旨在表示所有这些可能扩散路径的平均值。如果是朗伯型,则将平均值建模为均匀反射,并使用单个反照率值来测量扩散过程中的内部能量损失,但可以使用更复杂的模型。至关重要的是:漫反射的BRDF将已经包括一些路径的聚合效应,这些路径会反射回介质中以进一步扩散,而另一些路径会立即传播出去。 $ 1-F_ {out} $已被“放入”BRDF¹,而您无需再次将其加入。在光进入扩散介质之前被反射。这取决于视图,但取决于其上方的精确光泽波瓣。 (非金属)表面界面没有能量损失,因此所有未反射的物体都会折射,这意味着您真正想要的是对所有出射方向上表面的总能量损失进行积分,即$ 1- int \ texttt {glossy_bsdf}(\ texttt {in},\ texttt {out})\:\ mathrm {d} \ texttt {out} $。

可以预先计算出近似值对于特定的BRDF不可或缺。最终结果通常至少取决于视线方向,材料粗糙度和IOR。作为第一近似,您可以假设光泽波瓣是完美的镜面反射器。这样得出的权重为$ 1-\ int \ texttt {光泽} \:\ mathrm {d} \ texttt {out} = 1-F_ {in} $,这正是您最初建议的。

此外,请注意,Lambertian BRDF是反照率除以$ \ pi $,余弦项是对入射光在表面上的衰减程度的度量;

因此,大致来说:

// 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 $在所有可能的事件上的积分内部扩散出口路径会导致您向外延伸,但我离题了。

#2 楼

在浏览以正确地写出我的问题时,我实际上找到了答案,这很简单。被折射到空气中)并成为扩散项。因此,扩散项的正确因子为:

$$(1-F_ {in})*(1-F_ {out})$$

评论


$ \ begingroup $
迪士尼BRDF论文第5.3节提到了答案中的等式,然后继续指定其他模型。我刚刚开始进行光泽的BRDF实施时,并没有声称自己了解其中的任何内容!
$ \ endgroup $
– PeteUK
17 Mar 3 '17 at 23:02

$ \ begingroup $
我认为,这将从此处继续,在那里,内部反射回来的光将再次从内部在另一侧从内部再次撞击表面,然后每次又一次地减小,直至无限远:P (或成子面散射呵呵)
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
18年8月30日在21:39

$ \ begingroup $
您如何计算另一个菲涅耳项?
$ \ endgroup $
–plasmacel
19/09/26'9:26