BRDF
引言¶
在微平面模型中,我们谈到,根据能量守恒定律,一束光碰撞到表面时,它会分离成两部份,即折射与反射。因此,我们可以这么计算这两个量:
// 设入射光线能量为1
// 反射/镜面 部分,入射光线被反射的能量所占的百分比
float kS = calculateSpecularComponent(...);
// 折射/漫反射 部分
float kD = 1.0 - ks;
而BRDF正是帮助我们计算出,材质的反射与折射属性的。
BRDF¶
BRDF,Bidirectional Reflective Distribution Function,双向反射分布函数
【输入参数】
- 入射光方向\(\omega_i\)
- 出射(观察)方向\(\omega_o\)
- 平面法线\(n\)
- 用来表示微平面粗糙度的参数\(a\)
【输出】每束光线对一个给定了材质属性的平面上最终反射出来的光线所作出的贡献程度
【例】
- 如果一个平面拥有完全光滑的表面(比如镜面),那么对于所有的入射光线\(\omega_i\)而言(除了一束以外),BRDF函数都会返回0.0
- 只有一束与出射光线\(\omega_o\)拥有相同(被反射)角度的光线会得到1.0这个返回值
【遵守能量守恒定律】对于BRDF,为了实现物理学上的可信度,它必须遵守能量守恒定律,即 反射光线的总和 永远不能超过 入射光线的总量。
- 严格上来说,同样采用\(\omega_i\)(入射光方向)和\(\omega_o\)(出射方向)作为输入参数的 Blinn-Phong光照模型也被认为是一个BRDF。然而由于Blinn-Phong模型并没有遵循能量守恒定律,因此它不被认为是基于物理的渲染。