Discover Metal 3
Graphics & Games 进阶 20m

探索 Metal 3

Discover Metal 3

2022年6月6日

在 Apple 官方观看视频

一句话判断

Metal 3 带来了快速资源加载、离线着色器编译、MetalFX 超分辨率和 Mesh Shader——游戏和图形密集型 App 的性能和画质都能上一个台阶。

这场 Session 讲了什么

Metal 3 是 Apple GPU API 的重大版本更新,包含四大核心功能。

快速资源加载(Fast Resource Loading) 让你用 Metal 的命令模型调度大量小文件的加载——直接从存储加载到 Metal buffer 和 texture,无需中间步骤。特别适合纹理流式加载系统。

离线编译(Offline Compilation) 把着色器二进制生成从运行时移到构建时。首次创建 Pipeline State Object 时不再需要等待 GPU 代码编译,彻底消除了画面卡顿。加载时间也大幅缩短。

MetalFX Upscaling 提供平台优化的超分辨率和抗锯齿。你可以用较低分辨率渲染,然后让 MetalFX 生成高质量的高分辨率图像。支持时间和空间两种算法组合。

Mesh Shaders 引入了灵活的几何管线替代传统顶点阶段。两阶段模型(Object Stage + Mesh Stage)让 GPU 驱动的剔除、LOD 选择和程序化几何生成变得高效。

值得深挖的点

  • 快速资源加载与 Sparse Texture 的协同:Metal Sparse Texture 按瓦片粒度流式加载纹理。快速资源加载让瓦片加载更高效,减少了从文件到 staging area 再到 texture 的两次拷贝。
  • 离线编译的性能影响:演示中展示,有大量复杂 Pipeline 的 App 加载时间从数十秒缩短到几乎瞬间。帧内首次创建 Pipeline 导致的卡顿完全消失。这对游戏加载体验的提升是决定性的。
  • MetalFX 的实用价值:在 Retina 分辨率下渲染所有像素的性能代价很高。MetalFX 让你用 1/4 的分辨率渲染,再智能放大到全分辨率。质量损失极小,帧率提升显著。
  • Mesh Shaders 的内存优势:传统方案需要 compute pass 预处理几何体再写入 device memory,内存预算难以预估。Mesh Shaders 在 render pass 内完成两阶段处理,不需要中间存储。

代码片段

// MetalFX Upscaling 基本用法
import MetalFX

let upscaler = try MTLFXSpatialScaler(
    device: device,
    colorTextureFormat: .rgba16Float,
    outputTextureFormat: .rgba16Float,
    inputWidth: renderWidth,    // 低分辨率
    inputHeight: renderHeight,
    outputWidth: displayWidth,  // 高分辨率
    outputHeight: displayHeight
)

// 在渲染流程中
// 1. 以低分辨率渲染到 colorTexture
// 2. 用 MetalFX 放大
upscaler.colorTexture = lowResColorTexture
upscaler.outputTexture = highResOutputTexture
let commandBuffer = commandQueue.makeCommandBuffer()!
upscaler.encode(to: commandBuffer)
commandBuffer.commit()
// highResOutputTexture 现在包含超分辨率的结果

最佳实践

  • 纹理流式加载系统应该迁移到快速资源加载 API,减少加载层级
  • 所有 Pipeline State Object 都应该使用离线编译,在构建时生成 binary archive
  • MetalFX 优先使用 temporal 模式(利用历史帧信息),质量更高
  • Mesh Shaders 适合 GPU 驱动渲染、大规模场景剔除和程序化几何
  • 在 Apple Silicon 上充分利用统一内存架构的优势

还有什么值得关注

  • “Load resources faster with Metal 3” 深入讲解快速资源加载
  • “Target and optimize GPU binaries with Metal 3” 覆盖离线编译的完整流程
  • “Boost performance with MetalFX Upscaling” 有 MetalFX 的详细性能分析
  • metal-cpp 让 C++ 开发者也能直接使用 Metal 3 的全部功能
WWDC 2022