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)

参考