ShaderLab: SubShader
每个shader在Unity中都包含了一系列subshaders。当Unity要显示一个mesh,他将找shader来使用,并选择第一个可以在用户显卡上运行的subshader。
Syntax
Subshader { [Tags] [CommonState] Passdef [Passdef ...] }
定义subshade包含可选的tags,common state和Pass定义列表
Details
一个subshader定义一系列rendering passes 并且选项中设置的任何状态对于所有Pass都是相同的。此外, subshader的Tags 可以被设置.
当Unity选择一个subshader来渲染,它定义的每个Pass都会渲染物体一次(可能更多是由于光的影响)。 因为对象的每个渲染都是一个昂贵的操作,所以你希望在shader中定义尽可能少的Pass。当然,在有时在某些显卡上,需要的效果可能不能通过一个Pass实现,那么你就需要定义多个Pass。
每个定义的Pass可以是 一个 regular Pass, 一个 Use Pass 或 一个 Grab Pass.
任何在Pass定义中允许的声明,都可以出现先Subshader代码块中。这样所有的Pass都会使用这个“共享”的状态。
Example
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...
这个subshader定义了一个Pass,关闭了光照只是用一个名为_MainTex的纹理显示mesh。