3.5 反馈系统性能复检:特效也能吃光帧率

核心结论

反馈层是"性能的甜蜜陷阱"——做着做着特效就满屏、音效满天飞、震屏不停,帧率悄悄从 60 掉到 40。这一章把反馈层的性能审计做成固定流程(与 0305 的发布清单呼应),在 M3 联机前跑一遍,能省掉大量后期救火。

性能审计流程

步骤 命令/做法 看什么
1 stat unit 三线程是否均衡
2 stat gpu GPU 预算
3 stat particles(或 Niagara 的统计) 活跃粒子数
4 stat scenerendering DrawCall
5 Unreal Insights 帧内细节定位

审计原则:在"最激烈的战斗场景"里测(5 个怪 + 全技能 + 群攻),不是空场景。

特效的性能预算

Niagara 的优化指南(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/optimizing-niagara-453b)是权威参考。我的预算表(60 帧目标):

指标 预算 说明
同屏粒子总数 < 3000 群攻时
同屏 NS System 数 < 30 每个 System 有固定开销
每技能平均粒子 < 200 普攻 50、大招 500
屏幕填充率 为粒子留 10% 粒子是填充率杀手

Niagara 的三条特定纪律

  1. 能用 CPU 模拟就别开 GPU(粒子少时 GPU 反而慢,切换预算高)。
  2. 半透明粒子开 Sort 的设为 None 或 Low(排序开销随粒子数爆炸)。
  3. 用 Fixed Bounds(动态 Bounds 每帧重算)。

音效的性能(少被人提)

指标 说明
同屏活跃声音组件 < 50
Voice 生命周期 播完自动销毁,别留
长循环音(瀑布) 用 Ambient Sound + Loop,不用多个重叠

性能与品质双赢的做法:给 Sound 设 Concurrency(同类型音并发上限,如"命肉声"同时最多 3 个)。不限制的后果:群攻时 20 个命中肉声叠加,既糊又掉帧。

HUD 的性能

  • UMG Tick 负债:见 0302,事件驱动。
  • Invalidate 布局:UE5 的 UMG 有新 invalidation 系统,只有变化的 widget 重算(官方 UMG 文档有专章)。

常见坑与解法

坑 1:群攻时帧率掉到 30

定位顺序:GPU 时间 -> 粒子数 -> DrawCall -> 半透明排序。

解法: 1. 粒子上限(同屏 NS 数限制、粒子数 Company-wide 上限)。 2. 群攻 AOE 的特效只播一次(在多个怪身上只播一个"中心爆炸",怪身上只播小的受击)。 3. 半透明排序降级。

坑 2:音效爆音/重叠糊成一团

解法:Sound Concurrency(如上表)+ 音量随机微抖(避免"机关枪"感)。

坑 3:帧率在特定 BOSS 阶段崩

解法:特效预算分阶段——BOSS 的 P2 加了 30% 特效?那 P1 就只能用 70%。把"视觉强度"与"性能预算"一起写进技能设计表。

坑 4:开发机没事,玩家机器卡

根因:开发机高配 + 没做画质分级。

解法:特效分级(NS 的 Scalability 设置 + 设备描述里按机型减/加层数);至少三档(高/中/低)明确关闭哪些层(对应 0301 的 T3 余韵先砍)。

相关节点速查

  • stat 命令速查:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/stat-commands-in-unreal-engine-f66a
  • Niagara 优化:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/optimizing-niagara-453b
  • 画质分级:NS 的 Scalability / DeviceProfile

与全书的收束

这一章是"反馈层"与第 5 章性能章的桥:反馈做得越爽,越需要预算管理。我项目里的做法是把预算表贴在美术区墙上:每个特效师做新 NS 前,先看自己已用了多少预算。

心得:我们 M3 验收时发现群攻场景只有 38 帧,按这个流程清了两天回到 58——关 3 个 System、加同屏上限、Sound Concurrency。性能问题看似是"特效太多",根源是"没有预算表"。给感觉定一个数字边界,感觉反而更自由。