最近,我一直在研究pbrt,并且正在研究它们从粗糙度到\alpha值的重新映射:https://github.com/mmp/pbrt-v3/blob/master/src/core/microfacet.h#L86。
我了解到,在粗糙度值和\alpha值之间使用一些非线性重映射来使粗糙度在感知上线性和在[0, 1]范围内的变化是很常见的。在我看来,这个函数看起来可能是函数的某种多项式近似:
\alpha = 1.62142\cdot\sqrt{roughness}。
(这是一个显示匹配的Desmos链接--如果有人知道这是否正确,并且也知道他们是如何得出这个近似的,我很想知道,因为这看起来不像是标准的Taylor级数展开)如果这是正确的,它似乎是一个相当标准的重映射,使用\alpha的平方来获得粗糙度值,并确保\alpha的最大值(在本例中是1.62142)以粗糙度的形式传递给1。
我真正好奇的是,如何选择1.62142的最大值。在pbrt中,\alpha = \sqrt{2}\cdot(RMS slope):
https://pbr-book.org/3ed-2018/Reflection_模型/微面_模型#eq:贝克曼-各向同性,
这意味着最大的均方根斜率是\approx 1.14652。这似乎是一个非常具体的数值,最大粗糙度-这个限制是从哪里来的?据我所知,RMS斜率有无穷大的界限--是否有某种物理上的原因来限制它,或者它们所遵循的某种标准?
发布于 2021-09-04 17:01:19
事实上,\alpha没有数学最大值。正如您注意到的,microfacet斜率是无界的,所以原则上您可以有任意大的斜率值,因此可以有任意大的\alpha。这没有什么不对的--微面模型的数学一直工作得很好。
作为一件实际的事情,在某个特定的点之外,你并没有看到随着\alpha的增加,表面的外观发生了很大的变化。随着粗糙度的增加,镜面的高光变得更加宽广和柔和,直到表面看起来本质上是兰伯人。
我不知道值1.62142的起源或者那个特殊的粗糙度重映射曲线,但我猜想最大\alpha主要是为了给出一个视觉上有用的粗糙度值范围,最大值大约在它变得与漫射表面无法区分的点上。由于这是一个模糊的审美判断,可能没有意义的确切价值。
此外,从PBR的角度来看,典型的BSDFs只模拟单个散射(没有微面间的相互反射),但随着粗糙度的增加,多次散射对表面形貌的影响更大。因此,在某些高\alpha点,模型的精度会崩溃,并且不再是基于物理的,除非你在BSDF中加入了多次散射。具有复杂微观几何的材料也可以更好地用体积微片状分布来模拟,而不是(或除了)表面BSDFs。
https://computergraphics.stackexchange.com/questions/12168
复制相似问题