三维游戏图形学学习笔记(一)基本光照模型

  游戏中常用的光主要有四种:环境光(ambient)、漫反射光(diffuse)、镜面反射光(高光,specular)和自发光(emissive)。
  基本公式:

final=ambient+diffuse+specular+emissive

1.环境光

  环境光是看起来在明亮环境中无所不在的光。比如说,看下你的桌底,尽管没有光源直接照射,你似乎还是可以看到桌下的深远地方并且描绘出其外形。这种光是通过物体表面与光线的不断交互产生的(比如不断反射、折射叠加产生的)。当光线到达物体表面时,他们会被部分或完全的反射、吸收掉,这个过程会持续无数次。所以还是会有光线可以到底你的桌底,即使只是很小的一部分。

ambient=KaglobalAmbient

  其中:
     - Ka是材质的环境反射系数
     - globalAmbient是入射环境光的颜色。

2.漫反射光

  漫反射光代表了从一个表面相等地向所有方向反射出去的方向光。

漫反射示意图

  公式如下:

diffuse=KdlightColormax(dot(N,L),0)

  其中:
     - Kd是材质的漫反射颜色
     - lightColor 是灯光的颜色
     - N是标准化的顶点法向量
     - L是标准化的指向灯光的向量

  这里需要解释一下

max(dot(N,L),0)

  规范化的向量N和L的点积是两个向量之间夹角的一个度量,夹角越小,P点受到更多的入射光照。而背向光源的表面将产生负数点积值,因此,公式max(dot(N,L),0)使得背向光源的表面的漫反射光为0,确保这些表面不会显示漫反射光照。

扫描二维码关注公众号,回复: 2562547 查看本文章

3.镜面反射光

  镜面反射光又称高光,是指由光源直接经物体表面反射入眼睛的光线。镜面反射使物体看上去有光泽,粗糙表面因反射率不高,所以缺乏此效果。镜面反射的强度取决于物体,光源和观察者。

镜面反射光示意图

3.1 Phong光照模型

specular=KslightColor(max(dot(N,R)),0)shininess

  其中:
     - Ks是材质的镜面反射颜色
     - lightColor是入射镜面反射光的颜色
     - N是归一化的表面法向量
     - R是归一化的反射光方向向量
     - shininess是高光指数,其值越大,则表面越光滑,反射光越集中,高光范围越小
  反射光方向R的计算公式:
R=2(NL)NL

  其中:
     - N是归一化的表面法向量
     - L是归一化的指向灯光的方向向量

3.2 改进的Blinn-Phong光照模型

specular=KslightColor(max(dot(N,H)),0)shininess

  其中:
     - Ks是材质的镜面反射颜色
     - lightColor是入射镜面反射光的颜色
     - N是归一化的表面法向量
     - H是归一化的指向灯光的方向向量L和视点方向V的中间向量
     - shininess是高光指数,其值越大,则表面越光滑,反射光越集中,高光范围越小
  中间向量H的计算公式:
H=L+V|L+V|

  其中:
     - L是归一化的指向灯光的方向向量
     - V是归一化的指向视点的方向向量
  Blinn-Phong光照模型与Phong光照模型的不同在于同样的参数下,前者的高光范围要大一点。同时,H的计算要比R的计算简单一些。在代码里R的计算是这么写的: R = 2 * (dot(N, L) * N) - L,而H是这么写的: H = normalize(L + V),可以看出Blinn-Phong光照模型的计算确实简单一些。

Phong光照模型效果
Blinn-Phong光照模型效果

4.自发光

  自发光即物体自身所发出的光,但并不影响场景中其他物体。公式为:

emissive=Ke

  其中:
     - Ke代表材质的放射光颜色

参考资料:

http://www.cnblogs.com/QG-whz/p/5189831.html?utm_source=tuicool&utm_medium=referral
http://blog.csdn.net/bianchengxiaosheng/article/details/51427407

猜你喜欢

转载自blog.csdn.net/vvsxr/article/details/70999745