如何正确钳制贝克曼分布

时间:2014-04-20 02:46:25

标签: graphics shader probability raytracing clamp

我正在尝试实施Microfacet BRDF着色模型(类似于Cook-Torrance模型),我在本文定义的Beckmann分布方面遇到了一些问题:https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf

enter image description here

其中M是微平面法线,N是macrofacet法线,ab是[0,1]之间的“硬度”参数。

我的问题是,这种分布通常会返回极其大的值,尤其是当ab非常小时。

例如,Beckmann分布用于计算根据此等式生成microfacet法线M的概率:

enter image description here

概率必须在[0,1]范围之间,那么如果贝克曼分布给出的值大小为1000000000+,如何使用上述函数得到该范围内的值?

那么有适当的方法来限制分发吗?或者我误解它或概率函数?如果值超过1,我曾尝试将其钳制到1,但这并没有真正给我我想要的结果。

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。

如果您阅读

http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics_math_notes.pdf

http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics_math_notebook.pdf

你会发现这是完全正常的。引用链接:

“BeckmannΑb参数等于RMS(均方根)微平面斜率。因此其有效范围为0(不包括-0对应于完美镜像或Dirac delta,并导致除以0误差Beckmann公式)和任意高的值。对于1的值没有特别的意义 - 这只意味着RMS斜率是1/1或45°。(...)“

另一个引用:

“microfacet方向的统计分布是通过microfacet正态分布函数D(m)定义的。与F()不同,D()的值不限于0和1之间 - 尽管值必须是非否定,它们可以是任意大的(表示非常高的微平面集中,法线指向特定方向)。(...)“

你应该谷歌自我影子的基于物理的着色课程,其中包含大量有用的材料(每年有一篇博文:2010年,2011年,2012年和2013年)