9.光照模型-高光反射光照模型-Phong式高光反射模型-必备知识点
9.1 知识点
Phong式高光反射光照模型的来历和原理
来历
高光反射光照模型没有单一的发明者,因为有多种计算方式。与半兰伯特光照模型类似,它是通过多位从业者的研究和发展逐步演化出来的。
- Phong光照模型的提出者: 裴祥风(Bui-Tuong Phong,越南裔美国计算机学家)
- Blinn-Phong光照模型的提出者: 吉姆·布林(Jim Blinn,美国计算机科学家)
原理
- Phong式高光反射光照模型的基本理论:基于光的反射行为和观察者的位置决定了高光反射的表现效果。
- 高光反射颜色 与 光源的反射光线 以及 观察者位置方向向量夹角的余弦 成正比。
- 通过对余弦值取
n
次幂来表示物体的光泽度或反光度。
Phong式高光反射光照模型的公式
公式
高光反射光照的颜色可以通过以下公式计算:
高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后的观察方向向量 · 标准化后的反射方向)^n次幂
观察方向向量 和 反射方向向量 的点乘结果就是
cosθ
。取
cosθ
的n
次幂表示物体的光泽度,最终结果与光源的颜色和材质的高光反射颜色相乘。
如何在Shader中获取公式中的关键信息
观察者的位置
摄像机的位置可以通过_WorldSpaceCameraPos
获取。反射向量
可以通过reflect(入射向量, 顶点法向量)
方法计算反射向量。指数幂计算
使用pow(底数, 指数)
计算反射光的强度。
总结
Phong式高光反射光照模型的计算过程总结如下:
高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后的观察方向向量 · 标准化后的反射方向)^n次幂
这一公式通过对反射角度的余弦值取幂,能够表现物体表面的高光反射效果,体现了光线的反射特性及材质的光泽度。
9.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson09_光照模型_高光反射光照模型_Phong式高光反射模型_必备知识点 : MonoBehaviour
{
void Start()
{
#region 知识点一 Phong式高光反射光照模型的来历和原理
//来历:
//高光反射光照模型没有单一的发明者,因为有多种计算的方式
//和半兰伯特光照模型一样,是经过很多从业者的研究和发展而演化出来的
//其中比较关键的几位贡献者为
//Phong光照模型的提出者:
// 裴祥风(Bui-Tuong Phong,越南裔美国计算机学家)
//Blinn-Phone光照模型的提出者:
// 吉姆·布林(Jim Blinn,美国计算机科学家)
//原理:
//Phong式高光反射光照模型的理论是
//基于光的反射行为和观察者的位置决定高光反射的表现效果
//认为高光反射的颜色和 光源的反射光线以及观察者位置方向向量夹角的余弦成正比
//并且通过对余弦值取n次幂来表示光泽度(或反光度)
#endregion
#region 知识点二 Phong式高光反射光照模型的公式
//公式:
//高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后观察方向向量· 标准化后的反射方向)幂
//1.标准化后观察方向向量· 标准化后的反射方向 得到的结果就是 cosθ
//2.幂 代表的是光泽度 把余弦值cosθ取n次幂 得到结果 再去和光源的颜色 * 材质高光反射颜色相乘
#endregion
#region 知识点三 如何在Shader中获取公式中的关键信息
//1.观察者的位置(摄像机的位置)
// _WorldSpaceCameraPos
//2.相对于法向量的反射向量 方法
// reflect(入射向量,顶点法向量) 返回反射向量
//3.指数幂 方法
// pow(底数,指数) 返回计算结果
#endregion
#region 总结
//Phong式高光反射
//高光反射光照颜色 = 光源的颜色 * 材质高光反射颜色 * max(0, 标准化后观察方向向量· 标准化后的反射方向)幂
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com