Unity的包含文件
一、包含文件的使用语法
包含文件是以cginc
作为拓展名的文本文件。
Windows系统,Unity所有包含文件存放在安装目录\Editor\Data\CGIncludes
\下;Mac系统,包含文件存在Applications\Unit\Unity.app\Contents\CGIncludes\
下。
使用方法:
1 2 3 4 5 6 7
| { CGPROGRAM #include “UnityCG.cginc" ENDCG }
|
二、UnityCG.cginc
1.顶点着色器输入结构体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| struct appdata_base { float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID };
struct appdata_tan { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID };
struct appdata_full { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 texcoord3 : TEXCOORD3; fixed4 color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID };
struct appdata_img { float4 vertex : POSITION; half2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID };
struct v2f_img { float4 pos : SV_POSITION; half2 uv : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO };
|
每个结构体最后一行为宏,可以暂时不管。
包含文件中可以使用的内置结构体
结构体 |
包含信息 |
appdata_base |
顶点坐标、顶点法线和第一套UV坐标 |
appdata_tan |
顶点坐标、切向量、顶点法线和第一套UV坐标 |
appdata_fulle |
顶点坐标、切向量、顶点法线、第一至第四套UV坐标和顶点对应颜色 |
appdata_img |
顶点坐标、第一套UV坐标 |
v2f_img |
裁切空间顶点坐标、纹理坐标 |
2.顶点变换函数
顶点变换相关的函数
函数 |
说明 |
float4 UnityObjectToClips(float3 pos) |
将顶点从模型空间变换到齐次裁切空间,等同于mul(UNITY_MATRIX_MVP,float4(pos,1,0)) |
float3 UnityObjectToViewPos(float3 pos) |
将顶点从模型空间转换到摄像机空间,等同于mul(UNITY_MATRIX_MV,float4(pos,1,0)).xyz。当输入为float4类型,Unity会自动重载为float3类型 |
float3 UnityWorldToViewPos(float3 pos) |
将顶点从世界空间变换到摄像机空间,等同与mul(UNITY_MATRIX_V,float4(pos,1,0)).xyz |
float4 UnityWorldToClipPos(float3 pos) |
将顶点从世界空间变换到齐次裁切空间,等同mul(UNITY_MATRIX_VP,float4(pos,1,0)) |
float4 UnityViewToClipPos(float3 pos) |
将顶点从摄像机空间变换到摄像机空间,等同mul(UNITY_MATRIX_P,float4(pos,1,0)).xyz |
3.向量变换函数
向量变换相关的函数
函数 |
说明 |
float3 UnityObjectToWorldDir(float3 dir) |
将向量从模型空间转换到世界空间,已经标准化处理 |
float3 UnityWorldToObjectDir(float3 dir) |
将向量从世界空间转换到模型空间,已经标准化处理 |
float3 UnityObjectToWorldNormal(float3 norm) |
将法线从模型空间转换到世界空间,已经标准化处理 |
4.灯光辅助函数
以下函数仅适用于前向渲染路径(ForwardBase或ForwardAdd Pass类型)。
灯光相关的函数
函数 |
说明 |
float3 WorldSpaceLightDir(in float4 localPos) |
输入模型空间顶点坐标,返回世界空间中从顶点指向灯光的向量,没有被标准化 |
float3 UnityWorldSpaceLightDir(in float3 worldPos) |
输入世界空间顶点坐标,返回世界空间从顶点指向灯光的向量,没有被标准化 |
float3 ObjSpaceLightDir(in float4 v) |
输入模型空间顶点坐标,返回模型空间中从顶点指向灯光的向量,没有被标准化 |
float3 Shade4PointLights(...) |
输入一系列所需变量,返回4个点光源的光照信息,在前向渲染中使用这个函数计算逐顶点的光照 |
5.视角向量函数
视角向量相关的函数
函数 |
说明 |
float3 WorldSpaceViewDir(float4 v) |
输入模型空间顶点,返回世界空间中从顶点指向摄像机的向量,没有被标准化 |
float3 UnityWorldSpaceViewDir(float3 v) |
输入世界空间中的顶点,返回世界空间中从顶点指向摄像机的向量,没有被标准化 |
float3 ObjSpaceViewDir(float4 v) |
输入模型空间顶点,返回模型空间中从顶点指向摄像机的向量,没有被标准化 |
三、UnityShaderVariables.cginc
1.空间变换矩阵
空间变换矩阵
矩阵 |
说明 |
UNITY_MATRIX_MVP |
模型-观察-投影矩阵,用于将顶点/向量从模型空间变换到裁剪空间 |
UNITY_MATRIX_MV |
模型-观察矩阵,用于将顶点/向量从模型空间变换到摄像机空间 |
UNITY_MATRIX_V |
观察矩阵,用于将顶点/向量从世界空间变换到摄像机空间 |
UNITY_MATRIX_P |
投影矩阵,用于将顶点/向量从摄像机空间变换到裁剪空间 |
UNITY_MATRIX_VP |
观察-投影矩阵,用于将顶点/向量从世界空间变换到裁剪空间 |
UNITY_MATRIX_T_MV |
UNITY_MATRIX_MV的转置矩阵 |
UNITY_MATRIX_IT_MV |
UNITY_MATRIX_MV的逆转置矩阵 |
unity_ObjectToWorld |
模型矩阵,用于将顶点/向量从模型空间变换到世界空间 |
unity_WorldToObject |
_Object2World的逆矩阵,用于将顶点/向量从世界空间变换到模型空间 |
2.时间变量
时间变量
变量 |
说明 |
_Time |
关卡从开始到现在所运行的时间,4个分类分别为t/20,t,t*2,t*3 |
_SinTime |
将运行时间(t/8,t/4,t/2,t)输入到正弦函数 |
_CosTime |
将运行时间(t/8,t/4,t/2,t)输入到余弦函数 |
unity_DeltaTime |
每一帧的递增时间,4个分量分别为dt,1/dt,smoothDt,1/smoothDt |