最近刚开始学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 。ForwardBase
和ForwardAdd
传递类型:
名称 | 类型 | 值 |
_LightColor0 (在Lighting.cginc中声明) | fixed4 | 访问该Pass处理的光源的颜色和强度信息 |
_WorldSpaceLightPos0 | float4 | 光源方向(只适用于单光源) |
雾和环境:
名称 | 类型 | 值 |
UNITY_LIGHTMODEL_AMBIENT | fixed4 | 环境照明颜色(渐变环境中的天空颜色)。 |
在UnityCG.cginc中声明的函数:
UnityCG.cginc中的顶点变换功能
功能: | 描述: |
---|---|
| 将点从对象空间转换为相机在齐次坐标系中的剪裁空间。 这相当于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) | 给定一个模型空间顶点位置,返回模型空间中从该点到光源的光照方向。(未归一化) |