UnityShader(十三)Unity内置的函数

在计算光照模型时我们需要得到许多数据,比如光源方向、视角方向这种基本信息。

在之前的例子中都是自行在代码里计算的,比如:

normalize(_WorldSpaceLight0Pos.xyz) 得到光源方向(这种方法实际只适用平行光)

normalize(_WorldSpaceCameraPos.xyz-i.worldPosition.xyz) 得到视角方向 

但是如果需要处理更复杂的光照类型(如点光源和聚光灯),之前的计算方式是错误的。

Unity提供了一些内置函数来帮助我们计算这些信息,在之前的章节我们也谈及过。

UnityCG.cginc中一些常用的结构体 
名称 描述 包含的变量
appdata_base 可用于顶点着色器的输入 顶点位置、顶点法线、第一组纹理坐标
appdata_tan 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、第一组纹理坐标
appdata_full 可用于顶点着色器的输入 顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标
appdata_img 可用于顶点着色器的输入 顶点位置、第一组纹理坐标
v2f_img 可用于顶点着色器的输出 裁剪空间的位置、纹理坐标

 

UnityCG.cginc中一些常用的帮助函数
函数名 描述
float3 WorldSpaceViewDir(float4 v) 输入一个模型空间的顶点位置,返回世界空间中从该点到摄像机的观察方向。内部实现使用了UnityWorldSpaceViewDir函数
float3 UnityWorldSpaceViewDir(float4 v) 输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向。
float3 ObjSpaceViewDir(float4 v) 输入一个模型空间的顶点位置,返回模型空间中从该点到摄像机的观察方向。
float3 WorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。内部实现使用了UnityWorldSpaceLightDir函数。没有被归一化。
float3 UnityWorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化。
float3 ObjSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向。没有被归一化。
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向从模型空间转换到世界空间中
float3 UnityObjectToWorldDir(float3 dir) 把方向矢量从模型空间变换到世界空间中
float3 UnityWorldToObjectDir(float3 dir) 把方向矢量从世界空间转换到模型空间中

 

相关推荐

  1. UnityShaderUnity函数

    2024-02-03 09:38:01       54 阅读
  2. UnityShader预备知识】变量和函数

    2024-02-03 09:38:01       27 阅读
  3. PostgreSQL 函数

    2024-02-03 09:38:01       29 阅读
  4. awk数值函数

    2024-02-03 09:38:01       50 阅读
  5. 常用Python函数

    2024-02-03 09:38:01       29 阅读
  6. 【MySQL】7.MySQL 函数

    2024-02-03 09:38:01       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 09:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 09:38:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 09:38:01       82 阅读
  4. Python语言-面向对象

    2024-02-03 09:38:01       91 阅读

热门阅读

  1. TCP是怎么处理长连接、短连接

    2024-02-03 09:38:01       58 阅读
  2. JRE和JVM的区别

    2024-02-03 09:38:01       47 阅读
  3. Skywalking 学习之ByteBuddy 方法执行时间监控

    2024-02-03 09:38:01       55 阅读
  4. JVM学习

    JVM学习

    2024-02-03 09:38:01      52 阅读
  5. MySQL之DQL正则表达式

    2024-02-03 09:38:01       51 阅读
  6. 数据库指定某个列的某个值优先排序

    2024-02-03 09:38:01       59 阅读