URP管线下Shader中的SubShader Tags、Pass Tags、ShaderLab Commands总结

2023-12-14 18:04:38

一、SubShader Tags

????????SubShader Tags是提供SubShader信息的键值对,它们允许你指定特定的设置好让渲染管线知道如何处理SubShader。

????????下面分别介绍一下SubShader中的tag。

1、 RenderPipeline

????????这个tag用来指定SubShader的目标渲染管线,不同的渲染管线有特定的需求和特征,因此,设置适当的渲染管道标记对于实现所需的渲染行为至关重要。

????????对于URP渲染关心,这个值应该设置为"UniversalPipeline "。

2、 Queue

? ? ? ? 这个tag允许你决定SubShader执行的渲染队列,渲染队列用来决定场景中不同物体的渲染顺序,以确保正确的渲染结果并避免视觉错觉,这是一个很重要的tag。

? ? ? ? 可用的值有:"Background"、"Geometry"、"AlphaTest"、"Transparent"、"Overlay"。

????????动态修改示例:

material.renderQueue = 2000;

3、 RenderType

? ? ? ? 这个tag定义了SubShader的渲染类型,它的值可能是 "Opaque"、 "Transparent" 、 "TransparentCutout"之类的。一般来说这个tag不太重要,它可以用于使用RenderStateBlocks来覆盖的特定子着色器。

4、 DisableBatching

????????Batching 是Unity使用的一种技术,通过对象合批来减少绘制调用以优化渲染性能。当禁用批处理标签设置为"True"时,将阻止Unity使用此子着色器对对象进行合批处理。

? ? ? ? 可用的值有:"True"、"False"和"LODFading"。

5、ForceNoShadowCasting

????????如果要将使用此Shader的物体强制不使用投射阴影,则可以使用这个tag。它通常会与override 或replacement shaders一起使用。

???????可用的值有:"True"和"False"。

6、 CanUseSpriteAtlas

????????当使用二维精灵时,这个tag允许您指定这个SubShader是否可以使用精灵地图集以提高性能。

?????????可用的值有:"True"和"False"。

7、 PreviewType

? ? ? ? 这个tag确定如何在Unity编辑器的检查器中预览子着色器。对于开发人员在开发期间可视化SubShader的表现是很有用的。

? ? ? ? 可能的值有:"Sphere"、"Plane"和"Skybox"。

二、Pass Tags

????????与应用于整个SubShader 的tag不同,Pass tag只在特定Pass内起作用。您可以为同一对象定义不同的渲染技术,从而实现复杂和动态的视觉效果。

1、LightMode

? ? ? ? 该tag用于定义特定的Pass是否应该由特定的渲染流程进行渲染。例如,当在Deferred 渲染路径中时,Unity将渲染一个GBuffer。当渲染GBuffer时,Unity寻找具有UniversalGBuffer的LightMode 的Pass,然后渲染该Pass。类似地,在渲染深度纹理时,Unity会寻找具有DepthOnly的LightMode 的Pass。如果没有找到相应的Pass,Unity将不会对应的Shader。

? ? ? ? 可能的值有:"UniversalForward"、"UniversalGBuffer"、"UniversalForwardOnly"、"Universal2D"、"ShadowCaster"、"DepthOnly"、"Meta"、"SRPDefaultUnlit"。其实如果不设置"LightMode"的值的话,其默认值就是"SRPDefaultUnlit",就是向前渲染和延迟渲染都可以的意思。

? ? ? ? URP中不支持的值有:"Always"、"ForwardAdd, PrepassBase"、"PrepassFinal"、"Vertex"、"???????VertexLMRGBM"、"???????VertexLM"。

三、ShaderLab Commands

1、Cull

????????可能的值有:"Front"、 "Back"或者"Off"

2、ZTest

????????可能的值有:Less、LEqual、Equal、Greater、GEqual、Equal、NotEqual、Always、Never。

????????动态修改示例:

material.SetInt("_ZTest", (int)UnityEngine.Rendering.CompareFunction.LessEqual);

3、ZWrite

?????????可能的值有:On或者Off。

????????动态修改示例:

material.SetInt("_ZWrite", 1);

4、Blend

????????可能的值有:One、ZeroSrcColor 、SrcAlpha、DstColor、DstAlpha、OneMinusSrcColor、OneMinusSrcAlpha、OneMinusDstColor、OneMinusDstAlpha 。

????????常见使用组合:

Blend SrcAlpha OneMinusSrcAlpha // 传统透明度
Blend One OneMinusSrcAlpha // 预乘透明度
Blend One One // 加法
Blend OneMinusDstColor One // 软加法
Blend DstColor Zero // 乘法
Blend DstColor SrcColor // 2x 乘法

文章来源:https://blog.csdn.net/ttod/article/details/134997400
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。