URP管线下Shader中的SubShader Tags、Pass Tags、ShaderLab Commands总结
一、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 乘法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!