
镜面反射遵循反射角和最终出射角度相同:θr=θo,所以 Fresnel reflectance:F(θr)=F(θo),扩展到立体角为 F(ωr)=F(ωo)。
所以镜面的能量传递满足以下关系:
Lr(ωr)=Lr(ωo)=Fr(ωr)Li(r(ωr,n))
其中 ωr=r(ωi,n) ,即反射方向 ωr 与入射方向 ωi 关于法线 n 对称。
BRDF 在半球上积分为 1,相当于一个概率密度分布,积分域为 Ω。
离散卷积里有个 identity kernel,一个离散序列与它做卷积可以等于序列本身。对于连续的光传输方程的情况也是如此,这时候序列就变成了入射进来的 Radiance,而 identity kernel 就变成了 Dirac Delta 函数。
根据第一个反射公式,我们的确需要构造一个带 Delta 分布的 BRDF。因为 Reflectance(Scattering) Equation:
Lr(ωr)=∫Ωfr(ωi,ωr)Li(ωi)cosθidωi
除了让 fr(ωi,ωr) 里带个能使最后积出来直接带个 Li(ωr) 的 Delta 函数之外,好像就真没法子构造出 Lr(ωr)=Fr(ωr)Li(ωr) 了。镜面(Mirror/Perfect specular)的反射模型与其它任何反射模型都不一样的是,它只朝一个确定的 ωr 发射,不像别的 BRDF 有很大的波瓣;而一维 Dirac Delta 可视化出来就是在 0 处有一个无穷长的箭头,并满足 ∫Rδ(x)dx=1。
Delta 函数与一个函数积分可以明确地挑出一个值:
∫f(x)δ(x−xi)dx=f(xi)
最后还原到 f 也正是 Delta 函数的 identity 属性,就好像 identity martix I 满足 IM=M 一样。
接下来根据 Lr(ωr)=Fr(ωr)Li(r(ωr,n)),于是:
Lr(ωr)=∫Ωfr(ωi,ωr)Li(ωi)cosθidωi=Fr(ωr)Li(r(ωr,n))
先让 fr(ωi,ωr)=F(ωr)⋅δ(ωi−ωr) 吧,注意到 Delta 函数的输入是 ωi−ωr,为的是挑出唯一的反射立体角。代入积分:
∫ΩF(ωr)δ(ωi−ωr)Li(ωi)cosθidωi=Fr(ωr)Li(r(ωr,n))cosθi
这显然不太对,因为多了个 cosθi 出来,所以应该在原来构造的 BRDF 上乘个 cosθi1,最终得到:
fr(ωi,ωr)=cosθiF(ωr)δ(ωi−ωr)
这就是镜面反射的 BRDF。