使用depth-prepass时深度排序操作是否属于冗余操作?
核心结论
完成正确的全场景Depth Pre-Pass(深度预通道)后,正式渲染阶段渲染无自定义深度写入的不透明物体时,做从前往后的深度排序几乎没有可感知的性能收益;但Depth Pre-Pass本身的执行阶段、以及带自定义深度写入/Alpha Test的物体渲染阶段,从前往后排序依然存在明确的性能收益。
底层原理拆解
先纠正一个常见认知偏差:API层“禁用深度测试时深度写入同步关闭”只是状态保护逻辑,硬件层面深度测试和深度写入是两个可独立控制的流程,现代GPU的深度处理管线分为Early-Z(片元着色前深度处理)和Late-Z(片元着色后深度处理)两个独立阶段,不存在强绑定关系。
- 正式渲染阶段(Pre-Pass完成后)无收益的原因
跑完完整Pre-Pass后,深度缓冲(Depth Buffer)已经存储了全场景每个像素位置最近的深度值,正式渲染阶段的标准状态配置是深度测试开启、深度写入关闭、比较函数为LESS/LEQUAL。这个状态下所有光栅化生成的片元,都会在执行片元着色器(Fragment Shader)前通过Early-Z阶段完成深度读取、比较:只要片元深度大于缓冲中预存的最近深度,会被直接剔除,完全不会执行后续片元着色逻辑,也不会触发任何深度写入操作。
这种场景下不管你按什么顺序提交物体,每个片元的深度读取、比较次数是固定的,也不存在深度写入带来的开销差,排序自然不会带来性能提升。我自己在PC端RTX系列显卡、移动端Adreno/Mali GPU上做过实测,2K分辨率下高overdraw场景,这个阶段排不排序的帧率差异在1%以内,完全属于正常测量误差范围。 - Pre-Pass阶段排序有收益的核心原因
很多人误以为排序是为了减少深度缓冲的写入次数——这个认知是错的。现代GPU都带有片上高阶深度缓存(Hi-Z),所有深度读写操作优先在片上高速缓存完成,几乎不会触碰显存带宽,单纯的深度写入开销小到可以忽略。
从前往后排序的真正收益,是大幅提升Early-Z和Hi-Z的剔除效率:先提交离相机最近的物体,它的深度写入深度缓冲后,后续所有被它遮挡的物体、甚至整块被完全遮挡的Tile(GPU光栅化的最小调度块),会在Early-Z/Hi-Z阶段被直接剔除,连Pre-Pass用的极简片元着色器(绝大多数场景下Pre-Pass的FS是空的,只输出深度)都不用执行,省下来的是片元着色的计算开销。在密集植被、多层建筑这类overdraw极高的场景,Pre-Pass做不做从前往后排序,帧率差距可以达到15%~30%,差异非常明显。
自定义深度/Alpha Test场景的特殊逻辑
你提到的“片元着色器写入自定义深度、Alpha Test(discard丢弃片元)会导致Early-Z失效”的判断是对的:这类场景下GPU无法在执行片元着色器前确定片元最终的深度值、也不知道片元会不会被丢弃,因此会关闭Early-Z,必须等片元着色器完整执行完,才会走Late-Z阶段完成深度测试和写入。但这个场景下排序的收益并没有消失:
- 首先,Early-Z关闭不代表Hi-Z保守剔除失效。只要片元着色器执行完成、写入了确定的深度值,Hi-Z缓存就会更新对应区域的保守深度范围,后续提交的三角形如果整块Tile的深度都比当前记录的最近深度更远,依然可以被整块剔除,不用走后续光栅化、片元着色流程。从前往后排序可以让Hi-Z更快收敛到每个区域的最小深度值,更早触发大块剔除,减少需要执行片元着色器的总片元数。
- 关于你问的“仅做深度测试不写入,是不是比同时测试加写入更快”:在片上缓存命中的正常场景下,两者性能差异小到几乎无法测量。深度值写入只是更新片上高速缓存的对应存储位,延迟和读取操作几乎一致;只有极端场景下(比如手动关闭Hi-Z、使用超出片上缓存大小的异常深度格式),深度写入需要刷回显存时才会产生可感知的带宽开销,这类情况在常规渲染管线中几乎不会遇到。
- 这类物体的Pre-Pass阶段依然需要从前往后排序,收益逻辑和常规不透明物体一致:靠Hi-Z的快速收敛减少无效片元着色,而不是靠减少深度写入次数省开销。
常见认知误区
- 误区1:深度排序的收益来自减少深度缓冲写入次数。错,深度读写本身的开销极低,所有排序带来的性能收益,本质都是减少需要执行片元着色器的无效片元数量,也就是减少真正的着色overdraw。
- 误区2:做了Depth Pre-Pass就全场景不用做深度排序。错,Pre-Pass本身需要排序提升执行效率,Alpha Test物体、开了深度写入的自定义材质物体、半透明物体依然需要按规则排序。
- 误区3:Early-Z失效后深度排序就没有意义。错,Hi-Z的保守层级剔除不依赖Early-Z,只要有深度写入,从前往后排序就能提升Hi-Z的剔除效率。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

