追踪Cook-Torrance BRDF的路径


27

-对不起,很长的帖子,但是我更喜欢这样做,因为“ 细节中有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

Lo(p,wo)=Le+∫ΩLi(p,wi)fr(wo,wi)cos⁡θdω
pwowi是光矢量,是沿着w o的输出辐射,是沿着和入射在的辐射。Lowop 瓦特我 COS θ = Ñ ⋅ 瓦特我Lipwicos⁡θ=n⋅wi

上面的积分(即渲染方程的反射项)可以使用以下蒙特卡洛估计器 其中是描述采样分布的概率密度函数(PDF)向量。 pwk

1N∑k=1NLi(p,wk)fr(wk,wo)cos⁡θp(wk)
pwk

对于实际渲染,必须指定BRDF和PDF。对于Cook-Torrance模型的镜面反射项,我使用以下BRDF 其中 在上述等式中, d=1

fr(wi,wo)=DFGπ(n⋅wi)(n⋅wo)
˚F=Ç小号pÈÇ+(1-c ^小号pÈÇ)(1-瓦特我⋅ħ)5ģ=分钟(1,2(Ñ⋅ħ)(Ñ⋅w
d=1个米2(ñ⋅H)4经验值⁡((ñ⋅H)2-1个米2(ñ⋅H)2)
F=CspËC+(1个-CspËC)(1个-w一世⋅H)5
ħ=瓦特Ò+瓦特
G=分(1个,2(ñ⋅H)(ñ⋅wØ)wØ⋅H,2(ñ⋅H)(ñ⋅w一世)wØ⋅H)
Ç小号pÊÇ˚F˚Fh=wo+wi|wo+wi|而是镜面颜色。除之外的所有方程都是从原始论文中提取的。(也称为Schlick近似)是对实际菲涅耳项的有效且较不准确的近似。CspËCFF

在渲染平滑镜面的情况下,必须使用重要性采样。但是,我仅对合理的粗糙表面()进行建模,因此,我决定保持一段时间均匀采样(以更长的渲染时间为代价)。在这种情况下,PDF为 通过将统一的PDF和Cook-Torrance BRDF替换为Monte Carlo估计器(注意为用(随机变量)替换,我得到 p (瓦特ķ)米≈0.2瓦特我瓦特ķ

p(wķ)=1个2π
w一世wķπ2大号我(p,瓦特ķ)(d˚Fģ
1个ñ∑ķ=1个ñ大号一世(p,wķ)(dFGπ(ñ⋅wķ)(ñ⋅wØ))cos⁡θ(1个2π)
现在我们可以取消并删除总和,因为我们从交点仅发射一条随机射线。我们最终得到 由于,我们可以进一步简化 π
2大号一世(p,wķ)(dFG(ñ⋅wķ)(ñ⋅wØ))cos⁡θ
cos⁡θ=ñ⋅wķ
2大号一世(p,wķ)(dFGñ⋅wØ)

所以,这就是当光线射到镜面的反射率由Cook-Torrance BRDF描述时,我正在评估的表达式。这似乎反映出比收到的能量更多的能量。我几乎可以肯定这是有问题的(或在推导过程中),但是我无法发现它。

有趣的是,如果将上面的表达式乘以,则会得到看起来正确的结果。但是,我拒绝这样做,因为我无法在数学上证明其合理性。1个π

任何帮助都非常欢迎!谢谢!

更新

就像@wolle在下面指出的那样,本文提出了一种更适合路径跟踪的新公式,其中正态分布函数(NDF)包含因子,而BRDF包含因素。因此 和 将上述方程式包括在内渲染方程式,我最终得到了 d1个πF[R1个4

dñËw=1个π米2(ñ⋅H)4经验值⁡((ñ⋅H)2-1个米2(ñ⋅H)2)
F[RñËw(w一世,wØ)=dFG4(ñ⋅w一世)(ñ⋅wØ)
π2大号一世(p,wķ)(dñËwFGñ⋅wØ)
效果很好!PS:现在的问题是更好地了解和的新配方如何有助于维持能量守恒……但这是另一个主题。dF[R

更新2

正如PeteUK指出的那样,我问题原始文本中提出的菲涅耳公式的作者被错误地归咎于库克和托伦斯。上面使用的菲涅耳公式实际上称为Schlick近似值,并以Christophe Schlick命名。问题的原始文本已作相应修改。


不知道您是否仍在访问此网站,但我对您的菲涅耳方程式有疑问,并将其发布在此处
— PeteUK

Answers:


12

根据本文中,在应: 因此您最终会得到 1个πF[R1个4

F[R=dFG4(ñ⋅w一世)(ñ⋅wØ),
π2大号一世(p,wķ)(dFGñ⋅wØ)。

我已经看到了Cook-Torrance BRDF的另一种表示形式,其中方程式乘以而不是。但是,最后,这种修改的效果很小,因为我们将最终方程式中的2替换为1.57()。我在这里做了测试(以防万一...),确实问题仍然存在。1个41个π=π2
— Christian Pagot

@Capagot 有时会将因子合并到光源强度中(按照惯例),并排除在BRDF中;另见这个问题。但这在实时渲染中比在路径跟踪中更为常见。您还说您的Lambertian测试与Mitsuba完美匹配,因此似乎这不是问题所在...仍然值得研究。1个/π
— 内森·里德

@Capagot我认为您在分布函数缺少。我连接到纸包括贝克曼分布因子,其使用,从而具有中和在应该做的伎俩。1个πd1个4F[R1个πd
— wolle 2016年

@NathanReed我已经阅读了有关将嵌入颜色的文章。但是,由于您提到的原因,我确信这不是问题。π
— Christian Pagot

@wolle就是这样!实际上,我已经快速浏览了您提到的论文,但是我没有注意到!我只是改变了我的执行情况占了在和在,和现在的一切就像一个魅力!我将包含问题的最新答案!谢谢!1个πd1个4F[R
— Christian Pagot

13

我将其发布给所有想知道和之间的混淆的人1个π1个4

1个π

1个4(ñ⋅ω一世)

1个4

要对该术语进行更好的解释,您应该选中[Nayar,91]附录D。这是同一张纸上的图像:

dω′=dω[R4cos⁡θ一世′

1个4

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.