BRDF:双向反射分布函数详解
什么是 BRDF
BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)是一个四维函数,描述光在物体表面如何反射。它定义了给定入射方向和观察方向时,反射光辐射率与入射光辐照度的比率。BRDF 是 PBR 的理论基础,用于计算材质的光照响应。
BRDF 的数学定义
BRDF 定义为:
`f_r(ω_i, ω_o) = dL_o(ω_o) / dE_i(ω_i)`
其中 ω_i 是入射光方向,ω_o 是反射光方向,L_o 是反射辐射率,E_i 是入射辐照度。BRDF 必须满足两个物理约束:
- **互易性**:交换入射和出射方向,BRDF 值不变。
- **能量守恒**:对所有出射方向积分,反射总能量不超过入射能量。
常见 BRDF 模型
Lambertian 漫反射
最简单的漫反射模型,假设表面完全粗糙,反射均匀分布。BRDF 为常数 `ρ/π`,其中 ρ 是反照率。它常用于漫反射项。
Phong 和 Blinn-Phong
经典经验模型,Phong 使用反射向量与视线点积的高光,Blinn-Phong 使用半角向量优化计算。它们不严格满足能量守恒,但计算高效。
Cook-Torrance 模型
现代 PBR 中广泛使用的微表面模型。它将 BRDF 分为漫反射项和镜面反射项,镜面项基于微表面理论:
`f_spec = (D * G * F) / (4 * (N·L) * (N·V))`
- **D(法线分布函数)**:描述微表面法线分布,常用 GGX/Trowbridge-Reitz。
- **G(几何衰减函数)**:描述微表面自遮挡,常用 Smith 模型。
- **F(菲涅尔项)**:描述反射率随角度变化,常用 Schlick 近似。
其他模型
- **Oren-Nayar**:考虑粗糙表面的漫反射,比 Lambertian 更准确。
- **Disney Principled BRDF**:艺术家友好的参数化模型,被许多引擎采用。
在实时渲染中的应用
实时渲染中,着色器通常使用简化版 Cook-Torrance 模型。例如,Unity 的 Standard Shader 和 Unreal 的 Lit Shader 都基于 GGX 微表面模型和 Schlick 菲涅尔近似。BRDF 还用于预计算环境光照(如 IBL 的预滤波)。
常见问题
BRDF 与 PBR 有什么关系?
PBR 基于物理的渲染必须使用物理正确的 BRDF 模型,如 Cook-Torrance,以确保能量守恒和真实感。
为什么需要多个 BRDF 模型?
不同模型在性能、真实感和复杂性之间权衡。简单模型适合移动端,复杂模型适合高端渲染。
什么是微表面模型?
微表面模型假设表面由微小平面组成,通过统计分布描述粗糙度,是 Cook-Torrance 的基础。
BRDF 满足互易性吗?
物理正确的 BRDF 必须满足互易性,即交换入射和出射方向结果相同。
如何选择 BRDF 模型?
对于 PBR 渲染,推荐使用 GGX 微表面模型,它在真实感和性能之间取得了良好平衡。
常见问题
BRDF 与 PBR 有什么关系?
PBR 基于物理的渲染必须使用物理正确的 BRDF 模型,如 Cook-Torrance,以确保能量守恒和真实感。
为什么需要多个 BRDF 模型?
不同模型在性能、真实感和复杂性之间权衡,简单模型适合移动端,复杂模型适合高端渲染。
什么是微表面模型?
微表面模型假设表面由微小平面组成,通过统计分布描述粗糙度,是 Cook-Torrance 的基础。
BRDF 满足互易性吗?
物理正确的 BRDF 必须满足互易性,即交换入射和出射方向结果相同。
如何选择 BRDF 模型?
对于 PBR 渲染,推荐使用 GGX 微表面模型,它在真实感和性能之间取得了良好平衡。