开销定位三件套:stat、调试器、Insights
优化特效像医生看病:先要会"测量",再谈"治疗"。UE 提供三个层次的观测工具。
第一层:stat 命令(开发期快速看)
在编辑器按 ~ 输入:
| 命令 | 看什么 |
|---|---|
stat Niagara |
Niagara 每帧总开销(模拟 + 渲染分开) |
stat unit |
各线程帧时间(GPU/CPU/Render/Game 分别多少 ms) |
stat GPU |
GPU 端的逐 pass 开销 |
stat GPUVisualizeTexture |
看纹理带宽热点(进阶) |
解读方法:stat Niagara 给出总时间。如果你怀疑某个 NS,就在场景里把它单独禁播,看总时间掉多少——这是最粗暴但最实用的"差分法"。
第二层:Niagara 调试器(逐发射器分析)
Niagara 调试器(窗口 → Niagara 调试器)提供发射器级别的列表:
- 每个活跃 NS / Emitter 的粒子数;
- 每个发射器的模拟耗时;
- 按耗时排序——一眼看到"最贵的发射器是谁"。
官方调试器文档见 Niagara调试器。它比 stat 更适合回答"是哪一个特效在拖后腿"。
用调试器的三个典型场景:
- 场景里 NS 很多,不知道拖帧的是谁 → 排序列表看 Top 3;
- 怀疑某个 NS 粒子数失控(Spawn Rate 配错)→ 看粒子数列;
- 想确认一个 NS 优化前后差异 → 截图对比前后数值。
第三层:Unreal Insights(帧级深度分析)
前两层回答"谁贵",Insights 回答"为什么贵"。捕捉一帧后:
- 看模拟任务分布:是粒子更新、还是碰撞模块占了大头;
- 看是不是被其他系统"挤"了(比如同一帧大量物理查询把线程占满,特效任务排队);
- 看渲染侧:是顶点数、overdraw 还是材质复杂度。
需要状态分析与追踪方法论,可参考官方的调试与优化项目。经验法则:优化前先抓一帧,优化后再抓一帧对比——凭感觉优化经常"改了但没变快",因为你改错了地方。
常见的误读
| 误读 | 真相 |
|---|---|
| "stat Niagara 时间高 = 特效有问题" | 也可能是 DrawCall、材质、纹理带宽;用 stat GPU 交叉确认 |
| "GPU 时间低就万事大吉" | 游戏线程可能被逻辑拖住;stat unit 三线全看 |
| "粒子少了就快了" | overdraw 与材质复杂度可能占比更大,见下一节 |
