引言:为看不见的 80% 付渲染工资
开放世界城市场景中,玩家视野外的建筑、被楼宇遮挡的街道占场景几何的大多数,若全部送入 GPU,Draw Call 与顶点量会失控。视锥剔除只能解决"视野外",而遮挡剔除(Occlusion Culling)解决"视野内但被挡住":只要物体被不透明几何完全遮挡,就直接跳过渲染。
遮挡剔除的核心约束只有一条:剔除的开销必须远小于被剔除物体本应的渲染开销。所有算法的差异,都是在不同硬件条件下逼近这条约束的方式。
一、与视锥剔除的分工
| 维度 | 视锥剔除 | 遮挡剔除 |
|---|---|---|
| 剔除依据 | 物体与视锥体的相交关系 | 物体是否被不透明几何遮挡 |
| 实现成本 | 低(BVH/AABB 平面测试) | 高(预计算或深度查询) |
| 误剔除风险 | 极低 | 需要谨慎配置 |
| 执行顺序 | 先执行 | 在视锥剔除之后进一步过滤 |
两者是串联关系:先视锥剔除剪掉视野外对象,再遮挡剔除剪掉被挡对象。