1.2 设备描述文件与伸缩性:一套代码适配千百机型

一套素材,多档画质

UE 处理碎片化的核心是设备描述文件(Device Profile)+ 伸缩性(Scalability):

  • 同一个材质/贴图资产有多档 LOD、纹理流送上限、材质质量等级
  • 每个机型匹配一个 Device Profile,引擎自动套用对应档位的 ConsoleVariable
  • 设置入口见「设置设备描述」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/setting-up-device-profiles-in-8c00)与「自定义设备描述和伸缩性」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/customizing-device-profiles-an-ebac)

工作机制

设备 → CVars(r.Mobile.* 一系列开关)→ 渲染管线
   ↑
DeviceProfile(机型匹配:GPU/内存/系统版本)

UE 内置了一套默认 Profile(Android_Low/Medium/High、iOS 系列等)。你可以:

  1. 直接用内置分档:在项目设置里给 Device Profile 配质量组(纹理 LOD、阴影、后处理等)
  2. 自定义 Profile:对具体机型单独建 Profile + 匹配规则

质量组:一次配置全局生效

Device Profile 的质量组涵盖纹理质量、阴影质量、后处理、材质质量、粒子 LOD 等。正确做法是按档位批量配 CVar,而不是一台台机器调:

[Android DeviceProfile]
+CVars=r.MobileContentScaleFactor=1.0
+CVars=r.Mobile.AmbientOcclusion=0
+CVars=r.StaticMeshLODDistanceScale=1.2

Lyra 示例工程就是标准参考(「Lyra 可扩展性和设备描述」https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/scalability-and-device-profile-fec4)。

我的分档经验

三档足够(别搞五档,调不完):

档位 目标机型 目标表现
Low(保守档) 内存 3GB 上下 / GPU 中低 稳定 30fps,画质大幅简化
Medium(主流档) 中端机(发行主要占比) 稳定 30fps,中画质
High(高效档) 旗舰机 60fps(动态分辨率兜底)

分档的三个坑:

  1. 划分依据用「跑分」而不是「价格」:同价位不同代 CPU/GPU 差异很大
  2. 驱动差异大的老机型单列 Profile:渲染 bug 常集中在「GPU 型号 × 驱动版本」交叉上
  3. 低档不是「砍到能跑」:Low 档的美术标准要从立项就定,后期降级美术成本极高

分辨率缩放系数

移动端最有效的单 knob:

r.MobileContentScaleFactor=1.0   ; 1080p 设备渲染分辨率等于屏幕;0.7 大致 75% 分辨率

高端机开 1.0,中端 0.7~0.8,低端 0.5——肉眼差异比想象小,帧率提升比想象大(3.2 节细讲动态分辨率)。

测试矩阵

分档做完要真机验证矩阵:每档至少 3 台真机(低/中/高端各一)跑「15 分钟压力场景」。模拟器/预览器(「使用移动预览器」https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/using-the-mobile-previewer-in-ea79)只能查配置对错,不能替代真机性能。

心得:分档的关键是「承认自己没法为所有机器做到最好」。把 80% 玩家的中端机做到稳定流畅、高端机敢开 60、低端机能进得去不闪退,就是优秀的移动端适配。