1.3 功能级别:ES3.1、Vulkan、Metal 与 SM5 的取舍
功能级别是什么
功能级别(Feature Level)定义「这台设备的 GPU 能跑哪些着色器」,是握手机制而非画质开关。详见「功能级别和渲染模式」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/mobile-feature-levels-and-rend-ba7a)。
| 级别 | 用在哪 | 能力要点 |
|---|---|---|
| ES3.1(OpenGL ES) | 兼容老 Android | 兼容性最好,能力最弱(无计算着色器) |
| Vulkan(Android) | Android 主力 | 现代 API,CPU 开销低,特性更全 |
| Metal(iOS) | 苹果全系 | 唯一选择,能力约等于 SM5 |
| SM5(桌面级) | 少数 Android 旗舰 | 支持曲面细分、Compute 等 |
Android 分流现实:一台 Android 设备走 Vulkan 还是 GLES 由系统/驱动决定。UE 打包默认做成「Vulkan 优先、GLES 兜底」的双管线。见「Android Vulkan 移动渲染器」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/using-the-android-vulkan-mobil-40be)。
功能级别决定了什么
| 特性 | ES3.1 | Vulkan/Metal |
|---|---|---|
| 逐顶点雾化 | 支持 | 支持 |
| 逐像素光照数量 | 少(约 4 盏上限体感) | 多 |
| 计算着色器 | 不支持 | 支持(Niagara GPU 模拟等依赖它) |
| 高级渲染目标格式 | 受限 | 完整 |
经验:把 ES3.1 当「低保底」,内容设计按 Vulkan/Metal 来。老设备上的降级(GPU 粒子回退 CPU 等)由功能开关处理,而不是准备两套内容。
常用移动端 CVar
控制台输入 r.Mobile. 按 Tab 可看全部。关键几个:
r.MobileHDR(移动端 HDR 管线)r.Mobile.DisableVertexFog(顶点雾化开关)r.Mobile.AmbientOcclusion(移动版 SSAO)r.Mobile.AlwaysResolveDepth(深度解析行为)
Vulkan/Metal 特有的坑
- Vulkan 驱动质量参差:部分 Adreno/Mali 旧驱动有 bug(渲染错误/闪退),表现为「单机型渲染异常」。预案:对问题驱动版本在 Device Profile 里降画质或强制走 GLES
- Metal 严格而敏感:格式/权限不对直接崩(不像 Vulkan 会黑屏),但错误信息清晰
- 静默回退:材质编译失败时编译器自动用 fallback 材质,美术看不见——上线前必须过一遍目标低档设备的 Cook 日志里的降级警告
检查清单
- [ ] 确定目标功能级别集合(如「Vulkan/Metal 主力 + ES3.1 兜底」)
- [ ] 在最低支持级别上跑过完整流程(不止主菜单)
- [ ] Cook 日志无未被察觉的材质 fallback
- [ ] 有针对「问题驱动」的兜底 Profile
心得:功能级别选型是「发布渠道的函数」——TapTap/国内安卓渠道老设备占比高,必须留 ES3.1 兜底;App Store 机型新很多,可以激进用 Metal 特性。先想清楚你的用户机型分布,再定功能级别组合。
