在Unity的URP/LWRP中,Shader默认支持单通道。即Shader中的多个Pass只有第一个Pass起效。
如果需要使用双通道,则:
Pass1加入:Tags { "LightMode"="SRPDefaultUnlit" }
Pass2加入:Tags { "LightMode"="UniversalForward" }
请注意如果您有额外的渲染通道,但没有使用LightMode标签(或使用SRPDefaultUnlit),则它将与渲染主要的UniversalForward一起使用。这通常被称为“多通道”。但是,尽管这在URP中可能有效,但不建议这样做,因为它会破坏SRP批处理器的兼容性,这意味着使用该着色器渲染对象会更昂贵。
相反,建议使用以下方法之一来实现多通道:
1.应用作第二个材质的单独着色器。如果使用子网格,则可以添加更多材质并回路。
2.在Forward Renderer上使用RenderObjects功能,使用覆盖材质(使用单独的着色器)重新渲染特定unity图层上的所有不透明或透明对象。如果您想渲染许多具有此第二通道的对象,则此方法非常有用。不要在单个对象上浪费整个图层。使用覆盖材质也不会保留前一个着色器的属性/纹理。
3.再次使用RenderObjects功能,但不是使用覆盖材质,而是在着色器中使用自定义LightMode标记的Pass,并在该功能的Shader Tag ID设置上使用它来渲染它。由于它仍然是相同的着色器,因此此方法将保留属性/纹理,但仅适用于编写的着色器,因为Shader Graph没有提供注入自定义Pass的方法。