我正在编写路径跟踪器,目前,与光谱相关的数据(光谱功率分布和光谱反射率曲线)存储为RGB元组。在Cook-Torrance高光BRDF中,我对菲涅耳项使用了Schlick近似:
$$ F(\ theta)= R_0 +(1-R_0)(1- \ cos \ theta)^ 5 $$
其中
$$ R_0 = \ left(\ frac {\ eta_1-\ eta_2} {\ eta_1 + \ eta_2} \ right)^ 2 $$
在当前环境下,Schlick的近似值非常快速且非常方便(例如,对于导体,$ R_0 $只是金属材料的法向入射反射率的RGB元组)。
尽管如此,Schlick的逼近速度非常简单(例如,它没有考虑导体的消光系数)。一些路径追踪器使用更精确的菲涅耳公式。例如,PBRT将以下方程式用于菲涅耳项:
导体的菲涅耳项
$$ r ^ 2_ {||} = \ frac {(\ eta ^ 2 + k ^ 2)\ cos \ theta_i ^ 2-2 \ eta \ cos \ theta_i + 1} {(\ eta ^ 2 + k ^ 2)\ cos \ theta_i ^ 2 + 2 \ eta \ cos \ theta_i + 1} $$
$$ r ^ 2 _ {\ perp} = \ frac {(\ eta ^ 2 + k ^ 2)-2 \ eta \ cos \ theta_i + \ cos \ theta_i ^ 2 } {(\ eta ^ 2 + k ^ 2)+ 2 \ eta \ cos \ theta_i + \ cos \ theta_i ^ 2} $$
电介质的菲涅耳项
$$ r_ {||} = \ frac {\ eta_t \ cos \ theta_i-\ eta_i \ cos \ theta_t} {\ eta_t \ cos \ theta_i + \ eta_i \ cos \ theta_t} $$
$$ r _ {\ perp} = \ frac {\ eta_i \ cos \ theta_i-\ eta_t \ cos \ theta_t} {\ eta_i \ cos \ theta_i + \ eta_t \ cos \ theta_t} $$
对于这两个方程式,所得菲涅耳反射率的计算公式如下: />
对于光谱路径示踪剂,我相信上述菲涅耳公式的使用将是简单明了的(只需将公式和h已将IOR和$ \ kappa $数据制成表格(例如https://refractiveindex.info上可用的数据)。
但是,这些公式如何在基于RGB的路径跟踪器中使用?这是否有可能(我相信是这样,因为这些是PBRT唯一使用的菲涅耳公式,并且至少适用于光谱和基于RGB的光谱数据,据我所知)?那么,如果是的话,如何生成IOR和$ \ kappa $三元组以用于以上公式?如果不是,那有什么替代方案(除了全光谱之外)?健全性(这就是为什么我只是将其添加为更新而不是实际答案)的原因,如果有人对此感兴趣或可能要添加评论,我会将其发布在此处。
根据此OSL着色器,至少复杂的菲涅尔项(对于导体)在基于RGB的路径跟踪器的上下文中,可以通过简单地替换$ \ eta $和$ \ kappa来评估通过对应于R,G和B“代表”波长的那些值来计算$。由于R,G和B并不是电磁频谱上的窄尖峰,因此“代表性”波长可能因一种实现方式而异。我已经看到,这些代表性波长的最常见值是红色的0.65 $ \ mu $ m,绿色的0.55 $ \ mu $ m和蓝色0.45 $ \ mu $ m。
例如,假设我们要渲染黄金材质。对于我们的代表波长(0.65 $ \ mu $ m,0.55 $ \ mu $ m和0.45 $ \ mu $ m),金的$ \ eta $和$ \ kappa $值可从https:// refractiveindex获得.info,将是:
$$ \ eta_ {gold} =(0.15557,0.42415,1.3831)$$
$$ \ kappa_ {gold} =(3.6024 ,2.4721,1.9155)$$
现在,只需评估每个颜色通道的菲涅耳反射率即可:
$$ Fresnel_ {Red} = F(\ eta [0],\ kappa [0],\ theta)$$
$$ Fresnel_ {Green} = F(\ eta [1],\ kappa [1],\ theta)$$
$$ Fresnel_ {Blue} = F(\ eta [2],\ kappa [2],\ theta)$$
我已经在Cook-Torrance BRDF中使用了这个复杂的菲涅耳方程,可以在这里看到其公式,并且获得了以下结果(将它们与使用Mitsuba渲染的参考图像进行了比较):
上图:用(左)Mitsuba和(右)我的渲染器渲染的金材料。使用(左)Mitsuba和(右)我的渲染器进行渲染。关于铜,图像至少在视觉上几乎是相同的。关于黄金,颜色略有不同。我进行了一些实验,发现“代表波长”值的很小变化可能会对最终颜色产生重大影响。因此,与金材料的渲染有关的色差最终可以归因于与每个渲染器用于R,G和B的“代表性”波长有关的差异。
评论
我希望在时间允许的情况下进行此操作。与参考相比,您的结果看起来不错。我很想从Schlick的渲染器中查看图像。在渲染器中,我试图使用基于图像的照明。我的黄金(带有Schlick的)看起来不太好,但是我不确定是否是因为BRDF或照明。认为我可能会转向区域照明(您使用的是吗?),并在一个受控程度更高的环境中工作,直到一切正确为止。@PeteUK是的,我仅使用一个面光源(实际上是一个球体)。我没有在Schlick的图像中包含渲染图像,以免使问题变得混乱。但是,我可以向您发送使用Schlick的菲涅尔公式渲染的等效图像以及场景的精确描述,以便您可以在渲染器上进行再现和比较。我的电子邮件在我的Github页面上可用(请参阅我的个人资料)。
非常好,正在发送电子邮件...