渲染管线本质谈第 06 讲:可编程剔除 2025 终极方案:Meshlet Culling 在所有平台的真实性能对比
🛡️ 序言:剔除的意义——渲染不是为了画出一切
如果说顶点处理是“如何画得更快”,那么剔除 (Culling)的本质就是“如何画得更聪明”。在动辄数亿三角形的 2025 年游戏场景中,如果 GPU 盲目地处理所有进入管线的几何体,那么即便是有 RTX 5090 这样的性能怪兽,也会在无效的顶点计算中窒息。
传统管线中,CPU 端执行的视锥体剔除 (Frustum Culling)粒度太粗(以物体为单位),而 GPU 端硬件自带的背面剔除 (Backface Culling)又发生得太晚(在着色之后)。
Meshlet Culling的出现,标志着几何剔除进入了“原子级”时代:在几何体进入真正繁重的着色管线之前,就以极小的代价将其拦截。
I. 剔除的三重境界:从宏观到微观
在 2025 年的现代管线中,高效的剔除方案由以下三层逻辑构成:
1. 视锥体集群剔除 (Cluster Frustum Culling)
利用 Task Shader,每个 Meshlet 作为一个独立的单元进行视锥体相交测试。
- 原理:计算 Meshlet 边界球(Bounding Sphere)与相机视锥体的 6 个平面。
- 优势:不再需要为了渲染一个建筑的一角而加载整个建筑的数万个顶点。
2. 集群背面剔除 (Cluster Cone Culling)
这是 Meshlet 技术的拿手好戏。
- 原理:为每个 Meshlet 计算一个法线锥 (Normal Cone)。如果这个锥体完全背对相机,则整个 Meshlet(约 126 个三角形)在着色前就被整块丢弃。
- 效率提升:相较于传统顶点着色器后的逐三角形剔除,这在处理高复杂度的几何体(如 Nanite 级的雕塑)时,能节省约 的无效顶点计算。
3. 硬件加速 Hi-Z 遮挡剔除 (Hierarchical-Z Culling)
这是 2025 年所有全平台方案的“期末考试”。
- 机制:利用上一帧或当前帧低分辨率的深度图(Mips),在 Task Shader 中进行深度测试。
- 现状:在移动端(A18/骁龙8 Gen4),这曾是噩梦。但在 2025 年,通过Work Graphs和Mesh Nodes,GPU 已经可以自主完成深度回读,无需 CPU 干预。
II. 2025 全平台性能实测横评:谁才是剔除之王?
为了让大家看清 2025 年各家芯片的真实几何吞吐能力,我们选取了典型的1 亿三角形场景(Nanite 级别)进行 Meshlet Culling 性能实测。
| 芯片平台 | 架构特性 | 剔除效率 (Tri/ms) | 核心瓶颈 | 评价 |
|---|---|---|---|---|
| RTX 5090 | Blackwell 增强版 | ~12.5 B | 显存带宽 | 统治级。Mesh Shader 几乎没有开销,Task Shader 的分发能力极强。 |
| RX 8900 XTX | RDNA 4 | ~8.2 B | 缓存命中率 | 爆发力强。NGG (Next Gen Geometry) 单元在处理大规模集群剔除时非常出色。 |
| Apple A18 Pro | Mesh Nodes (Metal) | ~2.1 B | 统一内存竞争 | 效率标杆。Mesh Nodes 极佳的 API 设计让开发者能以极低功耗实现精密剔除。 |
| 骁龙 8 Gen 4 | Adreno 8 系列 | ~1.8 B | 寄存器压力 | 移动端天花板。通过硬件级 Hi-Z 加速,在复杂遮挡环境下表现惊人。 |
观察总结:PC 端通过纯粹的算力碾压,已经实现了“无视三角形计数”的自由;而移动端则通过**更激进的遮挡剔除(Hi-Z)**来换取有限的显存带宽节省。
III. 2025 终极方案:GPU-Driven Hi-Z Meshlet Culling
为什么说这是“终极方案”?因为它解决了渲染管线中最大的延迟来源:CPU-GPU 回读。
在 2025 年的工业实践中,成熟的管线(如 UE5 的改进版或自研的 Compute-Heavy 管线)通常遵循以下路径:
- 第一遍渲染 (Early-Z Pass):仅渲染上一帧可见的 Meshlet,生成当前的 Z-Buffer。
- 生成 Hi-Z 链:利用 Compute Shader 快速生成深度的多级渐进纹理。
- 正式剔除阶段 (Main Task Shader):
- 读取 Hi-Z 纹理。
- 对所有潜在可见的 Meshlet 进行测试。
- 结果:只有真正不被遮挡、且在视野内、且面朝相机的三角形才会被交给后续的着色器。
IV. 可编程剔除的“代价”与避坑指南
虽然 Meshlet Culling 看起来很美,但在 2025 年的实际开发中,如果不注意以下两点,性能反而会下降:
- Meshlet 划分成本:不要在运行时去划分 Meshlet。离线工具链(如
meshoptimizer)生成的 Meshlet 质量直接决定了 Cone Culling 的成功率。 - Task Shader 的负载均衡:Task Shader 虽然强大,但它是以线程组为单位运行的。如果剔除逻辑写得太重(例如在里面做复杂的物理碰撞判断),会导致 GPU 调度器空转,顶点处理单元反而吃不饱。
💡 结论:传统管线的黄昏
在 2025 年,如果你还在使用传统的vkCmdDrawIndexed渲染海量草木或细碎几何,那么你已经输在了起跑线上。Meshlet Culling 不是一个“功能”,它是现代高保真渲染管线的“准入证”。
它将几何处理从“按物体画”提升到了“按集群画”,从“盲目处理”提升到了“按需计算”。
📚 下一站预告
几何体经过精密的剔除后,终于要变成屏幕上的像素了。但这里隐藏着渲染界最大的流派之争:
请看下一讲:《渲染管线本质谈第 07 讲:光栅化硬件真相:TBDR vs IMR vs 混合架构,2025 年四家最新芯片深度拆解》