追踪Cook-Torrance BRDF的路径
-对不起,很长的帖子,但是我更喜欢这样做,因为“ 细节中有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大号Ø(p,w ^Ø)= LË+∫ΩLi(p,wi)fr(wo,wi)cosθdωLo(p,wo)=Le+∫ΩLi(p,wi)fr(wo,wi)cosθdω L_o(\textbf{p}, \mathbf{w_o}) = L_e + \int_{\Omega} L_i(\textbf{p}, \mathbf{w_i}) fr(\mathbf{w_o}, \mathbf{w_i}) \cos \theta d\omega pp\textbf{p}wowo\mathbf{w_o}wiwi\mathbf{w_i}是光矢量,是沿着w o的输出辐射,是沿着和入射在的辐射。LoLoL_owowo\mathbf{w_o}p 瓦特我 COS θ = Ñ ⋅ 瓦特我LiLiL_ipp\textbf{p}wiwi\mathbf{w_i}cosθ=n⋅wicosθ=n⋅wi\cos \theta = \mathbf{n} \cdot \mathbf{w_i} 上面的积分(即渲染方程的反射项)可以使用以下蒙特卡洛估计器 其中是描述采样分布的概率密度函数(PDF)向量。 …