为了进一步阐述我上面的评论作为这个问题的潜在答案:
从某种意义上说,您是对的,NDF 给出了微表面法线M
完全对齐的统计概率(其中确切的意思是:关于和N
周围的无穷小立体角)。N
M
因此,NDF 是一个单位为 的分布函数(更广泛地说是“广义函数”)one over steradians
。这意味着,当您将函数的值乘以立体角时,您会得到一个无单位的分数值。这就是集成发挥作用的地方。
因为,NDF 的最终用途是在渲染方程中确定微分面反射的光的比例M
,其中M
是两个其他向量之间的半向量V_o
,V_i
而这两个向量中的一个矢量被定义为到接收差分表面的“出射方向”,另一个被定义为“入射光方向”。我们将使用w_o
= 传出和w_i
= 传入方向,但由于互惠,这并不重要。
当我们求解渲染方程时,我们必须在我们想要着色的表面点的整个半球上进行积分(即我们想要沿出射方向计算其辐射度w_o
)以考虑所有可能从该表面点反射的光沿着传出方向w_o
。为此,我们必须知道这一点的“辐照度”。为了得到这个,我们评估所有可能的入射光方向的 BRDF,w_i
并对它们的贡献求和和平均。
如果我们确实w_i
对给定w_o
方向进行了无限多个方向的采样,并针对每个这样的方向询问 NDF,并对 NDF 的余弦加权结果进行平均,结果将始终是精确1.0
的,因为如果我们仅将 NDF 视为BRDF,当从表面反射时,所有出射光w_o
都必须来自某个地方。
由于亥姆霍兹互易性,我们可以反过来说:当固定w_i
方向时(所以只考虑一个方向光进来)并整合所有可能的出射方向w_o
,再次评估和平均余弦加权NDF,结果将再次精确1.0
。因为,当我们再次只考虑 BRDF 中的 NDF 时,入射光总是会反射到某个地方而不会丢失。
那么,在写完所有这些之后,NDF 函数的单个样本现在实际上意味着什么?简而言之:这意味着您不会对所有微分立体角进行积分并对结果进行平均,而是仅对单个方向取一个样本,然后您将其声明为积分的结果(您仅使用单个样本计算)。所以你基本上用一个样本计算了黎曼和。
或者换句话说:简单地在单个位置对 NDF 进行采样没有合理的物理意义/结果。我希望这能消除一些未知数。
这实际上是我第一个认真的 StackOverflow 答案,我知道我将来肯定可以改进编写这些答案!谢谢!:)