UE5/Niagara 烟雾与火花效果过重时的 5 个优化要点
【UE5/Niagara】煙や火花が重いときに見直す5つのポイント
译文尚不完整,完整内容请切换到原文。
引言
用 UE5 制作动作游戏时,往往会想把攻击命中时的火花、爆炸、烟雾等特效做得更丰富。但随着特效越加越多,可能会出现只有战斗时帧率下降的情况。
此时,简单地断定"因为是 Niagara 所以重""GPU 模拟就快"是危险的。Niagara 的成本不仅包括粒子的模拟,还包括系统/发射器的管理以及实际向屏幕渲染的处理。
本文参考 UE5.8 官方文档,整理了 5 种在排查 Niagara 负载后进行优化的方法。
首先,重现出现问题的特效场景,然后在控制台执行以下命令。
stat unit
stat gpu
stat unit 是查看游戏线程、渲染线程和 GPU 时间的入口,stat gpu 是实时查看 GPU 处理分类的入口。需要深入调查时使用 profilegpu。
要查看 Niagara 的信息,请在关卡编辑器中:
工具 → 调试 → Niagara 调试器
打开即可。启用 Debug HUD 后,可以查看当前活动的系统、发射器、粒子数量等信息。FX Outliner 也便于查看各系统的状态。
同时,将特效组件临时隐藏/停止的状态与正常状态进行对比。但停用后会同时改变 CPU 的模拟和渲染,因此即使出现差异,具体是哪个处理导致的问题仍尚未确定。
① 减少半透明重叠(过度绘制)
烟雾、火焰、光晕等半透明精灵,当多张重叠在同一画面像素上时,成本可能会增加。
在视口的 View Mode 中查看 Shader Complexity 或 Quad Overdraw。
viewmode shadercomplexity
特别是当在摄像机附近显示大面积烟雾时,如果屏幕上较广的区域变红,则属于需要改进的对象。
改进方法如下:
- 将精灵尺寸控制在必要最小范围内。
- 减少不必要的粒子生成数量。
- 避免在同一位置叠加大量透明精灵。
- 研究能否简化所用材料的处理。
把粒子数量减半,并不一定意味着绘制时间也会减半。 粒子占据的屏幕面积、材质以及渲染方式也都会产生影响。
② 通过距离和品质设置停用不必要的系统
也许不必对远处的小火花也以与近距离相同的质量进行处理。
Niagara 中有一种称为 Niagara Effect Type 的机制,可以将通用的可扩展性/预算设置应用到多个 Niagara System 上。
- 在 Content Browser 中右键单击,创建 FX → Niagara Effect Type。
- 在目标 Niagara System 的属性中,为其指定该 Effect Type。
- 根据距离或质量级别设置剔除/缩放。
- 在近处和远处分别确认外观与运行表现。
较小的受击特效和远处的环境特效,将根据优先级被列为削减候选。
③ 不要过多添加 Emitter 和 System
为了打造单一视觉效果而添加大量细小的 Emitter,管理成本会不断累积。同时生成大量 System 实例时也是如此。
例如,如果在命中时使用了多个 烟雾用·火花用·发光用 的 Emitter,请确认是否有重新审视配置的空间。
- 是否在重复相同的处理。
- 是否有可以在视觉上合并的 Emitter。
- 是否在相同位置大量 Spawn 了类似的 System。
不过,合并后有时会使单独的剔除变得更加困难。Emitter 数量少并不总是意味着更快,因此测量变更前后的效果至关重要。
\n ④ 区分使用 CPU/GPU Simulation
Emitter 的模拟对象可以选择 CPU 或 GPU。
- GPU 模拟:适合并行处理大量粒子。
- CPU 模拟:在粒子数量较少或需要 CPU 处理的情况下可能更适用。
不过,即使切换到 GPU 模拟,System 和 Emitter 的脚本处理的一部分仍会保留在 CPU 上。在 GPU 已达极限的场景中,移至 GPU 并不一定能带来改善。
基本原则是:根据实际的 CPU 时间和 GPU 时间来决定,而不是「粒子数量多所以用 GPU」。
⑤ 短时间内大量生成的特效建议考虑使用对象池
每次子弹命中时都生成并销毁新的 Niagara System,组件的分配和 GC 可能会成为负载瓶颈。
使用 Spawn System at Location 或 Spawn System Attached 中提供的 池化方法,可以复用可再生的 Niagara 组件。
但池化是针对系统生成与销毁的负载的应对措施。它并不是减少大量半透明渲染本身的方法。如果池设置得太大,内存消耗也会增加,因此需要在实测中决定。
最后:用于判断是否改善的检查表
| 调查项目 | 調査方法 | 改善候補 |
|---|---|---|
| 半透明重叠 | 着色器复杂度 / 四边形过度绘制 | 精灵数量·尺寸·材质 |
| 系统数量·粒子数量 | Niagara Debugger 的调试 HUD | 减少不必要的系统 |
| 远距离是否也在运行 | Niagara 效果类型 / 可扩展性 | 按距离和品质进行剔除 |
| CPU 还是 GPU 更耗资源 |
stat unit / Unreal Insights |
评估 Simulation Target |
| 是否仅在生成时卡顿 | 复现测试 · Profiler | 对象池、生成时机 |
在同一场景、同一相机、同一分辨率下测量变更前后,并确认外观和游戏玩法上的影响。
总结
Niagara 优化中,首先测量 → 区分原因类型 → 逐一变更 → 在相同条件下重新测量是非常重要的。
尤其是个人制作的游戏中,我认为与其削减所有特效,不如在保住显眼场景外观的同时,降低不显眼地方的成本,这样更实际。
参考資料
来源:zenn · 游戏开发社区 · zenn.dev