6.1 Lession 6 光照
[TOC]
光照基础
光照模型 (Phong reflection model)
- 环境光照(Ambient Lighting):即使在黑暗的情况下,世界上也仍然有一些光亮(月亮、一个来自远处的光),所以物体永远不会是完全黑暗的。我们使用环境光照来模拟这种情况,也就是无论如何永远都给物体一些颜色。所以环境光照一般是个常量。
- 漫反射光照(Diffuse Lighting):模拟光源对物体的方向性影响,物体的某一部分越是正对着光源,它就会越亮。
- 镜面光照(Specular Lighting):模拟有光泽物体上面出现的亮点。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。
环境光照
void main()
{
float ambientStrength = 0.1f;
vec3 ambient = ambientStrength * lightColor;
vec3 result = ambient * objectColor;
color = vec4(result, 1.0f);
}
漫反射光照
如果光线垂直于物体表面,这束光对物体的影响会最大化(译注:更亮)。
郎伯(Lambert)余弦定律
对于一个漫反射体,表面的反射光亮度和光源入射角(入射光线和表面法向量的夹角)的余弦成正比
镜面光照
Given vectors n and l, find vector r.
Answer: If n and l are normalized, then r = 2n<n,l> - l
光源类型
- 环境光
环境光光源是一个固定强度,固定颜色的光源,无方向无差别地作用于所有物体。所有物体都会有一样的颜色和亮度。这样的光源主要用于提供一个基本照明。这是最简单的一种照明模型,也能模拟光线被多次反射散射后产生的一个均一的效果。
- 有向光
有向光从一个方向无差别地照亮所有物体。就像一个无限大和无限远的区域光源。他会在物体表面产生明暗效果, 但不会根据距离衰减。
- 点光
光从一点出发,向所有方向投射。
- 聚光灯光
模拟一个聚光灯。 光从锥形顶点向底部投射。
- 区域光
光从平面上的一小区域发出,是比点光源更准确的模型。
- 有体积光
光从一个有体积的小物体发出。
Blinn–Phong reflection model
Phong的计算由反射向量和观察向量决定,当两者的夹角θ超过90时,截断为0.0,则没有了镜面光成分。因此Phong模型能处理的是下面的左图中(θ≤90)的情况,而对于右图中(θ>90)的情况则镜面光成分计算为0,没有很好地体现实际光照情况。s
Blinn-Phong模型不再依赖于反射向量Blinn-Phong模型不再依赖于反射向量,
而是采用了所谓的 半程向量(Halfway Vector)