我正在尝试实现Cook-Torrance BRDF,并在之前将该问题加入了书签,因为它经过了深思熟虑。通过它,我对菲涅耳方程感到困惑。作者具有以下等式:

$$
F = c_ {spec} +(1-c_ {spec})(1-\ mathbf {w_i} \ cdot \ mathbf {h} )^ 5 \ tag {1}
$$

并说“ $ c_ {spec} $是镜面颜色”

在其他地方,我可以看到此方程式是Schlick的近似值,但在其他参考文献中,$ c_ {spec} $被称为$ R_0 $,并且是$ \ left(\ frac {n_1-n_2} {n_1 + n_2} \ right)^ 2 $,显然是数字是基于折射率而不是颜色。

等式$(1)$对颜色有意义吗?

评论

受您的问题启发,我发布了一个相关的文章,内容涉及在基于RGB的路径跟踪器中使用更精确的菲涅耳近似。如果您有兴趣,我只是在这里发表评论。

辉煌。我曾尝试实现金色外观,但认为它看起来不正确,并且已阅读了有关菲涅耳,消光系数等的更多信息。我没有花这么长时间,所以进展缓慢。谢谢。

#1 楼

是的,因为折射率会随波长而变化。这是金和铜等金属中的彩色镜面反射的起源。大多数其他材料具有基本未着色的镜面反射。根据您提到的公式,在每个波长下,法线入射时的镜面反射率都与该波长处的折射率相关。

如果您有兴趣的话,站点fractureindex.info会提供数据表和各种材料的折射率与波长的关系图。例如,这是黄金:



评论


$ \ begingroup $
谢谢。因此,要想出金色的镜面反射颜色,我需要查找红色,绿色和蓝色分量的波长。在这些波长下,我查找了相应的金折射率。然后将它们插入$ R_0 $的公式中,这3个值是镜面反射颜色的组成部分?
$ \ endgroup $
– PeteUK
17年2月25日在0:56

$ \ begingroup $
@PeteUK是的,您可以轻松地将代表波长用于R,G,B。可能更准确的方法是在整个波长上积分乘以CIE颜色匹配功能之一的$ R_0(\ lambda)$。
$ \ endgroup $
–内森·里德(Nathan Reed)
17-2-25在0:59



$ \ begingroup $
@PeteUK作为-Nathan发表的答案的补充,我引用塞巴斯蒂安·拉加德(SebastiénLagarde)的这篇文章(seblagarde.wordpress.com/2011/08/17/…),他在其中简要讨论了IOR和IOR之间的转换菲涅耳方程式中使用的RGB值(Schlick近似)。包含转换器源代码的ZIP文件伪装成PDF,可以在“特殊颜色”部分找到链接。
$ \ endgroup $
– Capagot
17-2-27在4:32

$ \ begingroup $
仔细看一下上面提到的转换程序(IOR-> RGB),我发现它实际上将IOR值转换为sRGB(伽玛压缩)值。因为最终渲染的图像(经过路径跟踪)将被伽玛压缩,所以仅转换为RGB会不是这种情况吗?
$ \ endgroup $
– Capagot
17-2-27在4:46

$ \ begingroup $
@ChristianPagot也许是用于存储sRGB镜面反射颜色纹理。然后,GPU在采样时将解码为线性RGB。
$ \ endgroup $
–内森·里德(Nathan Reed)
17-2-27在4:53