图形学补完计划(四):光照模型-1
参考:
光照模型
当光照射到物体表面时,物体对光会发生反射、透射、吸收、衍射、折射、和干涉,其中被物体吸收的部分转化为热,反射、透射的光进入人的视觉系统,使我们能看见物体。为模拟这一现象,我们建立一些数学模型来替代复杂的物理模型,这些模型就称为明暗效应模型或者光照模型。
光照模型可分为局部光照模型与全局光照模型,下面将按种类进行分析。
局部光照模型
在图形学中,仅处理光源直接照射物体表面的光照明模型被称为局部光照明模型。
局部光照模型是一种比较简单的光照模型,它是与光栅化渲染算法相适应的,光栅化算法一次只考虑一个像素的光照强度,因此局部光照模型不能计算某像素受其他像素影响的光照强度部分。也就是说,局部光照模型只对物体进行直接光照的计算,而不考虑其他的间接影响,常见的局部光照模型有以下几种。
Lambert光照模型
Lambert光照模型主要是用来模拟粗糙物体表面的漫反射光照现象,是一种经验模型。
漫反射的基本特点有两点:
- 反射强度与观察者的角度没有关系;
- 反射强度与光线的入射角度有关系。
Lambert 光照模型的计算公式如下:
其中:
- 代表(漫反射)光照的计算结果,即某像素点的着色
- 代表物体的漫反射系数,表示物体对不同颜色的光的吸收程度
- 代表能量的衰减
- 代表该点吸收的能量大小,即 Lambert 余弦定理,这里做了 max 的操作,确保最小为 0,即不考虑折射、透射等情况,只考虑反射。
phong光照明模型
Lambert模型较好的表现了粗糙表面的光照现象,如墙壁,纸张等,但是在用于诸如金属等有光泽效果的材质上则会显得呆板,表现不出光泽,主要原因是Lambert光照模型没有考虑表现这些表面的镜面反射效果。
Phong 模型将物体光照分为三个部分进行计算,分别是:漫反射分量、镜面高光和环境光,也是一种经验模型。
-
环境光分量是用来模拟全局光照效果的,其实就是在物体光照信息基础上叠加上一个较小的光照常量,用来表示场景中其他物体反射的间接光照。具体实现:环境分量,直接设置一个ambient分量,乘上光照颜色和物体颜色;
-
漫反射分量,用光线到片段的向量与片段平面法线向量的点乘,乘上光的颜色和物体颜色;
-
镜面分量,通过指数函数pow计算,有一个shininess分量,越大表示高光越尖锐,用到了视线方向和反射光线方向的点积。
Blinn-Phong光照模型
Phong 模型存在的问题:
-
在 Phong 模型中,我们通过计算观察方向 v 与反射方向 R 的夹角来确定反射光的强度,但在计算机中计算反射向量 R 的计算量比较大。
-
Phong 模型会出现光照截断或者过度不自然的现象,即断层现象;出现这种的情况的原因是视角和反射矢量的角度不能超过90度。如果角度大于90度,点积的结果为负导致镜面光分量值为0.0。
Blinn-Phong 光照模型是对 Phong 氏光照模型的改进,Blinn-Phong模型在处理镜面反射时不使用观察方向和反射光线的夹角来计算,而是引入了一个新的向量:半角向量(Halfway vector)。半角向量其实很简单,就是入射光线向量L和观察方向V的中间位置(角平分线)。Blinn-Phong求高光亮度的时候使用半角向量和法向量的点积来决定高光亮度。Phong是用反射光线和视线向量的点积来求高光亮度。
BlinnPhong光照模型混合和了Lambert的漫反射和标准的高光,渲染有时比Phong高光更柔和、更平滑,此外它的处理速度相当快,因此成为许多CG软件中默认的光照渲染方法。
Phong模型及它的改进模型Blinn-Phong模型至今仍在使用,比如著名的3D软件3dsMax中的基于它们的Blinn-Phong明暗器。
小结
关于局部光照模型就基本分析到这里,除上述介绍的这些模型外还有其他局部光照模型,这里就不再分析了;可以看到这里所介绍的局部光照模型都是经验模型,即一种近似的、不真实的模型。想要达到照片级的光照效果,还得靠全局光照。