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 乘法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值