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 的三条特定纪律
- 能用 CPU 模拟就别开 GPU(粒子少时 GPU 反而慢,切换预算高)。
- 半透明粒子开 Sort 的设为 None 或 Low(排序开销随粒子数爆炸)。
- 用 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。性能问题看似是"特效太多",根源是"没有预算表"。给感觉定一个数字边界,感觉反而更自由。
