22.Unity内置常用光照函数

  1. 22.光照模型-Unity内置光照函数
    1. 22.1 知识点
      1. 内置光照计算相关函数是什么
      2. 常用内置函数
      3. 总结
    2. 22.2 知识点代码

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

×

喜欢就点赞,疼爱就打赏