正态分布函数中潜在活跃微面的浓度
Concentration of potentially active microfacets in a Normal Distribution Function
我正在尝试理解 Cook-Torrance Microfacet 模型,目前我停留在正态分布函数 D(Beckmann、Blinn-Phong 或 GGX)。
一些在线资源声称 D 是与表面法线 N 对齐的微面法线 M 的分数D 是分数,它位于 [0,1] 之间。 1, 2
经过一些研究,我了解到 D 是 M 的浓度,与 N 一致。 3,
4
这个浓度值(经过一些测试可以达到 32 甚至更高)对我来说有点不祥。
从这样一个非规范化的值中到底能读出什么?
是否与 M 对齐到 N 的分数有关?
或者我忽略了一些简单的事情?
为了进一步阐述我上面的评论作为这个问题的潜在答案:
你是对的,NDF 给出了微表面法线 M
与 N
完全对齐的统计概率(其中确切的意思是:相对于 [= 周围的无穷小立体角11=] 和 M
).
因此,NDF 是一个分布函数(更广泛地说是 "generalized function"),单位为 one over steradians
。这意味着,当您将函数的值乘以立体角时,您会得到一个无单位的分数值。
这就是整合发挥作用的地方。
因为,NDF 的最终用途是在渲染方程中确定在 M
的微分立体角内被微面反射的光的分数,其中 M
是两个其他向量 V_o
和 V_i
之间的半向量,其中一个向量定义为接收微分表面的 "outgoing direction",另一个定义为 "incoming light direction" .
我们将使用 w_o
= outgoing 和 w_i
= incoming 方向,但由于互惠性,它真的无关紧要。
当我们求解渲染方程时,我们必须对我们想要遮蔽的表面点的整个半球进行积分(即我们想要计算其沿出射方向的辐射 w_o
)以考虑所有沿出射方向w_o
可能会从该表面点反射的光。为此,我们必须知道这个点的"irradiance"。为了得到这个,我们评估所有可能的入射光方向的 BRDF w_i
并对它们的贡献求和和平均。
如果我们确实对给定 w_o
方向的所有无限多个 w_i
方向进行采样,并针对每个此类方向询问 NDF,并对 NDF 的余弦加权结果进行平均,结果将始终是正好 1.0
,因为如果我们只将 NDF 视为 BRDF 中的一个潜在因素, 所有 沿 w_o
的出射光必须来自 某处 从表面反射时。
并且由于 Helmholtz 互易性,我们可以换句话说:当固定 w_i
方向时(因此只考虑单一方向的光来自)并对所有可能的 outgoing 方向 w_o
并再次对余弦加权 NDF 进行计算和平均,结果将再次恰好 1.0
。
因为,当我们再次只考虑 BRDF 中的 NDF 时,入射光总是会反射到某处 而不会丢失。
所以,在写完所有这些之后,NDF 函数的单个样本现在实际上意味着什么?简而言之:这意味着您不会对所有微分立体角进行积分并对结果进行平均,而只是对一个方向进行单个采样,然后将其声明为积分的结果(您仅使用单个样本计算)。所以你基本上用一个样本计算了黎曼和。
或者换句话说:简单地在单个位置对 NDF 进行采样不包含合理的物理 meaning/result。
我希望这能澄清一些未知数。
这实际上是我第一个认真的 Whosebug 回答,我知道我将来肯定可以在编写这些内容时有所改进!
谢谢! :)
我正在尝试理解 Cook-Torrance Microfacet 模型,目前我停留在正态分布函数 D(Beckmann、Blinn-Phong 或 GGX)。 一些在线资源声称 D 是与表面法线 N 对齐的微面法线 M 的分数D 是分数,它位于 [0,1] 之间。 1, 2
经过一些研究,我了解到 D 是 M 的浓度,与 N 一致。 3, 4
这个浓度值(经过一些测试可以达到 32 甚至更高)对我来说有点不祥。
从这样一个非规范化的值中到底能读出什么?
是否与 M 对齐到 N 的分数有关?
或者我忽略了一些简单的事情?
为了进一步阐述我上面的评论作为这个问题的潜在答案:
你是对的,NDF 给出了微表面法线 M
与 N
完全对齐的统计概率(其中确切的意思是:相对于 [= 周围的无穷小立体角11=] 和 M
).
因此,NDF 是一个分布函数(更广泛地说是 "generalized function"),单位为 one over steradians
。这意味着,当您将函数的值乘以立体角时,您会得到一个无单位的分数值。
这就是整合发挥作用的地方。
因为,NDF 的最终用途是在渲染方程中确定在 M
的微分立体角内被微面反射的光的分数,其中 M
是两个其他向量 V_o
和 V_i
之间的半向量,其中一个向量定义为接收微分表面的 "outgoing direction",另一个定义为 "incoming light direction" .
我们将使用 w_o
= outgoing 和 w_i
= incoming 方向,但由于互惠性,它真的无关紧要。
当我们求解渲染方程时,我们必须对我们想要遮蔽的表面点的整个半球进行积分(即我们想要计算其沿出射方向的辐射 w_o
)以考虑所有沿出射方向w_o
可能会从该表面点反射的光。为此,我们必须知道这个点的"irradiance"。为了得到这个,我们评估所有可能的入射光方向的 BRDF w_i
并对它们的贡献求和和平均。
如果我们确实对给定 w_o
方向的所有无限多个 w_i
方向进行采样,并针对每个此类方向询问 NDF,并对 NDF 的余弦加权结果进行平均,结果将始终是正好 1.0
,因为如果我们只将 NDF 视为 BRDF 中的一个潜在因素, 所有 沿 w_o
的出射光必须来自 某处 从表面反射时。
并且由于 Helmholtz 互易性,我们可以换句话说:当固定 w_i
方向时(因此只考虑单一方向的光来自)并对所有可能的 outgoing 方向 w_o
并再次对余弦加权 NDF 进行计算和平均,结果将再次恰好 1.0
。
因为,当我们再次只考虑 BRDF 中的 NDF 时,入射光总是会反射到某处 而不会丢失。
所以,在写完所有这些之后,NDF 函数的单个样本现在实际上意味着什么?简而言之:这意味着您不会对所有微分立体角进行积分并对结果进行平均,而只是对一个方向进行单个采样,然后将其声明为积分的结果(您仅使用单个样本计算)。所以你基本上用一个样本计算了黎曼和。
或者换句话说:简单地在单个位置对 NDF 进行采样不包含合理的物理 meaning/result。 我希望这能澄清一些未知数。
这实际上是我第一个认真的 Whosebug 回答,我知道我将来肯定可以在编写这些内容时有所改进! 谢谢! :)