光照和着色处理

光照用来表示材质和光源之间的相互作用。光照可以和颜色,纹理,以及透明度等一起使用,共同形成屏幕上的视觉外观效果。

主要存在三种类型的着色处理方法:扁平、Gouraud、Phong。这3种方法分别基于多边形,顶点,像素来计算光照效果。

扁平着色处理是以三角形为单位进行颜色计算,然后用这种颜色对三角形进行填充。(用扁平方式进行着色处理的图像没有镜面高光成分)

Gouraud着色处理首先计算三角形每个顶点处的光照,然后用顶点颜色通过插值来计算三角形内部各点的光照。Gouraud着色处理效果高度依赖所要绘制的物体的细节层次,还存在丢失高光、无法捕捉聚光效果、马赫带效应问题。对于这些局限性,可以通过使用纹理来表现照明效果来克服。

Phong着色处理用三角形各顶点处的法向量通过插值的方式计算每个像素处的法向量,然后根据各个像素的法向量计算光照效果。

Gouraud方法其实可以通过将表面细分为比像素更小的三角形,取得和Phong一样的效果。(主要用于电影制作)

顶点或像素处的光照可以用光照模型来计算。所有模型都非常相似,均可以分解为3个主要部分:漫反射分量、镜面反射分量、环境分量。

1)漫反射分量

漫反射是一个基于Lambert定律的几何属性。漫反射分量的目的是捕捉不光滑表面的行为。漫反射分量可以表示为:idiff = n·I = cos,其中n为表面法向量,I为光向量(与光照方向相反),它们都经过归一化处理。当Θ>pi/2时,漫反射光照为0。

Lambert定律的几何解释:

 

其中,l为光线之间的距离,光照强度与该距离有关,Θ为光线与表面法向量的夹角,可以计算出光线在表面上的距离为l/cosΘ。

为了利用光源的漫反射颜色sdiff和材质的漫反射颜色mdiff,可以将idiff写成idiff = (n·I)mdiff*sdiff.    *表示分量乘法

考虑到当n和I之间的角度大于90°,漫反射为0,则idiff = max((n·I),0)mdiff*sdiff

2)镜面反射分量

镜面反射分量的目的是通过产生高光来使物体表面出现闪闪发光的效果。

如下所示为一个用图形硬件模拟高光效果的模型,其中v是从表面点p到视点之间的距离,r是光线向量I在法线n周围的反射。

ispec=(r·v)mshi =(cosρ)mshi 。 mshi描述了表面的光亮度,mshi越大,物体表面越亮。这个方程称为Phong光照方程(不要和Phong着色处理混淆)。

光向量I在法线n附近反射,产生反射向量r,r的计算公式为: r=2(n·I)n-I,其中n,I都是归一化后的,所以r也是归一化的。

反射向量r的推导:

ispec的另一种形式:

ispec=(n·h)mshi=(cosθ)mshi. 其中h是I和v之间的归一化半向量:h = I+v/||I+v||

利用光源的高光颜色和材质的高光颜色后: ispec=max((n·h),0)mshimspec*sspec。

3)环境分量

 

posted @ 2016-05-08 22:28  朴者  阅读(1835)  评论(0编辑  收藏  举报