Kulla-Conty BRDF补充_重要性采样GGX
重要性采样的方法有多种,这里我们介绍其中一种,你的实现也可以使用其他方法。我们将通过 GGX 采样来完成 E(µ)的预计算工作。先从理论上讨论 GGX
采样算法,对于给定出射方向 o 的 GGX采样,目标是采样生成入射方向 i 以计算
。因此,对于 GGX 算法有两个核心问题需要解决:如何采样和对应的概率 pdf 是什么。
第一个问题,如何采样入射方向 i。
我们首先根据选用的 NDF模型,重要性采样微表面法向 m(也就是 i,o 之间的半程向量h),随后通过采样得到的微表面法向 m,利用反射关系来计算入射方向 i:
同时对于任意 NDF 下,采样 m 对应的概率密度 pdf m (m),有:
(这是由 NDF 中
这一性质得出,文档不会涉及到关于
NDF 性质的讨论。同样,关于下述 GGX 采样点生成的推导过程也会被略去)
通过该 ,可以计算出 GGX NDF 对应的采样点应该为:
其中,ξ_1 ,ξ_2 ∈ [0,1)。
补充:
因为我们可以用球面坐标(,
)表示半径向量m,因此我们可以把表示为和的乘法。不依赖角度,所以我们可以简单的推导出:
所以:
运用逆变换采样(Inverse Transform Sampling Method)生成具有指定概率密度分布的随机变量,我们需要先得到概率密度的累积分布,这里直接给出结果。
其中 .现在反转cdf函数,以产生从均匀值到角度的映射:
或者
两者是等价的。
第二个问题,如何计算采样得到的入射方向的概率。
因为我们最后生成的采
样方向是入射方向 i, 所以最后结果的权重应该是:
所以需要将之前采样微表面法线的概率密度 转换成采样入射的概率密
度 ,而两者之间的转换只需要简单的乘一个 Jacobian 项即可,即:
其中,对于反射有:
讨论完以上两点后,最终对于采样入射的权重可以整理为:
补充:
Jacobian项
直观理解:
法线分布会以宏观法线为中心对应于一个波瓣lobe,在视线确定情况下,经过反射,反射光线又会形成于另一个波瓣。这两个波瓣的大小不同,因此对应点的概率密度分布也不同。
以一定概率任意取一个法线和以其中为中心的微小的立体角范围,会对应于另一个反射光线和其微小范围;这两个范围的光线的对应概率相等,因为它们直接是1-1映射的关系;又因为范围足够小,可以近似认为是概率密度在这个小区间均匀分布,因此:
因此概率密度分布之比与微表面积之比成反比。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通