4

我正在尝试实现一个 Microfacet BRDF 着色模型(类似于 Cook-Torrance 模型)并且我在本文中定义的贝克曼分布遇到了一些问题:https ://www.cs.cornell.edu/~srm/publications /EGSR07-btdf.pdf

在此处输入图像描述

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

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

例如,贝克曼分布用于计算根据以下方程生成微平面法线 M 的概率:

在此处输入图像描述

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

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

4

1 回答 1

5

我和你有同样的问题。

如果你读

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

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

“贝克曼 Αb 参数等于 RMS(均方根)微平面斜率。因此,它的有效范围从 0 开始(不包括 –0 对应于完美镜像或狄拉克增量,并导致贝克曼公式中除以 0 错误)和任意高的值。值 1 没有特殊意义——这只是意味着 RMS 斜率为 1/1 或 45°。(...)"

还有一句引用:

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

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

于 2014-04-22T23:29:26.083 回答