开销定位三件套: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 更适合回答"是哪一个特效在拖后腿"。

用调试器的三个典型场景:

  1. 场景里 NS 很多,不知道拖帧的是谁 → 排序列表看 Top 3;
  2. 怀疑某个 NS 粒子数失控(Spawn Rate 配错)→ 看粒子数列;
  3. 想确认一个 NS 优化前后差异 → 截图对比前后数值。

第三层:Unreal Insights(帧级深度分析)

前两层回答"谁贵",Insights 回答"为什么贵"。捕捉一帧后:

  • 看模拟任务分布:是粒子更新、还是碰撞模块占了大头;
  • 看是不是被其他系统"挤"了(比如同一帧大量物理查询把线程占满,特效任务排队);
  • 看渲染侧:是顶点数、overdraw 还是材质复杂度。

需要状态分析与追踪方法论,可参考官方的调试与优化项目。经验法则:优化前先抓一帧,优化后再抓一帧对比——凭感觉优化经常"改了但没变快",因为你改错了地方。

常见的误读

误读 真相
"stat Niagara 时间高 = 特效有问题" 也可能是 DrawCall、材质、纹理带宽;用 stat GPU 交叉确认
"GPU 时间低就万事大吉" 游戏线程可能被逻辑拖住;stat unit 三线全看
"粒子少了就快了" overdraw 与材质复杂度可能占比更大,见下一节