7.6 镜面光
考虑图7.11所示的光滑表面。当灯照射在这样一个表面上时,光线会在一个由反射系数描述的圆锥体区域内形成锐利的反射;我们将这种反射称为镜面高光反射(specular reflection,或直译为镜面反射)。与漫反射不同,高光可能不会传入眼睛,因为它只在一个特定的方向上反射;高光的计算过程与观察点的位置相关。也就是说,当场景中的观察点位置发生变化时,我们看到的高光强度也会跟着变化。

镜面反射的圆锥体区域由一个反射向量r和一个角度ϕmax来定义。简单来说,反射光的强度可由反射向量r和观察向量v=

注意,因为v和r是单位向量,所以cosϕ = v•r。
我们现在定义照模型中的高光项:
cs = ks•ls ⨂ ms = ksS
其中
颜色ls指定了光源发出的高光总量。镜面材质颜色ms指定了表面反射和吸收的入射高光总量。系数ks根据r和v之间的夹角来决定高光强度。图7.13说明了一个表面可能接收不到漫反射光(L•n <0),但是却可以接收到高光。不过,在这种情况下,它收到的高光是毫无意义的,我们应该将ks设为0。

注意:高光幂p的取值应该总是大于1的。
新的光照模型为:
LitColor = la⨂ma + kd•ld ⨂ md + ks•ls ⨂ ms = A + kdD + ksS (公式7.3)
kd = max(L∙n ,0)
注意:反射向量r = I − 2(n•I)n(参见图7.14)。(这里假设n是一个单位向量。)不过,我们在着色器程序中总是使用HLSL的内置函数reflect来计算。这里的入射光向量I是指入射光的方向(它与光线向量L的方向相反) 。

发布时间:2014/8/5 下午8:48:53 阅读次数:5567