-对不起,很长的帖子,但是我更喜欢这样做,因为“ 细节中有Devil。 ” :)
我正在从头开始编写路径跟踪器,它对于完美扩散的(朗伯型)表面效果很好(即,炉测试至少在视觉上表明它是节能的,并且渲染的图像与使用Mitsuba渲染器生成的图像相同)参数)。现在,我正在实现对原始Cook-Torrance微面模型的镜面反射项的支持,以渲染一些金属表面。但是,似乎该BRDF反射的能量多于所接收的能量。请参阅下面的示例图像:
上图:Mitsuba参考(假设是正确的)。图:直接光采样,重要半球采样,最大路径长度= 5、32分层spp,盒式滤波器,表面粗糙度= 0.2,RGB的路径跟踪。
上图:实际渲染的图像:蛮力朴素的路径跟踪,均匀的半球采样,最大路径长度= 5、4096分层spp,盒式滤波器,表面粗糙度= 0.2,RGB。尽管在渲染设置方面存在一些差异,但很明显,渲染的图像不会收敛到之前显示的参考。
我倾向于认为这不是实现问题,而是有关在渲染方程框架内正确使用Cook-Torrance模型的问题。下面,我解释了我如何评估镜面反射BRDF,我想知道我是否做得正确,否则,为什么。
在深入了解细节之前,请注意渲染器非常简单:1)仅实现暴力天真的路径跟踪算法-不进行直接光采样,不进行双向路径跟踪,不进行MLT;2)在交点以上的半球上所有采样都是均匀的-根本没有重要性采样,对于扩散表面也没有采样;3)射线路径的最大最大长度固定为5-无俄罗斯轮盘;4)辐射/反射率是通过RGB元组通知的-没有光谱渲染。
Cook Torrance微面模型
现在,我将尝试构建实现镜面BRDF评估表达式所遵循的路径。一切开始与渲染方程 ,其中p是交点在表面处,w o是观看向量,w i
上面的积分(即渲染方程的反射项)可以使用以下蒙特卡洛估计器 其中是描述采样分布的概率密度函数(PDF)向量。 pwk
对于实际渲染,必须指定BRDF和PDF。对于Cook-Torrance模型的镜面反射项,我使用以下BRDF 其中 在上述等式中, d=1
在渲染平滑镜面的情况下,必须使用重要性采样。但是,我仅对合理的粗糙表面()进行建模,因此,我决定保持一段时间均匀采样(以更长的渲染时间为代价)。在这种情况下,PDF为 通过将统一的PDF和Cook-Torrance BRDF替换为Monte Carlo估计器(注意为用(随机变量)替换,我得到 p (瓦特ķ)瓦特我瓦特ķ
所以,这就是当光线射到镜面的反射率由Cook-Torrance BRDF描述时,我正在评估的表达式。这似乎反映出比收到的能量更多的能量。我几乎可以肯定这是有问题的(或在推导过程中),但是我无法发现它。
有趣的是,如果将上面的表达式乘以,则会得到看起来正确的结果。但是,我拒绝这样做,因为我无法在数学上证明其合理性。
任何帮助都非常欢迎!谢谢!
更新
就像@wolle在下面指出的那样,本文提出了一种更适合路径跟踪的新公式,其中正态分布函数(NDF)包含因子,而BRDF包含因素。因此 和 将上述方程式包括在内渲染方程式,我最终得到了
更新2
正如PeteUK指出的那样,我问题原始文本中提出的菲涅耳公式的作者被错误地归咎于库克和托伦斯。上面使用的菲涅耳公式实际上称为Schlick近似值,并以Christophe Schlick命名。问题的原始文本已作相应修改。