22.光照模型-Unity内置光照函数
22.1 知识点
内置光照计算相关函数是什么
在实现光照模型时,我们经常需要进行一些数学计算,比如坐标和法线相关的转换。在 UnityCG.cginc 中提供了一些常用的函数,可以帮助我们快捷地进行这些数学计算。
例如,我们之前使用的方法 UnityObjectToWorldNormal 可以将法线从模型空间转换到世界空间。
有了这些内置函数,我们就不需要自己通过数学计算来得到结果,直接调用 API 即可得到我们想要的结果。
除了之前在课程中用到的一些函数外,还有一些其他的内置函数。这节课我们主要就是对它们进行了解。
常用内置函数
float3 WorldSpaceViewDir(float4 v)
传入模型空间下的顶点位置,返回世界空间中从该点到摄像机的观察方向。float3 UnityWorldSpaceViewDir(float4 v)
传入世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向。float3 ObjSpaceViewDir(float4 v)
传入模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向。float3 WorldSpaceLightDir(float4 v)
(仅用于向前渲染中)传入模型空间中的顶点位置,返回世界空间中该点到光源的光照方向(没有归一化)。float3 UnityWorldSpaceLightDir(float4 v)
(仅用于向前渲染中)传入世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向(没有归一化)。float3 ObjSpaceLightDir(float4 v)
(仅用于向前渲染中)传入模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向(没有归一化)。float3 UnityObjectToWorldNormal(float3 normal)
把法线从模型空间转换到世界空间中。float3 UnityObjectToWorldDir(float3 dir)
把方向矢量从模型空间转换到世界空间中。float3 UnityWorldToObjectDir(float3 dir)
把方向矢量从世界空间转换到模型空间中。float4 UnityObjectToClipPos(float4 v)
输入模型空间中的顶点位置,返回裁剪空间下的顶点位置。
总结
可以把这些常用函数记到笔记中,方便以后使用时翻看和回忆。
22.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson22_光照模型_Unity内置光照函数 : MonoBehaviour
{
void Start()
{
#region 知识点一 内置光照计算相关函数是什么?
//我们在实现光照模型时
//经常会进行一些数学计算
//比如 坐标、法线相关的转换
//在UnityCG.cginc中提供了一些常用的函数
//可以帮助我们快捷的进行数学计算
//比如我们之前将法线从模型空间转换到世界空间的方法
//UnityObjectToWorldNormal 等
//有了这些内置函数,我们就不需要自己去通过数学计算来得到结果了
//直接调用API即可得到我们想要的结果
//除了之前我们在课程中用到的一些函数外
//还有一些其他的内置函数
//这节课我们主要就是对它们进行了解
#endregion
#region 知识点二 常用内置函数
//1. float3 WorldSpaceViewDir(float4 v)
// 传入模型空间下的顶点位置,返回世界空间中从该点到摄像机的观察方向
//2. float3 UnityWorldSpaceViewDir(float4 v)
// 传入世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
//3. float3 ObjSpaceViewDir(float4 v)
// 传入模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向
//4. float3 WorldSpaceLightDir(float4 v)
// (仅用于向前渲染中)
// 传入模型空间中的顶点位置,返回世界空间中该点到光源的光照方向(没有归一化)
//5. float3 UnityWorldSpaceLightDir(float4 v)
// (仅用于向前渲染中)
// 传入世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向(没有归一化)
//6. float3 ObjSpaceLightDir(float4 v)
// (仅用于向前渲染中)
// 传入模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向(没有归一化)
//7. float3 UnityObjectToWorldNormal(float3 normal)
// 把法线从模型空间转换到世界空间中
//8. float3 UnityObjectToWorldDir(float3 dir)
// 把方向矢量从模型空间转换到世界空间中
//9. float3 UnityWorldToObjectDir(float3 dir)
// 把方向矢量从世界空间转换到模型空间中
//10.float4 UnityObjectToClipPos(float4 v)
// 输入模型空间中的顶点位置,返回裁剪空间下的顶点位置
#endregion
#region 总结
//可以把这些常用函数记到笔记中
//以后使用时翻看回忆即可
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com