Graphics 如何正确钳制贝克曼分布

Graphics 如何正确钳制贝克曼分布,graphics,shader,probability,raytracing,clamp,Graphics,Shader,Probability,Raytracing,Clamp,我正在尝试实现一个微面BRDF着色模型(类似于Cook-Torrance模型),但我在本文中定义的贝克曼分布方面遇到了一些问题: 其中M是微面法线,N是宏观面法线,ab是介于[0,1]之间的“硬度”参数 我的问题是这个分布经常返回非常大的值,特别是当ab非常小的时候 例如,贝克曼分布用于根据该方程计算生成微面正态M的概率: 概率必须介于范围[0,1]之间,因此,如果贝克曼分布给出的值大于100000000,那么如何使用上述函数获得该范围内的值 那么有没有一个合适的方法来钳制分布?还是我误解了

我正在尝试实现一个微面BRDF着色模型(类似于Cook-Torrance模型),但我在本文中定义的贝克曼分布方面遇到了一些问题:

其中M是微面法线,N是宏观面法线,ab是介于[0,1]之间的“硬度”参数

我的问题是这个分布经常返回非常大的值,特别是当ab非常小的时候

例如,贝克曼分布用于根据该方程计算生成微面正态M的概率:

概率必须介于范围[0,1]之间,因此,如果贝克曼分布给出的值大于100000000,那么如何使用上述函数获得该范围内的值


那么有没有一个合适的方法来钳制分布?还是我误解了概率函数?如果值超过1,我尝试简单地将其钳制为1,但这并没有真正给出我想要的结果。

我遇到了与您相同的问题

如果你读

你会注意到这很正常。引用以下链接:

“BeckmannΑb参数等于RMS(均方根)微面斜率。因此,其有效范围为0(非包容性–0对应于完美镜像或Dirac delta,并导致Beckmann公式中的除0误差)最大为任意高的值。值1没有特殊意义–这只意味着均方根斜率为1/1或45°(…)”

另一句话:

“微平面方向的统计分布是通过微平面正态分布函数D(m)定义的。与F()不同,D()的值不限于介于0和1之间——尽管值必须是非负的,但可以任意大(表示微相浓度非常高,法线指向特定方向)。(……)”


你应该在谷歌上搜索Self Shadow的基于物理的着色课程,里面有很多有用的材料(每年有一篇博文:2010、2011、2012和2013)

谢谢!我一定会看看这些资源。