Shader基础总结
- 渲染状态
状态名称 | 设置指令 | 说明 |
---|---|---|
Cull | Cull Back/Front/Off | 设置剔除模式:剔除背面/正面/关闭剔除 |
ZTest | ZTest Less Greater/LEqual/GEqual/Equal/NotEqual/Always | 设置深度测试时使用的函数 |
ZWrite | ZWrite On/Off | 开启/关闭深度写入 |
Blend | Blend SrcFactor DstFactor | 开启并设置混合模式 |
- 标签
标签类型 | 说明 |
---|---|
Queue | 控制渲染顺序,指定该物体的渲染队列,可以使用自定义的渲染队列控制渲染顺序。 |
RenderType | 对着色器进行分类,例如这是一个不透明或者透明的着色器 |
DisableBatching | 指明是否对该SubShader使用批处理 |
ForceNoShadowCasting | 控制使用该SubShader的物体是否会投射阴影。 |
IgnoreProjector | 控制使用该SubShader的物体是否受Projector的影响。通常用于半透明物体 |
CanUseSpriteAtlas | 当该SubShader用于精灵(Sprites)时,将该标签设置为False。 |
PreviewType | 指明材质面板将如何预览该材质。默认为球形,可以设置为"Plane","SkyBox"。 |
- 顶点的空间变换过程
- 变换矩阵
变量名 | 说明 |
---|---|
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_MATRIX_MV的逆矩阵 |
_Object2World | 当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间 |
_World2Object | _Object2World的逆矩阵,用于将顶点/方向矢量从世界空间变换到模型空间 |
- 内置文件
文件名 | 描述 |
---|---|
UnityCG.cginc | 包含了最常使用的帮助函数、宏和结构体等 |
UnityShaderVariables.cginc | 在编译Unity Shader时,会被自动包含进来。包含了许多内置的全局变量,如UNITY_MATRIX_MVP |
Lighting.cginc | 包含了各种内置的光照模型,如果编写的是Surface Shader的话,会被自动包含进来 |
HLSLSupport.cginc | 在编译Unity Shader时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义 |
- 结构体
名称 | 描述 | 包含的变量 |
---|---|---|
appdata_base | 可用于顶点着色器的输入 | 顶点位置、顶点法线、第一组纹理坐标 |
appdata_tan | 可用于顶点着色器的输入 | 顶点位置、顶点切线、顶点法线、第一组纹理坐标 |
appdata_full | 可用于顶点着色器的输入 | 顶点位置、顶点法线、四组(或更多)组纹理坐标 |
appdata_img | 可用于顶点着色器的输入 | 顶点位置、第一组纹理坐标 |
v2f_img | 可用于顶点着色器的输出 | 裁剪空间中的位置、纹理坐标 |
- 帮助函数
函数名 | 描述 |
---|---|
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 normal) | 把法线方向从模型空间转换到世界空间中 |
float3 UnityObjectToWorldDir(float3 dir) | 把方向矢量dir从模型空间转换到世界空间中 |
float3 UnityWorldToObjectDir(float3 dir) | 把方向矢量dir从世界空间转换到模型空间中 |
- 常用语义
语义 | 描述 |
---|---|
POSITION | 模型空间的顶点位置,通常是float4类型 |
NORMAL | 顶点法线,通常是float3类型 |
TANGENT | 顶点切线,通常是float4类型 |
TEXCOORDn | 该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,依此类推。通常是float2或float4类型 |
COLOR | 顶点颜色,通常是float4或fixed4类型 |
语义 | 描述 |
---|---|
SV_POSITION | 裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。 |
COLOR0 | 通常用于输出第一组顶点颜色,但不是必须的 |
COLOR1 | 通常用于输出第二组顶点颜色,但不是必须的 |
TEXCOORD0~TEXCOORD7 | 通常用于输出纹理坐标,但不是必须的 |
语义 | 描述 |
---|---|
SV_Target | 输出值将会存储到渲染目标(render_target)中。 |