US3S1L6——Blinn-Phong式高光反射光照模型

Blinn-Phong式高光反射光照模型

公式:

高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向标准化后半角向量方向)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向})^{光泽度}

  1. 标准化后顶点法线方向标准化后半角向量方向\overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向} 得到的结果就是 cosθ\cos\theta
  2. 半角向量方向=视角单位向量+入射光单位向量\overrightarrow{半角向量方向} = \overrightarrow{视角单位向量} + \overrightarrow{入射光单位向量}
  3. 光泽度是幂运算,假设光泽度为 nn ,相当于:(max(0,cosθ))n(max(0,\cos\theta))^n
  • 来历

    通过我们之前知识的学习,我们知道 Phong式高光反射光照模型 是 Phong光照模型 的一部分
    因此很容易推测出Blinn-Phong式高光反射光照模型,
    其实也是Blinn-Phong光照模型的一部分,主要是用于计算高光反射颜色的

    Blinn-Phong光照模型的提出者:吉姆·布林(Jim Blinn,美国计算机科学家)

  • 原理:

    Blinn-Phong式高光反射光照模型的理论是:
    它是对Phong式高光反射光照模型的改进,它不再使用反射向量计算镜面反射,而是使用半角向量来进行计算

    半角向量为视角方向灯光方向的角平分线方向

    image

    认为 高光反射的颜色顶点法线向量 以及 半角向量夹角的余弦 成正比
    并且通过对余弦值取n次幂来表示光泽度(或反光度)

Blinn-Phong式高光反射光照模型的公式

公式:

高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向标准化后半角向量方向)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向})^{光泽度}

  1. 标准化后顶点法线方向标准化后半角向量方向\overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向} 得到的结果就是 cosθ\cos\theta
  2. 半角向量方向=视角单位向量+入射光单位向量\overrightarrow{半角向量方向} = \overrightarrow{视角单位向量} + \overrightarrow{入射光单位向量}
  3. 光泽度是幂运算,假设光泽度为 nn ,相当于:(max(0,cosθ))n(max(0,\cos\theta))^n

Phong和Blinn-Phong的区别

由于两个光照模型中高光反射光照模型的计算方式不一样,从而会带来一些表现上的不同:

  1. 高光散射

    Blinn-Phong模型的高光通常会产生相对均匀的高光散射,这会使物体看起来光滑而均匀。

    Phong模型的高光可能会呈现更为锐利的高光散射,因为它基于观察者和光源之间的夹角。
    这可能导致一些区域看起来特别亮,而另一些区域则非常暗。

  2. 高光锐度

    Blinn-Phong模型的高光通常具有较广的散射角,因此看起来不那么锐利。

    Phong模型的高光可能会更加锐利,特别是在观察者和光源夹角较小时,可能表现为小而亮的点。

  3. 光滑度和表面纹理

    Blinn-Phong模型通常更适合表现光滑的表面,因为它考虑了表面微观凹凸之间的相互作用,使得光照在表面上更加均匀分布。

    Phong模型有时更适合表现具有粗糙表面纹理的物体,因为它的高光散射可能会使纹理和细节更加突出。

  4. 镜面高光大小

    Blinn-Phong模型通常产生的镜面高光相对较大,但均匀分布

    Phong模型可能会产生较小且锐利的镜面高光

总结下来就是,Blinn-Phong模型的高光更均匀更大,适合光滑表面,Phong模型的高光更锐利更小,适合粗糙表面

性能上,Blinn-Phong模型比Phong模型更快些,因为计算反射角比起直接计算两向量之和计算量更大,因此相对更快

Blinn-Phong式高光反射模型的实现

  • 逐顶点光照
  • 逐片元光照