5.4 性能预算复盘:三线程账本与优化记录

核心结论

性能优化在独立项目里最后拼的既不是技术也不是时间,而是纪律:有没有账本(预算)、有没有基线(测量)、有没有记录(回归)。这一篇把全项目(含网络)的性能工作收口,并与本系列性能那本书的方法论对接(stat 命令速查 https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/stat-commands-in-unreal-engine-f66a,带宽 https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/performance-and-bandwidth-tips-d100)。

三线程账本(60 帧目标,PC 中端配置)

线程 预算 实际(M4 末) 状态
游戏线程 8ms 7.2 OK
渲染线程 8ms 9.1 紧张(粒子)
网络(DS) 3ms 1.8 OK
GPU 8ms 8.6 紧张(半透明)

账本的价值:一旦某线程红字,对应系统的人就要来答辩(0301 的流程)。这把"全员的性能问题"变成"某个系统的性能问题"。

优化记录(我做过的,按性价比排序)

# 优化 帧时间收益 成本
1 Niagara 半透明排序降级 + 同屏上限 -2.1ms 半天
2 远处怪休眠(Dormancy) -1.4ms 一天
3 UMG 事件驱动(去 Tick) -0.8ms 一天
4 NetUpdateFrequency 分级 -0.6ms(+流量降 3x) 两小时
5 蓝图热点函数转 C++ -0.5ms 两天
6 减少 TickActor(合并组件 Tick) -0.4ms 一天
7 阴影级联裁远 -0.9ms(GPU) 一小时

规律:粒子/休眠/网络分级前三名都是配置工作,几乎不用碰代码。先做配置类优化,再考虑代码优化——这个顺序让性能工作变成"周末工程"而不是"季度工程"。

性能回归的保护

机制 做法
基线关卡 一张"压力关卡"(满怪+全技能+4 人联机)
自动对比 每次里程碑跑一次,记录三线程到 wiki 表
上限报警 渲染线程 > 9ms 就禁止合入该功能(软规则+团队共识)
DevTools 编辑期一键开 stat dump(作弊插件里)

网络性能的复盘要点

指标 目标 我的项目
上行带宽/人 < 16KB/s 8KB/s
RPC 丢失可见性 不可见 GC 兜底
4 人 DS CPU < 20% 一核 12%
断线率/局 < 5% 3.2%

网络性能的要点:与帧率不同,网络性能的瓶颈是带宽与 RPC 次数,优化手段全在 0502 的分层里。

常见坑与解法

坑 1:本地测 60 帧,玩家机器 40 帧

原因:开发机配置>>玩家。

解法:找一台"目标配置"的机器做固定基线机;把它当成 CI。

坑 2:优化完不知道哪条起了作用

原因:一次改 N 项。

解法:每次只改一项并记录(上表就是这么来的)。性能的归因比性能本身重要。

坑 3:加功能后帧率悄悄掉回去

解法:里程碑回归(上表机制);性能保护写进 Definition of Done:新功能的 PR 必须附 stat 截图。

相关节点速查

  • stat 速查:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/stat-commands-in-unreal-engine-f66a
  • 网络带宽:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/performance-and-bandwidth-tips-d100
  • 详细 profile:Unreal Insights

与全系列的书单

本篇假设你读过本系列的性能优化那本书(预算、stat、常见瓶颈);如果没读,先去读那本的"预算与工具"两章,再回来看这篇的复盘视角——方法论在那是通用的,这里讲的是落地记录。

心得:性能账本最魔幻的地方是——它把团队里"感觉派"和"数字派"统一了。开账本会议时没人能说"我感觉应该没问题",因为墙上写着 9.1ms。工程师文化就是这样一点一点立起来的。