为什么Mac Pro性能这么强悍但是支持macOS的游戏却很少?

其实自从 Linux 那边通过 Proton 运行起来海量游戏之后,我就一直好奇为啥 Mac 没有吃到 Proton/Wine 的红利,x86 -> ARM 的转译应该很成熟了,大多数 3A ARPG 游戏是图形计算密集型应用,即便考虑 CPU 指令集转译损耗也不至于在 Mac 上跑不动。

今年四月因为升学缘故换了一台 M5 的 MBP,就开始着手研究。发现虽然大家都戏称“用 Mac 玩游戏是精神病”,但研究使用 ARM Mac 打 x86 Windows 的用户并不在少数,也有很多成熟的框架实现,有人数庞大的 macgaming 社区。然后我就发现,在 Mac 上通过转译打游戏,比我想象的复杂很多。

在 x86 Linux 上使用转译打游戏,我们只需要做好两层转换:

  • Win32 API -> Linux syscall
  • DirectX -> Vulkan(对于原生 Vulkan 的游戏,可以忽略)

因为 Valve 的加入,Proton 的推出,这两层转换的效率已经非常高了。对于很多游戏来说,性能损耗可以忽略不计。甚至因 Linux 系统可以裁切修改、占用更低的缘故,还经常能传出来 Linux 转译打游戏的性能超越同配置 Windows 的话题。

那么 macOS 能不能也走类似的路呢,答案是完全可以,但是要做的事情就很多了:

  • Win32 API -> darwin syscall
  • x86 机器码 -> ARM 机器码
  • DirectX -> Metal

很多人下意识的以为这里面损耗最大的是指令集的翻译,然而 x86 <-> ARM 的相互翻译现在已经非常成熟了,Rosetta 2 在这方面做的不错,性能损耗十分可控,对于大多数图形密集型 3A 游戏来说并非是瓶颈。

真正的瓶颈在于 DirectX -> Metal。DirectX 和 Vulkan 都是显式 API,他们两个之间的转换很容易做。但 Metal 是高级抽象的设计,DX/VK -> Metal 就没办法用简单的结构化转换去搞定。甚至在 Apple 推出 D3DMetal 之前,社区中的 DirectX -> Metal 路线走的是:

DirectX -[DXVK]-> Vulkan -[MoltenVK]-> Metal

两层转译,性能损耗到天际了。即便 Apple 后来推出了 D3DMetal,解决了多层翻译问题,游戏的运行效率有着显著的提升,但也还是因为 Metal 和 DX/VK 的设计差异过大,每次 drawcall 都不能被高效批处理,进而导致整个管线的效率下降。图形密集型程序不能高效的进行画面绘制,就会导致帧数很快撞到天花板,怎么也上不去。

很多人对此有不同观点,我也认同。我这里的讨论前提是「图形密集型游戏」,对于其他不同类型的游戏来说,性能瓶颈可能就完全不同。对于一些 CPU 密集型的 RTS、策略游戏来说,Rostta 2 的转译瓶颈会更加明显。

解决办法有两条:

  1. 让 macOS 支持 Vulkan:从 Asahi Linux 的工作来看,macOS 不支持 Vulkan 并非是硬件不支持,只是 Apple 没有实现 Vulkan 相关驱动代码。
  2. 让游戏为 Mac 单独开发:直接登陆 Mac 平台,不需要翻译也就没有损耗了。

前者是最好的解决办法,但也是最不可能的解决办法。Apple 特别喜欢封闭生态,Metal 就是 Apple 的 GPU 生态锁,放开对 Vulkan 的支持会削弱生态绑定,因为不光游戏可以去用 Vulkan,高性能计算也可以去用 Vulkan,那注定没人会再选择 Metal。这是 Apple 不想看到的,至少库克时代的公司战略不允许 Apple 这样做。

所以就只能是后者了,相当于把成本转嫁到开发者身上,让开发者为 Metal 单独做一次适配。但是结果如你所见,没几个开发者愿意这么做。越大的游戏项目越不愿意,如果立项之初就没考虑 Metal,之后再往上加就很难了。

其实最合适登陆 Mac 的是各种手游,他们已经登陆了 iOS 平台,有着完整的 Metal 支持。macOS 也支持直接运行 iOS、iPad OS App,稍微做一下适配就能上 macOS,但即便如此很多手游公司还是不愿意直接登陆 macOS 平台,和几乎没人做 Linux 原生游戏一样,这是一个钱少事多的行为。

我个人觉得如果苹果真的有诚意去搞游戏生态,至少在 GPTK 内部单独实现一套 Vulkan 驱动,让游戏能在 macOS 上以 Vulkan 原生运行。否则大型 3A 游戏还是很难登陆 macOS,只能抱着手游移植和轻量级休闲游戏的生态玩了。

编辑于 2026-06-25 · 著作权归作者所有