Early-Z 提前深度测试:GPU 渲染管线的隐藏加速器 📅 发布时间:2026/9/4 19:00:09 👁 浏览次数: 开场老张最近在做一个开放世界手游,场景里堆了几万棵草、几百万个面,帧率死活卡在 30 帧下不来。Profile 一看,GPU 耗时爆炸:主角脚下的草地明明被石头挡住了,GPU 却还在一片一片地把草叶“画完”再扔。老张百思不得其解:“深度测试不是会把看不见的像素丢掉吗?怎么还这么慢?”答案藏在渲染管线的默认顺序里——教科书上,GPU 是先把像素着色完,再做深度测试。哪怕一个像素最后被深度测试干掉,前面 Shader 里那一堆采样、光照、PBR 计算也已经实打实跑完了。好比装修时先刷墙再验房,验完发现这面墙要砸掉重砌,前面全白忙活。Early-Z(提前深度测试)就是 GPU 厂商塞进管线的一招“偷懒艺术”:把深度测试挪到像素着色之前,被挡的像素直接拦在门外,Shader 一行都不用跑。这篇文章讲清楚它是什么、靠什么条件生效、什么时候失效、以及工程上怎么把它喂饱。一、核心概念:Early-Z 是什么1.1 先看“标准”流程浪费在哪没有 Early-Z 介入时,光栅化之后的执行流程是:光栅化 → Fragment Shader(重活全在这)→ 深度测试 → 混合 → 写屏对着色器代码来说,意味着下面这个 Shader 里所有的计算,对这个像素最终是否可见毫不知情:fixed4 frag(v2f i) : SV_Target { // 1. 采样贴图、算光照(重活) half3 albedo =