关于UnityShader常用到的术语,会随着学习的进度持续在这篇文章中更新;
变量
变量类型(UnityShader的属性)
变量 | 类型 | 写法 |
---|---|---|
Int | 整数类型 | _Int ( “Int”, Int) = 2 |
Float | 浮点数类型 | _Float ( “FloatValue”,Float ) = 0.0 |
Range(min,max) | 范围值类型 | _Range ( “Range”,Range( 0.5, 1.0 )) = 1.0 |
Color | 颜色类型 | _Color ( “MainColor”,Color ) = (1,1,1,1) |
Vector | 向量类型 | _Vector ( “Vector4”, Vector ) = (1,1,1,1) |
2D | 2D纹理贴图 | _MainTex ( “Base(RGB)”,2D ) = “white” { } |
3D | 3D纹理贴图 | _3D(“3D”, 3D) = “black” { } |
Cube | 三维纹理 | _CubeTex ( “3DMap”,Cube ) = “white” { } |
变量类型(CG程序)
变量 | 类型 |
---|---|
int | 32位整形数据 |
half | 16位浮点数据 |
float | 32位浮点数据,一个符号位 |
fixed | 12位定点数 |
sampler* | 纹理对象的句柄,分为sampler、sampler1D、sampler2D、sampler3D、samplerCUBE和samplerRECT |
bool | 布尔数据,被所有的图形接口支持 |
string | 字符类型 |
ShaderLab与CG的变量类型匹配
ShaderLab | CG |
---|---|
Color/Vector | float4/half4/fixed4 |
Range/Float | float/half/fixed |
2D | sample2D |
Cube | sampleCube |
3D | sample3D |
UnityShader内置的时间变量
名称 | 类型 | 说明 |
---|---|---|
_Time | float4 | t是自该场景加载开始所经过的时间,4个分量分别是(t/20, t, 2t, 3t) |
_SinTime | float4 | t是时间的正弦值,4个分量的值分别是(t/8, t/4, t/2, t) |
_CosTime | float4 | t是时间的余弦值,4个分量的值分别是(t/8, t/4, t/2, t) |
unity_DeltaTime | float4 | dt是时间增量,4个分量分别是(dt, 1/dt, smoothDt, 1/smoothDt) |
标签
标签类型(用于SubShader)
标签 | 作用 |
---|---|
Queue | 定义渲染顺序 |
RenderType | Unity可以运行时替换符合特定RenderType的所有Shader |
DisableBatching | 是否使用批处理 |
ForceNoShadowCasting | 值为”true”时,表示不接受投射阴影 |
IgnoreProjector | 值为”true”时,表示不接受Projector组件的投影;通常用于半透明物体; |
CanUseSpriteAtlas | 当用于sprite时,将该标签设为False |
PreviewType | 材质预览类型,默认是球形;可以设置成Plane,Skybox等; |
RenderType 渲染类型
渲染类型 | 用途 |
---|---|
Opaque | 绝大部分不透明的物体都使用这个 |
Transparent | 绝大部分透明的物体、包括粒子特效都使用这个 |
Background | 天空盒都使用这个 |
Overlay | GUI、镜头光晕都使用这个 |
Queue 渲染队列参数
渲染队列 | 数值 | 应用场景 |
---|---|---|
Background | 1000 | 最早被调用的渲染,用来渲染天空盒或者背景 |
Geometry | 2000 | 默认值,用来渲染非透明物体(场景中的绝大多数物体应该是非透明的) |
AlphaTest | 2450 | 用来渲染经过AlphaTest的像素,单独为AlphaTest设定一个Queue是出于对效率的考虑 |
Transparent | 3000 | 以从后往前的顺序渲染透明物体 |
Overlay | 4000 | 用来渲染叠加的效果,是渲染的最后阶段(比如镜头光晕等特效) |
标签类型(用于Pass)
标签 | 作用 |
---|---|
LightMode | 定义该Pass在渲染流水线中的角色 |
RequireOptions | 指定需要满足的条件 |
LOD 数值
在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,这个SubShader将不可用;
LOD | 数值 |
---|---|
VertexLit及其系列 | 100 |
Decal, Reflective VertexLit | 150 |
Diffuse | 200 |
Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit | 250 |
Bumped, Specular | 300 |
Bumped Specular | 400 |
Parallax | 500 |
Parallax Specular | 600 |
渲染状态
状态参数 | 作用 |
---|---|
Cull | 设置剔除模式:剔除背面Back/正面Front/关闭Off |
ZTest | 深度测试 |
ZWrite | 深度写入:开启On/关闭Off |
Blend | 混合模式 |
语义
应用程序 -> 顶点函数 (a2v)
语义名称 | 意义 |
---|---|
POSITION | 顶点坐标(模型空间下的) |
NORMAL | 法线( 模型空间下,用于计算光照) |
TANGENT | 切线(模型空间下) |
TEXCOORD0~n | 纹理坐标 |
COLOR | 顶点颜色 |
顶点函数 -> 片元函数(v2f)
语义名称 | 意义 |
---|---|
SV_POSITION | 剪裁空间中的顶点坐标(一般是系统直接使用) |
COLOR0 | 可以传递一组值 4个 |
COLOR1 | 可以传递一组值 4个 |
TEXCOORD0~7 | 传递纹理坐标,但不是必需的 |