3.2 分辨率缩放与动态分辨率:有尊严地降画质保帧率
核心结论
当 GPU 预算超了,第一杠杆不是砍美术,而是降低渲染分辨率(0205 讲过 TSR/FSR 放大的配合)。固定降一档是基础做法,更高阶的是动态分辨率——让引擎按负载自动浮动,玩家几乎无感。
静态缩放的三档配置
| 档位 | Primary Screen % | 目标设备 |
|---|---|---|
| 高 | 85~100 | 旗舰机(SM5/Vulkan 高档) |
| 中 | 70 | 中端机主力 |
| 低 | 55~60 | 老设备兜底(配 FSR) |
落地方式:在 DeviceProfile 里按机型写 r.ScreenPercentage,与材质质量档同步升降(见第一章 0102)。
动态分辨率:开启与调参
UE 的动态分辨率(Dynamic Resolution)在移动上默认支持,原理是按 GPU 历史帧耗时,在设定区间内自动调 Screen %:
// DeviceProfile 例
r.DynamicRes.OperationMode=2 # 2=按帧时间自动
r.DynamicRes.MinScreenPercentage=50
r.DynamicRes.MaxScreenPercentage=80
r.DynamicRes.TargetedFrameTime=33.33 # 30 帧
调参心法: - Min/Max 区间先设宽(40~90),观察实际落在哪,再收紧。 - TargetedFrameTime 与目标帧率一致,留 2~3ms 余量给突发负载。 - 开启动态分辨率后,画面会有轻微"呼吸"——远处看不出来,转头时可能感觉到。这是取舍。
常见坑与解法
坑 1:动态分辨率不生效
原因:引擎缓存了上一帧时间,或被 r.ScreenPercentage 固定值压制。
解法:确认 OperationMode 非 0;确认没有别的控制台变量锁死 Screen %;Shipping 包里也要验证(编辑器不开渲染时间统计时动态分辨率可能不工作)。
坑 2:切场景时分辨率剧烈抖动
原因:场景加载瞬间 GPU 突然闲/忙,控制环路被扰动。
解法:切场景时给个"压力缓冲"——通过 GameUserSettings 暂时锁定 Screen %,切完再放开。或者把 Min/Max 收窄(60~80),减少幅度。
坑 3:降分辨率后 UI 变糊
原因:用户以为 Screen % 影响 UMG,其实 UMG 不走 3D 渲染管线,但后处理会作用到整个画面(不包 UMG)。糊的是 3D 场景。
解法:这是正常现象,用 0205 的 TSR/FSR 放大缓解;UI 用独立画布保证锐利。
我的组合拳
- 设备描述文件里默认开动态分辨率(区间 55~80,目标 30 帧)。
- 玩家设置里给"画质优先/均衡/性能"三选项,每个选项改写 Min/Max 区间——这也是现代手游标配。
- 旗舰机直接走静态 90%+60 帧,不用动态(避免呼吸感)。
这样低端机保住帧率、高端机保住画质、中端机自动平衡,一份配置覆盖全线。
相关节点速查
- 静态缩放:
r.ScreenPercentage - 动态:
r.DynamicRes.*系列 - 设备档应用:DeviceProfile(第一章 0102 详述)
心得:动态分辨率是移动项目"上线最后一周"的救命稻草——多少项目靠它从 25 帧抬到稳定 30 帧。但它不是偷懒的借口,先做该做的优化(LOD、后处理减法、光照烘焙),再把动态分辨率当最后 10% 的缓冲,顺序反了会上瘾。
