相关文档
Unity Shader 之 Amplify Shader Editor
Unity Shader学习笔记(3)Unity Shader模板、结构、形式
RenderType: Rendering with Replaced Shaders
DisableBatching: Draw call batching
SubShader 之 Tags
介绍
-
标签基本上是键值对
-
除了Unity识别的内置标记之外,您还可以使用自己的标记并使用Material.GetTag函数查询它们。
-
SubShader和Pass的Tags是不一样的
默认提供7种Tag
Queue (渲染队列)
控制渲染顺序,指定该物体属于哪个渲染队列。通过这种方式可以保证所有的透明物体可以在所有不透明物体后面被渲染
SubShader { Tags{ "Queue" = "Geometry" } }
我们也可以直接在预定义值后面加数值或者写数值
SubShader { Tags{ "Queue" = "Geometry+1" } }
SubShader { Tags{ "Queue" = "3000" } }
高达2500(“Geometry + 500”)的队列被认为是“不透明的”并优化对象的绘制顺序以获得最佳性能。更高的渲染队列被认为是“透明对象”并按距离对对象进行排序,从最远的渲染开始渲染,以最接近的渲染结束。
Skybox在所有不透明和所有透明对象之间绘制
默认值
值 | int值 | 介绍 |
---|---|---|
Background | 1000 | 此渲染队列在任何其他队列之前呈现。你通常会将它用于真正需要在后台运行的东西。 |
Geometry | 2000 | (默认) - 这用于大多数对象。不透明几何体使用此队列。 |
AlphaTest | 2450 | alpha测试几何使用此队列。它是一个独立的队列,Geometry因为在绘制完所有实体之后渲染经过alpha测试的对象会更有效。 |
Transparent | 3000 | (此渲染队列在Geometry之后呈现,并AlphaTest按照从前到后的顺序呈现。任何alpha混合(即不写入深度缓冲区的着色器)都应该放在这里(玻璃,粒子效果)。 |
Overlay | 4000 | 此渲染队列用于叠加效果。最后渲染的东西应该放在这里(例如镜头光晕)。 |
可以在unity里查看shader属性查看值
RenderType (着色器分类)
对着色器进行分类。 这由 着色器替换使用 着色器替换使用,在某些情况下用于生成相机的深度纹理。
SubShader { Tags{ "RenderType" = "Opaque" } }
可选值
值 | 功能 |
---|---|
Opaque | 不透明:大多数着色器(法线,自发光,反射,地形着色器)。 |
Transparent | 透明:大多数半透明着色器(透明,粒子,字体,地形添加器通过着色器)。 |
TransparentCutout | 透明抠出: 蒙版透明度着色器(透明剪切,两个植被着色器) |
Background | 背景:Skybox着色器。 |
Overlay | 叠加:GUITexture,Halo,Flare着色器。 |
TreeOpaque | terrain引擎树皮。 |
TreeTransparentCutout | 地形引擎透明树剪出。 |
TreeBillboard | 地形引擎广告牌树。 |
Grass | 草:地形引擎草。 |
GrassBillboard | 地形引擎广告牌草。 |
DisableBatching (禁用批处理)
一些SubShader在使用Unity的批处理时会出现问题,例如:使用模型空间下的坐标进行顶点动画。
SubShader { Tags{ "DisableBatching" = "True" } }
可选值
值 | 介绍 |
---|---|
False | 不禁用批处理;这是默认设置 |
True | 始终禁用此着色器的批处理 |
LODFading | 当LOD淡入激活时禁用批处理;主要用于树 |
ForceNoShadowCasting (强制不投影)
控制使用该SubShader的物体是否会投射阴影
如果ForceNoShadowCasting给定了tag并且值为“True”,那么使用此子着色器渲染的对象将永远不会投射阴影。当您在透明对象上使用着色器替换并且不会从其他子着色器继承阴影传递时,这非常有用。
SubShader { Tags{ "ForceNoShadowCasting" = "True" } }
IgnoreProjector (忽略投影)
如果IgnoreProjector给定了tag并且其值为“True”,那么使用此着色器的对象将不会受到 Projector 的影响。这对半透明对象非常有用,因为投影仪没有好办法影响它们。
SubShader { Tags{ "IgnoreProjector" = "True" } }
CanUseSpriteAtlas (忽略投影)
CanUseSpriteAtlas如果着色器用于精灵, 则将标记设置为“False” ,当它们被打包到地图集时将无法工作
SubShader { Tags{ "CanUseSpriteAtlas"="True" } }
PreviewType (预览方式)
PreviewType指示材料检查器预览应如何显示材料。默认情况下,材质显示为球体,但PreviewType也可以设置为“Plane”(将显示为2D)或“Skybox”(将显示为skybox)。
SubShader { Tags{ "PreviewType"="Plane" } }