Subshader {
[Tags]
[CommonState]
Passdef [Passdef ...]
}html
每一个SubShader都定义了一系列passes,并可对全部passes可选的设置任一状态。另外,还能够指定[Tags]。
当Unity选定了一个SubShader,它会对定义的每个pass都渲染一遍。有时在某些硬件某些复杂的渲染效果必须在多个pass中完成。函数
每一个pass均可以被定义成 regular Pass, Use Pass or Grab Pass.测试
一个pass块引发一次物体的几何学渲染。spa
Pass { [Name and Tags] [RenderSetup] }3d
UsePass命令可使用另外一个shader中的pass块,从而减小重复劳动。htm
格式:对象
UsePass "Shader/Name"索引
若要UsePass能工做,所引用的pass块必须定义了名字。队列
GrabPass是一种特殊的pass类型,它能够捕获物体所在位置的屏幕内容并写入到一个纹理中。从而用于后续通道完成高级图像效果。ip
语法:
另外, GrabPass 能使用 Name 和 Tags 命令。
SubShader使用Tags告诉渲染引擎指望什么时候和如何渲染对象。
语法
字符串的键值对:
Tags {
"TagName1" = "Value1"
"TagName2" = "Value2"
}
细节
在一个SubShader中标签被用于决定渲染次序和其余SubShader的参数。
注意接下来的标签只能置于SubShader块而不是Pass块中。
除了可被Unity承认的内置标签,你还可使用本身的标签并经过Material.GetTag函数查询。
Rendering Order - Queue tag
使用 Queue 标签决定对象被渲染的次序。好比确保透明(Transparent)物体在不透明(opaque)物体以后绘制。
有四种预约义队列,但能够在其之间定义更多队列:
- Background: 在全部队列以前被渲染,被用于渲染天空盒之类。
- Geometry (default): 默认的,被用于大多数对象。不透明的几何体使用这个队列。
- AlphaTest: alpha测试,这是分离自Geometry的队列,由于对于alpha-tested物体,在全部固体渲染后再渲染更有效率。
- Transparent: 透明,在Geometry队列以后被渲染,采用由后到前的次序。
- Overlay: 覆盖,用于实现叠加效果。任何须要最后渲染的对象应该放置在此处。(如镜头光晕)
每个队列都表明一个整数索引值。Background-1000,Geometry-2000,AlphaTest-2450,Transparent-3000,Overlay-4000。能够自定义一个队列:
Tags { "Queue" = "Geometry+1" }
该队列的索引值为2001,这会使物体在全部不透明的对象以后但却在全部透明物体前被渲染。
RenderType
将shader分类成预约义的组。
DisableBatching
一些shader在Draw Call Batching 模式下不能工做,这个指令来决定是否禁用它。
“True”:禁用。“False”:不由用(默认)。“LODFading”:当LOD Fading开启时禁用,通常用于树木。
ForceNoShadowCasting
“True”:不使用cast shadows。
IgnoreProjector
“True”:物体不会受 Projectors影响。
CanUseSpriteAtlas
“False”:若是这个shader是指sprites,将没法打包成图集。 (Sprite Packer)
PreviewType
指示material inspector预览怎样显示材质。默认显示是spheres,也可设置为“Plane”(2D显示),或者"Skybox"(天空球显示)。
pass中也可使用Tags