|
概述:
tag 是键-值对数据类型(key-value)。
为了更好的描述如何、何时使用SubShader,Unity 官方已经预定义了相关的 tag。除了官方定义的 tag 之外,用户还可以自定义,并且能在 C# 代码中访问它。
渲染管线的兼容性:
image
Tags 在 SubShader 中的应用
在 SubShader 中,Tags 通常在 SubShader 之前,以 Tags 开头的大括弧内,形式为: Tags{"[name]" = "[value]","[name]" = "[value]"}
需要注意的是,SubShaders 和 Passes 中虽然都可以应用 Tags ,但它们的工作方式有差异,因此不能混用。除此之外它们定义的地方也有差别:
Pass 的 tag 被定义在 Pass 代码块内部
SubShader 的 tag 被定义在 SubShader 之内在 Pass 代码块之外
C# 中调用 SubShader Tag 实例:
void Start() { Debug.Log(material.GetTag("test",true,"not find tag")); }SubShader { Tags { "RenderType"="Opaque" "test"="test001" }}
log 输出
Tag 之 RenderPipeline:
RenderPipeline :告诉 Unity 此 SubShader 所使用的渲染管线类型:
UniversalRenderPipeline: 此 SubShader 仅与 URP 兼容。HighDefinitionRenderPipeline: 此SubShader 仅兼容 HDRP。其它 :此 SubShader 不兼容 URP 和 HDRP 。
Tag 之 Queue:
Queue 用来告诉 Unity 几何图形的渲染顺序。当然,Queue 只是决定渲染层级的因素之一。
语法与有效值
有两种方式设定 Queue 的值,一种是直接给定渲染层名;另一种用表达式的方式:
“Queue” = "[queue name]""Queue" = "[queue name]" + "[offset]"
常用的有:
渲染层级
C# 中引用渲染层级
默认情况下,几何图形都是在[Queue]中指定的队列里渲染。在 Unity Editor 中,你可以通过修改Render Queue 属性,执行修改顺序的操作。
Tag 之 RenderType
渲染标识,可以在运行时查找到,并替换符合条件的 Shader
C# 接口为:
- Camera.RenderWithShader
public void RenderWithShader(Shader shader, string replacementTag)
- Camera.SetReplacementShader
public void SetReplacementShader(Shader shader, string replacementTag)
两个接口的区别
RenderWithShader与SetReplacementShader的区别是RenderWithShader是 当前帧 用指定的Shader渲染,SetReplacementShader是替换后的 每一帧 用指定的Shader渲染。
Unity 内置的标签有:
- Opaque: most of the shaders (Normal, Self Illuminated, Reflective, terrain shaders).
用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
- Transparent: most semitransparent shaders(Transparent,Particle,Font,Terrain additive pass shaders).
用于半透明着色器(透明,粒子,字体,地形额外通道)
- TransparentCutout:masked transparent shaders(Transparent Cutout,tow pass vegetation shaders).
蒙皮透明着色器(Transparent Cutout,双通道的植皮作色器)
- Background: Skybox shaders.
天空盒子
- Overlay: GUITexture,Halo,Flare shaders.
UI,光环,光晕着色器
- TreeOpaque: terrain engine tree bark.
地形引擎中的树皮
- TreeTransparentCutout:terrain engine tree leaves.
地形引擎中的树叶
- TreeBillboard:terrain engine billboarded trees.
地形引擎中的广告牌树
- Grass: terrain engine grass .
地形引擎中的草
- GrassBillboard:terrain engine billboarded grass .
地形引擎中的广告牌草
具体RenderType 的应用,会另开一篇讲解
参考链接:https://blog.csdn.net/liyaxin2010/article/details/83449410
Tag 之 ForceNoShadowCasting
此标签用来阻止几何体投射(有时是接受)阴影Tags { "ForceNoShadowCasing" = "true"} "ForceNoShadowCasing" = "true" 不投射或者接受阴影“ForceNoShadowCasing” = "false" 接受
Tag 之 DisableBatching
DisableBatching 子着色器标签阻止 Unity 将动态批处理应用于使用此子着色器的几何体。
这对于执行对象空间操作的着色器程序十分有用。动态批处理会将所有几何体都变换为世界空间,这意味着着色器程序无法再访问对象空间。因此,依赖于对象空间的着色器程序不会正确渲染。为避免此问题,请使用此子着色器标签阻止 Unity 应用动态批处理。
Tag 之 IgnoreProjector
如果 IgnoreProjector tag 被定义,并且值为 “True”,那么使用该 shader 的对象,不会被 Projector 影响。这通常在半透明对象上很有用,因为 Projectors 无法影响他们。
Tag 之 CanUseSpriteAtlas
设置 CanUseSpriteAtlas tag 为 “False” 如果该 shader 是为精灵写的,并且当他们被包装为图集的时候,该 shader 将不会起作用(请看 Sprite Packer)。
PreviewType
PreviewType 指示材质的监控预览该如何显示该材质。默认情况下,材质显示为球体,但是 PreviewType 也可以被设置为 “Plane” (将会以2D屏幕的方式展现) 或 “Skybox” (将会展现为天空盒)。
总结:
在ShaderLab 中,tags 非常有用,无论是用来规定渲染顺序还是用来标识类型以便动态替换,都少不了它。在实践中,经常用到的基本只有 RenderPipeline,Queue,RenderType 等。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|