6.光照模型-漫反射光照模型-半兰伯特光照模型-必备知识点
6.1 知识点
单位向量点乘的结果范围
向量点乘
根据数学公式,我们知道:
假设单位向量 A 和单位向量 B,它们的点乘结果为:
A · B = |A| * |B| * cosθ = cosθ
其中,cosθ 的范围在 -1 到 1 之间(夹角为0度时,点乘结果为1;当夹角为180度时,点乘结果为-1)。因此,单位向量进行点乘时,它们的结果是 -1 到 1。
关于兰伯特光照公式
漫反射光照颜色 = 光源的颜色 * 材质的漫反射颜色 * max(0, 标准化后物体表面法线向量 · 标准化后光源方向向量)
对于 max(0, 标准化后物体表面法线向量 · 标准化后光源方向向量) 这一块来说,取值范围是 0 到 1。
兰伯特光照背面会显得黑色,是因为把向量计算后小于0的部分被抛弃,赋值为0,从而表现为黑色。
需要加上兰伯特光照模型的环境光变量来优化效果。
半兰伯特光照模型的来历和原理
来历
半兰伯特光照模型是在兰伯特光照模型的基础上进行改进的。它并没有任何物理依据,而是一种视觉增强技术。它出现的主要原因是,在使用兰伯特光照模型时,背光面显得全黑。而半兰伯特光照模型能够让背光面也呈现明暗变化。
半兰伯特光照模型没有特定的发明者,它是图形学领域众多研究人员共同努力的结果。研究人员们经常相互借鉴和改进现有的模型,以更好地模拟真实世界中的光照和材质反射。
原理
半兰伯特光照模型与兰伯特光照模型的理论是一致的,认为漫反射光的强度仅与入射光的方向和反射点处表面法线的夹角的余弦成正比。
半兰伯特光照模型的公式
公式
- 漫反射光照颜色 = 光源的颜色 * 材质的漫反射颜色 * ((标准化后物体表面法线向量 · 标准化后光源方向向量) * 0.5 + 0.5)
对比
兰伯特光照模型的后半部分为:
max(0, 标准化后物体表面法线向量 · 标准化后光源方向向量)
在这一部分,点乘小于0的部分都会变为0。
半兰伯特光照模型的后半部分为:
((标准化后物体表面法线向量 · 标准化后光源方向向量) * 0.5 + 0.5)
在这一部分,点乘小于0的部分加上0.5后,都会变为 0 到 0.5。
这两者都是将点乘结果的取值范围从 -1 到 1 映射到了 0 到 1。
总结
半兰伯特光照模型是基于兰伯特光照模型进行的修改,主要目的是让背光面能够呈现明暗变化。漫反射光照颜色可以表示为:
光源的颜色 * 材质的漫反射颜色 * ((标准化后物体表面法线向量 · 标准化后光源方向向量) * 0.5 + 0.5)
6.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson06_光照模型_漫反射光照模型_半兰伯特光照模型_必备知识点 : MonoBehaviour
{
void Start()
{
#region 知识点一 单位向量点乘的结果范围
//根据数学公式我们知道
//假设单位向量A和单位向量B,它们的点乘结果为
//A·B = |A| * |B| * cosθ = cosθ
//cosθ 的范围在 - 1 到 1 之间(夹角为0度时,点乘结果为1;当夹角为180度时,点乘结果为-1)
//因此单位向量进行点乘时
//它们的结果是 -1 ~ 1
//关于兰伯特光照公式
//漫反射光照颜色 = 光源的颜色 * 材质的漫反射颜色 * max(0, 标准化后物体表面法线向量· 标准化后光源方向向量)
//对于 max(0, 标准化后物体表面法线向量· 标准化后光源方向向量)这一块来说 取值范围是0~1
//兰伯特光照背面会黑色 是因为把向量计算后小于0的抛弃掉 都赋值0 就会表现为黑色 需要加上加上兰伯特光照模型环境光变量优化效果
#endregion
#region 知识点二 半兰伯特光照模型的来历和原理
//半兰伯特光照模型是基于 兰伯特光照模型 的基础上进行改进的
//它没有任何物理依据,只是一个视觉加强技术
//它出现的主要原因是因为我们在使用兰伯特光照模型时
//在背光面是全黑的
//而半兰伯特光照模型可以让背光面也可以有明暗变化
//半兰伯特光照模型没有特定的发明者
//它是图形学领域的众多研究人员共同的贡献
//研究人员们经常相互借鉴和改进现有的模型
//以更好地模拟真实世界中的光照和材质反射
//原理
//和兰伯特光照模型的理论是一样的
//认为漫反射光的强度仅与入射光的方向和反射点处表面法线的夹角的余弦成正比
#endregion
#region 知识点三 半兰伯特光照模型的公式
//公式:
//漫反射光照颜色 = 光源的颜色 * 材质的漫反射颜色 *((标准化后物体表面法线向量· 标准化后光源方向向量)* 0.5 + 0.5)
//对比:
//兰伯特光照模型的 后半部分:
// max(0, 标准化后物体表面法线向量· 标准化后光源方向向量)
// 点乘小于0的部分都会变成0
//半兰伯特光照模型的 后半部分:
// ((标准化后物体表面法线向量· 标准化后光源方向向量)* 0.5 + 0.5)
// 点乘小于0的部分加上0.5后都会变成 0 ~ 0.5
// 两者都是 把点乘结果的取值范围从 -1 ~ 1 映射到了 0 ~ 1
#endregion
#region 总结
//半兰伯特光照模型 是 基于兰伯特光照模型进行的修改
//主要目的是让背光面可以有明暗变化
//漫反射光照颜色 = 光源的颜色 * 材质的漫反射颜色 *((标准化后物体表面法线向量· 标准化后光源方向向量)* 0.5 + 0.5)
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com