在Unity所有渲染管线中,URP是一种比较特殊的渲染管线。不同于HDRP和build-in管线,URP是一种
其中,single-pass这个描述词让人不由得一哆嗦。
不过对于实际应用需要使用多pass渲染的场景下,其实常规也有其他方法可以绕过限制。
- 实际在Unity渲染中最多可支持3个pass,但需要给不同pass打上标签
m_ShaderTagIdList.Add(new ShaderTagId("UniversalForward")); m_ShaderTagIdList.Add(new ShaderTagId("LightweightForward")); m_ShaderTagIdList.Add(new ShaderTagId("SRPDefaultUnlit"));
源码中可以看到Unity提供了3个标签的位置。故在无法回避多pass的情况下可以通过如下这种方式进行制作
Shader "Custom/URP_MultiPass"
{
Properties
{
//定义属性
}
SubShader
{
Tags { "RenderType"="Opaque" ...//添加你需要的tag }
Pass
{
Tags { "LightMode"="UniversalForward" }
CGPROGRAM
// 光照部分渲染
ENDCG
}
Pass {
// 额外pass
Tags { "LightMode"="SRPDefaultUnlit" }
CGPROGRAM
// 添加其他pass渲染,如卡渲的描边等等
ENDCG
}
}
}
-
将某一特性做成RenderFeature添加到渲染管线中,并添加图层过滤的方式来对渲染对象进行过滤