关于z prepass的问题

编辑器里说main pass包括z prepass, base pass, transparency。我在源码中(DeferredShadingRenderer.cpp, line 734)也看到了z prepass相关内容。z prepass有什么作用?

我在做ar相关项目,想实现真实物体对虚拟物体的遮挡。用三维重建的方法得到真实物体的模型后,我想把它们渲染到depth buffer,但不对它们着色(它们不可见)。之后渲染虚拟物体,虚拟物体会根据真实物体在depth buffer中留下的信息判断是否被真实物体遮挡。z prepass能否帮到我?我应该如何控制哪些mesh进入z prepass,哪些mesh进入base pass?

另外,我尝试过CustomDepth Pass,但CustomDepth只在透明材质中才可访问。针对透明材质我实现了想要的效果(如下图),针对非透明材质我该怎么做?

130498-1.png

130499-2.png