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 特性。先想清楚你的用户机型分布,再定功能级别组合。