Metal 是什么

Metal 是苹果的底层图形与计算 API,让你绕过一层又一层的封装,直接跟 GPU 对话。游戏、专业绘图、视频特效,凡是要榨干显卡性能的地方,背后多半是 Metal 在跑。

Metal 的价值在于:离 GPU 更近、开销更小、能精确控制每一帧怎么画。

这篇从概念到画一个三角形,把 Metal 入门讲清楚。

渲染管线

GPU 画画是一条固定管线:你把顶点数据送进去,顶点着色器决定它们落在哪,光栅化把三角形填成像素,片段着色器决定每个像素的颜色,最后写进帧缓冲。理解这条管线,就理解了图形渲染的骨架。

管线速查
  • 顶点决定形状在哪。
  • 光栅化把三角形填成像素。
  • 片段着色器决定像素颜色。

设备与命令队列

使用 Metal 第一步是拿到 GPU 设备对象,再建一个命令队列。你把要做的绘制命令记进命令缓冲,再提交给队列,GPU 就按顺序执行。这个提交和执行是异步的,CPU 不停手地备命令,GPU 不停地画。

let device = MTLCreateSystemDefaultDevice()
let queue = device.makeCommandQueue()!

设备代表显卡,队列代表 GPU 的干活流水线。

着色器

着色器是跑在 GPU 上的小程序,用类 C 的 Metal 语言写。顶点着色器处理每个顶点,片段着色器处理每个像素。你在里面写公式:位置怎么变、颜色怎么算、光照怎么打。GPU 上成千上万个核心同时跑这些小程序。

苹果 Metal:三维金属网格与 GPU 渲染管线节点连成一颗立体多面体水晶的蓝调插画
GPU 像一颗水晶,成千上万核心并行算像素。