需求描述
某个层级物体始终处于另一个层级前面渲染
第一个想法肯定是通过材质的shader ,如果这两个层级的物体使用不同材质,可以通过调整材质的渲染队列即可
除此之外另一个不动材质的办法,即通过调整RenderPipelineAsset 增加渲染特性,根据层级调整
这里的层级指物体的Layer
指定层写入模板
使用Urp,打开UniversalRenderPipelineAsset_Renderer,Add Feature
关闭默认对于指定层级的渲染,使用Feature
假设我们需要PlayerBack处于Player后面,先渲染PlayerBack 层,
Queue 与所宣传层的材质渲染队列保持一致
Layer Mask选中要渲染的目标层
不写深度,写入模板
目标层在写入层之后做模板测试、
目标层在写入层之后做模板测试,会只在目标层渲染,(因为只有写入层才能通过模板测试)
此处深度测试总是通过,同时写入深度,目的是为普通层通过深度测试(如果出现黑色,是因为还需要再渲染普通层)
普通层
普通层正常渲染,因为之前写入过深度,所以可以在渲染在指定层之上,且又因为只有指定层写入模板,所以不会干扰其余渲染层级(指定层高亮原理也是应用模板测试)
效果
红色Player,白色PlayerBack,PlayerBack始终处于Player 后方