当光照射到表面时,表面会散射光,将光的一部分反射会环境中。有两个主要的效果用来描述这种反射:反射光的光谱分布和方向分布。光谱分布我们另外会开个专题将,你可以简单理解为颜色。例如想象柠檬表皮被自然光照射的情况。表皮会吸收大部分的蓝光,反射大部分的红光和绿光(这是有柠檬表皮本身的属性决定的)。所以自然光下面柠檬表皮通常是黄色的。无论观察方向在哪里,不同方向的颜色都是黄色的,不同点是表皮可能会出现不同位置的高亮点。再考虑镜子。镜子的反射光和观察方向就有非常大的关系。
半透明表面的反射就更加复杂了。诸如皮肤,树叶,蜡,液体等材质都有一种子表面光传输的特性(subsurface light transport),这种特性使得在某点进入表面的光会在远离改点相当位置的点离开表面。你可以自己试一下用手电筒照射你的嘴巴,看一下你的脸颊的颜色是如何呈现的。
有两种抽象机制可以描述光的反射:BRDF和BSSRDF。BRDF忽略子表面光传输的效果,这种简化在子表面光光传输效果很少的时候可以更有效。BSSRDF则引入这种效果,更加通用复杂但是计算量也更大。酌情使用。
BRDF:双向反射分布函数
首先,你要时刻记住这是一个函数!这个函数正式地描述了表面的反射。
如上图,我们想要知道由于沿着方向 ω i \omega_i ωi照射表面的辐射亮度 L i ( p , ω i ) L_i(p, \omega_i) Li(p,ωi)引起的沿着 ω 0 \omega_0 ω0方向离开表面的辐射亮度 L 0 ( p , ω o ) L_0(p,\omega_o) L0(p,ωo)。把 ω i \omega_i ωi当成方向的微分圆锥体,p点的微分辐射照度是:
d E ( p , ω i ) = L i ( p , ω i ) c o s θ i d ω i \mathrm{d}E(p,\omega_i)=L_i(p,\omega_i)cos\theta_i\mathrm{d}\omega_i dE(p,ωi)=Li(p,ωi)cosθidωi
在 ω 0 \omega_0 ω0反射的微分辐射亮度将受上面的微分辐射照度的影响。回想第一篇文章我们介绍的集合光学的其中一个假设“线性”,反射的微分辐射亮度正比于上面的辐射照度:
d L o ( p , ω o ) ∝ d E ( p , ω i ) \mathrm{d}L_o(p, \omega_o)\propto\mathrm{d}E(p,\omega_i) dLo(p,ωo)∝dE(p,ωi)
而上面的这个比例关系正是今天介绍的重点之一,BRDF:
f r ( p , ω o , ω i ) = d L o ( p , w o ) d E ( p , ω i ) = d L o ( p , ω o ) L i ( p , ω i ) c