渲染管线:从提交到像素
优化渲染之前先有地图。UE 的渲染管线大致是:
游戏线程(可见性判断、变换更新)
↓ 提交
渲染线程(剔除、排序、准备渲染命令)
↓ RHI 转换
GPU(阴影深度 → 基础通道 → 透明 → 后处理)
三处瓶颈的分工
| 在哪卡 | 工具 | 常见原因 |
|---|---|---|
| 渲染线程(CPU) | stat render / Insights |
DrawCall 太多、剔除太重 |
| GPU | stat gpu / profilegpu |
着色复杂、overdraw、纹理带宽 |
| 二者之间(RHI) | stat rhi |
状态切换、资源同步 |
渲染线程慢 ≠ GPU 慢:DrawCall 太多时 GPU 可能反而闲着(每帧都在等 CPU 提交命令)。stat unit 的 Draw 与 GPU 两行一眼区分。
视锥剔除与可见性
渲染线程每帧做"谁在镜头里"的判断:
- 粗剔除(Bounds 相交)很便宜;
- 精确剔除(逐三角形)很贵——这就是为什么要用 Bounds / 碰撞体近似而非实际几何做剔除;
stat scenerendering的可见图元数是最直接的指标:同屏可见图元数超过六位数,渲染线程的开销就压不住了。
渲染线程优化的总思路
先减"提交的数量"(DrawCall、可见图元),再减"提交的质量"(阴影、材质、通道)。顺序反了会事倍功半。
