unityshader之内置辅助文件初探

最近刚开始学shader。

unity为我们封装了许多很实用的变量、函数。

先mark一下,方便以后使用的时候查看。(只记录目前经常用到的,以后会不断更新、整理

首先,这些变量函数都是封装在一些文件里的。

Unity中的着色器包含文件具有.cginc扩展名,内置的文件是(其中自动包含的已用绿色标记):

  • HLSLSupport.cginc- 声明了很多用于跨平台编译的宏和定义
  • UnityShaderVariables.cginc- 常用的全局变量。
  • UnityCG.cginc- 常用的辅助函数。
  • AutoLight.cginc- 照明和阴影功能,例如表面着色器内部使用此文件。
  • Lighting.cginc- 包含各种内置的光照模型,如果编写的是表面着色器的话,会自动包含进来。
  • TerrainEngine.cginc- 地形辅助功能和植被着色器。

这些文件放在:Unity/Editor/Data/CGIncludes文件夹下,可以随时查看里面的内容。

包含在UnityShaderVariables.cginc中:

变换矩阵(描述中的x代指“顶点/方向矢量”)

名称 描述
UNITY_MATRIX_MVP 当前模型*视图*投影矩阵,用于将x从模型空间变换到裁剪空间
UNITY_MATRIX_MV 当前模型*视图矩阵,用于将x从模型空间变换到视图空间
UNITY_MATRIX_V 当前视图矩阵,用于将x从世界空间变换到视图空间
UNITY_MATRIX_P 当前投影矩阵。用于将x从观察空间变换到裁剪空间
UNITY_MATRIX_VP 当前视图*投影矩阵。用于将x从世界空间变换到裁剪空间
UNITY_MATRIX_T_MV UNITY_MATRIX_MV矩阵的转置
UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置,用于将法线从模型空间变换到观察空间
unity_ObjectToWorld 当前模型矩阵,用于将x从模型空间变换到世界空间
unity_WorldToObject unity_ObjectToWorld的逆矩阵,用于将x从世界空间变换到模型空间

灯光:

光参数以不同的方式传递给着色器,具体取决于渲染路径中使用,以及着色器中使用的LightMode 。
ForwardBaseForwardAdd传递类型:

名称 类型
_LightColor0 (在Lighting.cginc中声明) fixed4 访问该Pass处理的光源的颜色和强度信息
_WorldSpaceLightPos0 float4 光源方向(只适用于单光源)

雾和环境:

     
名称 类型
UNITY_LIGHTMODEL_AMBIENT fixed4 环境照明颜色(渐变环境中的天空颜色)。

在UnityCG.cginc中声明的函数:

UnityCG.cginc中的顶点变换功能

功能: 描述:

float4 UnityObjectToClipPos(

float3 pos)

将点从对象空间转换为相机在齐次坐标系中的剪裁空间。

这相当于mul(UNITY_MATRIX_MVP,float4(pos,1.0))

float3 UnityObjectToViewPos( float3 pos)

将点从对象空间转换为视图空间。这相当于

mul(UNITY_MATRIX_MV,float4(pos,1.0)).xyz

UnityCG.cginc中的通用助手函数

功能: 描述:
float3 WorldSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回世界空间中从该点到摄像机的

观察方向(未归一化)。

float3 ObjSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回模型空间中从该点到摄像机的

观察方向(未归一化)。

在UnityCG.cginc中转发渲染辅助函数

这些函数仅在使用正向渲染时有用(ForwardBase或ForwardAdd传递类型)。

功能: 描述:
float3 WorldSpaceLightDir (float4 v) 给定一个模型空间顶点位置,返回世界空间中从该点到光源的光照方向。(未归一化)
float3 ObjSpaceLightDir (float4 v) 给定一个模型空间顶点位置,返回模型空间中从该点到光源的光照方向。(未归一化)

UnityCG.cginc文件没有说明会自动包含,但是我在未include"unityCG.cginc"时,好像依然可以使用其中的一些函数?

猜你喜欢

转载自blog.csdn.net/a977621265/article/details/87860236