# iOS Metal

# 背景

当前,基于 C++ 游戏引擎(如 Unity、Cocos2d-x)开发的微信小游戏,在技术架构上主要遵循以下流程:游戏核心逻辑被编译为 WebAssembly 模块,而其图形渲染部分调用标准的 OpenGL ES 图形 API。 在 iOS 平台上,这一传统渲染路径存在固有的性能瓶颈,其具体流程如下:

这一双重转换架构带来了显著的性能损耗:

  • 首次转换:由 Emscripten 工具链将 OpenGL ES 指令转换为 WebGL API 调用
  • 二次转换:在 iOS 系统层面,由于苹果已从 iOS 12 开始将 OpenGL ES 标记为废弃状态,系统需要将 WebGL 指令再次转换为苹果原生图形接口 Metal 的指令流

这额外的系统级转换层导致了不必要的 CPU 和 GPU 开销,成为制约 iOS 平台小游戏性能表现的主要瓶颈。

# 性能优势与技术原理

微信小游戏 iOS Metal 技术方案通过提供原生 Metal 后端,彻底重构了这一渲染路径。接入本方案后,渲染流程优化如下:

# 性能收益

项目 优化效果 备注
功耗 (发热) 降低 15% 视游戏渲染复杂度而定
帧耗时 降低 10% ~ 20% 相对于 WebGL 方案,视游戏复杂度而定
  • 当前线上已有多款游戏接入了 iOS Metal 特性,Metal 基础渲染能力的完备性已得到验证。
  • iOS Metal 还可以使用 Compute Shader 等高级渲染能力,让开发者有更丰富的优化技术手段。

# 准备工作

# 1. 特别提示

  • iOS Metal 仅支持 iOS 高性能+ 模式,其他运行时将会自动降级为原有的运行方案。
  • 建议 充分验证后 再发布。

# 2. 运行环境要求

  • 微信版本要求: 需 >= 8.0.63,低版本的基础库会使用原有的运行模式运行游戏。
  • 基础库版本要求:需 >= 3.10.0,低版本的基础库会使用原有的运行模式运行游戏。
  • iOS 系统要求: 与iOS高性能+模式对齐,只会对iOS系统>=14的版本开启;

开发阶段建议尽可能使用高版本的微信。

# 接入方式

# 团结引擎快适配方案

针对于使用 团结引擎快适配方案接入的游戏,请参照 快适配-iOS Metal 渲染模式进行接入。

# 其他引擎

基于WebAssembly技术将游戏转换至微信小游戏平台的原生目标引擎(如 Unity、Cocos2d-x、UE等),接入流程详见 iOS Metal 指令流 - 自研引擎适配 文档。

# 常见问题 Q&A

# Q1. 如何判断游戏已成功通过iOS Metal方案运行?

A1. 请按照下面的方式进行操作

  • 确认设备是否满足上方要求的运行环境要求。
  • 重新进入小游戏并打开调试,查看vConsole中的日志,关注是否包含下方的日志信息

# Q2. 为什么开启了iOS Metal后,性能更差了?比如单帧耗时更大了。

A2. 如果遇到了此类情况,一般是踩到了新方案的坑,请联系我们一起进行排查。

# Q3. 为什么开启iOS Metal模式后,渲染异常了?

A3. Metal 与 WebGL 在底层实现上差异较大,引擎渲染管线可能需要适配,请联系我们一起进行排查。

# 联系我们

如有任何问题,欢迎打开 微信小游戏 iOS Metal 渲染模式 文档,扫二维码加入官方的技术交流群。

点击咨询小助手