我正在尝试实施Microfacet BRDF着色模型(类似于Cook-Torrance模型),我在本文定义的Beckmann分布方面遇到了一些问题:https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf
其中M是微平面法线,N是macrofacet法线,ab是[0,1]之间的“硬度”参数。
我的问题是,这种分布通常会返回极其大的值,尤其是当ab非常小时。
例如,Beckmann分布用于计算根据此等式生成microfacet法线M的概率:
概率必须在[0,1]范围之间,那么如果贝克曼分布给出的值大小为1000000000+,如何使用上述函数得到该范围内的值?
那么有适当的方法来限制分发吗?或者我误解它或概率函数?如果值超过1,我曾尝试将其钳制到1,但这并没有真正给我我想要的结果。
答案 0 :(得分:4)
我遇到了同样的问题。
如果您阅读
和
你会发现这是完全正常的。引用链接:
“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年)