Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个物体时,它找到使用的着色器,并提取第一个能运行在当前用户的显卡上的子着色器。Subshader的语法为:
Subshader { [Tags] [CommonState] Pass{ } }
-
子着色器由可选标签(Tags)、通用状态(CommonState)和一个通道(Pass)列表构成。
-
子着色器定义了一个渲染通道的列表,并可选是否为所有通道初始化所需要的通用状态。
-
当Unity选择用于渲染的子着色器时,它为每一个通道渲染一次对象(可能会更多,这取决于光线的交互情况)。对象的每一次渲染都会占用一定资源,Unity会选择使用最小数目的通道来定义着色器。有时在一些显卡上需要的效果不能通过单次通道来完成,就必须使用多次通道。
-
定义通道的类型有regular Pass、 Use Pass和Grab Pass
-
在通道中定义的状态同时对整个子着色器块可见,这将使得所有通道共享状态。
下面的代码片段是一个简单的子着色器:
SubShader {
Tags { "Queue" = "Transparent" } //渲染队列为透明队列
Pass {
Lighting Off //关闭光照
SetTexture [_MainTex] { } //设置纹理
}
}