12.BlinnPhong式高光反射必备知识点

12.光照模型-高光反射光照模型-BlinnPhong式高光反射模型-必备知识点


12.1 知识点

Blinn-Phong式高光反射光照模型的来历和原理

来历

Blinn-Phong式高光反射光照模型是对经典的Phong光照模型的一种改进,主要用于计算高光反射颜色。Phong光照模型中的高光反射是该模型的一部分,类似地,Blinn-Phong光照模型也是由吉姆·布林(Jim Blinn,美国计算机科学家)提出的,它改进了高光反射的计算方法。

原理

Blinn-Phong光照模型使用半角向量来计算镜面反射,而不是像Phong光照模型那样使用反射向量。半角向量是视角方向和灯光方向的角平分线。这个改进使得计算更加高效,特别是在实时渲染中。

Blinn-Phong式高光反射光照模型认为:

  • 高光反射颜色与顶点法线向量和半角向量夹角的余弦值成正比。
  • 通过将余弦值取n次幂来表示光泽度(或反光度),n值越高,表面越光滑。


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

  • Blinn-Phong光照模型的高光反射光照颜色的计算公式如下:

  • 高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后顶点法线方向向量 · 标准化后半角向量方向向量)^n

  • 具体说明:

    1. 标准化后的顶点法线方向向量标准化后的半角向量方向向量 的点乘结果为 cosθ,代表了反射光的角度。
    2. 半角向量 的计算方式为视角单位向量和入射光单位向量的和,采用平行四边形法则。
    3. 幂次n 代表光泽度,值越大表示表面越光滑,反射光越集中。

Phong和Blinn-Phong的区别

Blinn-Phong光照模型和Phong光照模型在高光反射的计算上存在一定区别,导致了视觉表现的不同。

1. 高光散射

  • Blinn-Phong 模型的高光通常会产生相对均匀的高光散射,使物体看起来更加光滑均匀。
  • Phong 模型的高光反射可能会呈现更为锐利的散射,导致一些区域特别亮,而另一些区域相对较暗。

2. 高光锐度

  • Blinn-Phong 模型的高光通常具有较广的散射角,看起来不那么锐利。
  • Phong 模型的高光反射可能会更加锐利,特别是当观察者和光源夹角较小时,高光反射表现为小而亮的点。

3. 光滑度和表面纹理

  • Blinn-Phong 模型适合表现光滑的表面,因为它考虑了表面微观凹凸之间的相互作用,使光照在表面上更加均匀分布。
  • Phong 模型适合表现粗糙的表面纹理,因其高光散射可能使表面的纹理和细节更加突出。

4. 镜面高光大小

  • Blinn-Phong 模型通常产生较大的镜面高光,但高光区域均匀分布。
  • Phong 模型的镜面高光相对较小且更加锐利。

5. 性能差异

  • Blinn-Phong 模型通常比Phong模型计算更快,因此更适合在实时渲染中使用。

总结

Blinn-Phong式高光反射光照模型使用半角向量来计算高光反射,通过改进反射角的计算方式,提升了渲染性能并增强了光照效果。其高光反射光照颜色公式为:

高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后顶点法线方向向量 · 标准化后半角向量方向向量)^n

通过这种方式,Blinn-Phong模型提供了更加均匀的高光散射和更高的计算效率。


12.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson12_光照模型_高光反射光照模型_BlinnPhong式高光反射模型_必备知识点 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 Blinn-Phong式高光反射光照模型的来历和原理

        //来历
        //通过我们之前知识的学习
        //Phong式高光反射光照模型 是 Phong光照模型的一部分
        //因此很容易推测出 Blinn-Phong式高光反射光照模型
        //其实也是Blinn-Phong光照模型的一部分,主要是用于计算高光反射颜色的
        //Blinn-Phone光照模型的提出者:
        //吉姆·布林(Jim Blinn,美国计算机科学家)

        //原理:
        //Blinn-Phong式高光反射光照模型的理论是
        //它是对Phong式高光反射光照模型的改进
        //它不再使用反射向量计算镜面反射,而是使用半角向量来进行计算
        //半角向量为视角方向和灯光方向的角平分线方向

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

        #endregion

        #region 知识点二 Blinn-Phong式高光反射光照模型的公式

        //公式:
        //高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后顶点法线方向向量 · 标准化后半角向量方向向量)幂
        //1.标准化后顶点法线方向向量 · 标准化后半角向量方向向量 得到的结果就是 cosθ
        //2.半角向量方向向量 = 视角单位向量 + 入射光单位向量(平行四边形法则)
        //3.幂 代表的是光泽度  余弦值取n次幂

        #endregion

        #region 知识点三 Phong和Blinn-Phong的区别

        //由于两个光照模型中高光反射光照模型的计算方式不一样
        //从而会带来一些表现上的不同
        //1.高光散射
        //  Blinn-Phong模型的高光通常会产生相对均匀的高光散射,这会使物体看起来光滑而均匀。
        //  Phong模型的高光可能会呈现更为锐利的高光散射,因为它基于观察者和光源之间的夹角。
        //  这可能导致一些区域看起来特别亮,而另一些区域则非常暗。
        //2.高光锐度
        //  Blinn-Phong模型的高光通常具有较广的散射角,因此看起来不那么锐利。
        //  Phong模型的高光可能会更加锐利,特别是在观察者和光源夹角较小时,可能表现为小而亮的点。
        //3.光滑度和表面纹理
        //  Blinn-Phong模型通常更适合表现光滑的表面,因为它考虑了表面微观凹凸之间的相互作用,使得光照在表面上更加均匀分布。
        //  Phong模型有时更适合表现具有粗糙表面纹理的物体,因为它的高光散射可能会使纹理和细节更加突出。
        //4.镜面高光大小
        //  Blinn-Phong模型通常产生的镜面高光相对较大,但均匀分布。
        //  Phong模型可能会产生较小且锐利的镜面高光。
        //5.性能上的不同
        //  Blinn-Phong模型通常比Phong模型计算更快

        #endregion

        #region 总结

        //Blinn-Phong式高光反射
        //高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后顶点法线方向向量 · 标准化后半角向量方向向量)幂

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏