通用光照公式,光照处理

我们将用Phong光照模型来实现这个特效。


I = I(ambient) + I(diffuse) + I(specular)

每个光照组件贡献的计算如下:

I(ambient) = Ka*Ia ---------由此公式可以看出环境光是无限叠加的

I(diffuse) = Kd*Id * (N dot L)    --------镜面反射光是由法线和光照方向决定D。

Ispecular = Ks * Is * (V dot R)n  -----------高光是由视角向量和发射向量决定的

Ka ,Kd ,Ks 分别环境,漫射和镜面光照的系数。根据我们表面的反射系数,这些参数被指定为范围在0到1的常量值。如果我们想要一个高反射率的表面,我们要设置Kd和Ks的值接近1。这将产生一个光亮的表面,在光直接照射的地方有一个高强度的高光 。为了模拟一个高吸光率的表面,我们设置反射率的值接近0。

Id是漫反射光照强度,Is是镜面反射强度,Ia是环境光强度。N,V,R分别为法向量,视向量和反射向量。 n是镜面反射系数,调整视向量和反射向量的之间的角度值。光泽的表面有一个狭窄的光照范围(这两个向量之间的夹角很小),一个以南的表面有宽的反射范围。因此一个非常光泽模型有一个大的n值(100左右),一个黯淡的表面有一个大概等于0.5的值。

我们在像素shader中用公式来计算该光照模型的每个像素的最终颜色。

你可能感兴趣的:(shader)