
Steam Deck已取得巨大成功。
该设备已售出数百万台,改变了我们对 PC 游戏的看法,催生了众多克隆产品,并为手持游戏设备的未来奠定了基础。有了一家价值数十亿美元的公司的支持,这可能并不令人意外。
但 Steam Deck 的成功背后有一个不为人知的故事——工程激情的核心,解开了让 Linux 游戏在如此规模上运行的难题。其中很大一部分始于一位独立开发者——一个男人和他对一款名为《尼尔:机械纪元》的游戏的热爱——以及一个准备将 Linux 游戏提升到新水平的社区。
出身卑微

去年 Steam 秋季特卖期间,我决定购买《尼尔:机械纪元》。这款 2017 年突破流派的动作冒险游戏名列 Digital Trends有史以来最佳游戏排行榜,虽然我在 PlayStation 4 上玩过它,但我从未在 PC 上购买过它。正如我在 Steam 上购买游戏时通常所做的那样,我查找了一些有关该游戏如何在 Steam Deck 上运行的信息,并且发现了这个 Reddit 帖子。
这款游戏运行得很好,这是我在每周几次 30 分钟的游戏中慢慢爬行时学到的东西,但正是这个帖子上的第一个评论开始了我的痴迷:“《尼尔:机械纪元》是 80 Linux 游戏之所以能像现在这样好,有 % 的原因,也许是 90%。了解 DXVK 的历史。长话短说,一个人对 2B 的热爱是我们今天拥有这些令人难以置信的 DirectX 转换层的原因。”
对于不熟悉的人来说,有很多东西需要解开,但是当我看到这个评论时,我被迷住了。因为评论者是对的——Linux 游戏在过去几年中经历了根本性的转变。过去,DirectX 一直是需要克服的主要障碍。绝大多数 PC 游戏都使用 Microsoft 的 DirectX 应用程序编程接口 (API),您可能会怀疑该接口仅适用于 Windows。游戏向 API 发送指令,API 为您的硬件做好工作准备。鉴于大多数游戏都是为与 DirectX 配合使用而设计的,这意味着您无法在 Linux 上玩它们 — 至少不能在本地玩。
多年来,主要的解决方法是称为 Wine 的兼容性层,但支持的游戏仍然很不稳定。这是由于 Wine 当时的游戏运作方式。它将采用 DirectX 指令并将它们转换为 OpenGL API。它适用于较旧的或要求较低的游戏,但对于利用更复杂的 API 指令的现代游戏来说,性能会受到巨大影响。

直到 2016 年名为 Vulkan 的跨平台 API 面世,Linux 游戏的情况才真正开始发生转变。 Vulkan 由构建 OpenGL 的同一联盟创建,旨在为程序员提供对 GPU 的更多控制 — 类似于 DirectX 12 等。随着游戏变得越来越复杂,像 Vulkan 这样的低级 API 是在以下情况下解锁性能平价的关键:翻译 DirectX 指令。
Valve 多年来一直支持 Linux,但 Vulkan 标志着一个转折点。在 Vulkan 发布前后,Valve 开始致力于支持名为 Proton 的 Linux 游戏,Proton 是一个直接集成到 Steam 中的兼容层。就像那样 — 您可以直接从 Vulkan 和 Proton 划线到 Steam Deck。 “Vulkan 绝对是这个难题的重要组成部分,”Valve 的一位开发人员 Pierre-Loup Griffais 通过电子邮件向我解释道。
但 Valve 并不是独自做到这一点的。事实上,基于公司自身对开源理念的承诺,Proton 将一些开源翻译层捆绑到一个包中。整个东西是建立在 Wine 的基础上的,但对于游戏来说,它使用用于 DirectX 12 的 VKD3D 和用于 OpenGL 的 Zink。不过,有一项关键技术已经开始应用于大部分游戏。
它从 DirectX 11 开始,但现在甚至包括 DirectX 10 和 DirectX 9。该项目的名称是DXVK ,它自我描述为“用于 Direct3D 9/10/11 的基于 Vulkan 的转换层,允许运行 3D 应用程序在 Linux 上使用 Wine。”
自创建以来,它已经吸引了无数的贡献者,但它开始时规模很小。一位名叫菲利普·雷博勒 (Philip Rebohle) 的德国开发人员是策划者,据他说,这是一个充满激情的项目。
尼尔如何改变一切

“在我大学毕业并开始找工作的时候,我就真正开始了这个项目,但一开始它并不只是一个业余爱好项目,”雷博勒告诉我。 “尽管如此,最初的开发还是很快的,我与一个小型 Discord 社区分享了我的进展,该社区又将一些更重要的里程碑转发给了 Phoronix。”
如果您不熟悉,Phoronix 是一个专门提供 Linux 硬件新闻和评论的网站。记住这个名字。
根据 2018 年GamingOnLinux 的采访,Rebohle“一直对图形编程感兴趣”,但主要是修补业余爱好项目,用 Rebohle 自己的话说,“从来没有真正发展成任何有用的东西”。 DXVK 的诞生是因为对 Linux 上的游戏现实感到有些沮丧,但也因为 Rebohle“真的想让一款特定的游戏能够运行”。那款游戏就是《尼尔:机械纪元》。
2018 年初,即 DXVK 首次发布几天后,Rebohle 在GamingOnLinux 论坛上将自己描述为“有点像《尼尔》的粉丝”。不过,雷博勒关心的不仅仅是这款游戏。在与开发者交谈时,很明显《尼尔:机械纪元》提出了独特的挑战。
“《尼尔》这款游戏首先让我开始学习并调试 D3D11 API,最初是因为由于 AMD 驱动程序错误,它甚至无法在我的 RX 480 上的 Windows 上运行,”Rebohle 告诉我。
《尼尔:机械纪元》是一款相当简单的 DirectX 11 游戏,Rebohle 可以轻松地在 Linux 上运行该游戏。 PC 端口在 Windows 上也存在重大问题,其中最重要的是 Rebohle 提到的 AMD 驱动程序错误。但最重要的是,正如雷博勒所说,“这真是一款非常棒的游戏”。
“当它最终开始使用 Wine 的基于 OpenGL 的 D3D 转换在 Linux 上运行时,它有点慢并且渲染不正确,所以我在那里做了一些更认真的调试,并在这个过程中学到了很多东西。之前尝试过 Vulkan,因此在这个过程中诞生了 DXVK 的想法。”Rebohle 说道。
开发工作于 2017 年底开始,但到 2018 年 1 月,Rebohle 和一组贡献者已经在 Linux 上启动并运行了《尼尔:机械纪元》 。 Phoronix 分享了这一消息,不久之后,Rebohle 与 Valve 签订了一份合同,全职从事其开源项目,将 Windows API 转换为 Vulkan。 “这篇文章发表后不久,Valve 的某人就联系我并询问我是否愿意作为承包商全职从事这项工作,”Rebohle 告诉我。
该开发人员至今仍在与 Valve 合作,主要为称为 VKD3D-Proton 的 DirectX 12 转换层做出贡献。
Rebohle 创办了 DXVK,并仍然是首席开发人员,但重要的是要强调为该项目做出贡献的其他开发人员。 GitHub 项目目前列出了 137 名贡献者,可以公平地说,如果没有社区的努力,该项目就不会取得今天的成绩。尽管如此,如果不是《尼尔:机械纪元》,它可能永远不会开始。
“老实说,这很难说,”雷博勒对我说。
Steam Deck 有何特别之处

“天啊。”请原谅我的语言,但说实话,我现在身体在发抖。我不太知道如何处理这个问题。”
这是 GamingOnLinux 主编 Liam Dawe 的回应,他在 2018 年发布的有关 Proton 最初版本的新闻文章中写道。读完这篇文章的 500 多条评论,你可以感受到兴奋和紧张的情绪正在酝酿之中。人们开始认识到:这个利基社区即将成为主流。
仅仅四年后,Steam Deck 就发布了,让 Linux 游戏永远名声大噪。
尽管 Valve 可以在没有 Proton 的情况下建造 Steam Deck,但很难想象它会成功。我怎么知道?嗯,证据之一就是蒸汽机的失败。 Valve 于 2015 年发布了 Steam Machines,它是一款价格实惠、类似游戏机的游戏 PC,运行在 Valve 自己的基于 Linux 的 SteamOS 上。发布半年后,Valve 的 Steam 机器销量不足 50 万台, 有人称该设备“已死在水中”。

对于这次失败有很多可能的解释,但根据 Valve 的说法,其问题之一是在 Linux 游戏真正准备好之前就试图采用它。在接受 IGN 采访时,Valve 设计师 Scott Dalton 表示:“Steam 机器总是存在这种经典的先有鸡还是先有蛋的问题。这引导我们走上了 Proton 的这条道路,现在所有这些游戏都可以实际运行。”
在开发 Steam Deck 的过程中,Valve 不能袖手旁观,希望更多的原生 Linux 移植开始出现,也不能要求开发者专门为其平台创建游戏。 Valve 通过其 Steam Machines 经验看到了这种做法可能会失败的原因。它需要积压的游戏来支持 Steam Deck,而实现该积压的唯一合理方法是为 Linux 提供强大的兼容性层。
显然,Proton 也需要为 Steam Deck 的成功而努力。 Valve 最初于 2018 年 8 月发布了 Proton,比 Steam Deck 发布早了三年半。现在你可以通过 Proton 玩数千款游戏,但当时 Valve 只列出了少数支持的游戏,包括《毁灭战士》、《最终幻想 VI》、《星球大战:前线 2》,当然还有《尼尔:机械纪元》。
从那时起,成千上万的开发人员为 Proton 或其构建的各种基础之一做出了贡献,但不可否认的是 DXVK 是我们今天拥有的 Proton 的关键部分。它用于 DirectX 11、DirectX 10 和 DirectX 9 游戏,即使 DirectX 12 是最新版本,这三个 API 仍然占据了 Steam 上游戏的大部分。
Steam Deck 也不是 DXVK 受影响的唯一硬件。英特尔正在其 Arc GPU 上将 DXVK用于 DirectX 9 游戏,将过时的 DirectX 9 指令转换为更现代的 Vulkan API。
Rebohle 对 DXVK 的意外贡献已成为游戏开发世界的永久固定内容——一幅开源开发实力的美丽图画。
Linux 游戏有一个安全的未来

尽管 DXVK 的起源是一个引人入胜的故事,但这并不是说 Steam Deck 永远不会独立实现。 Valve 的 Griffais 告诉我,他们还有其他项目正在进行中,以使 DirectX 11 正常工作,如果 DXVK 没有出现,“这些其他 DirectX 11 项目中的一个将优先于 Vulkan 项目。”
Valve 显然已经在 DXVK 之前就开始了 Proton 的开发工作,而且很可能还有 Steam Deck 的计划。但这会起作用吗?支持会像今天一样好吗?还要花多长时间?这会对整个 Steam Deck 产生什么影响?当然,还有另一种现实,DXVK 从来都不是 Proton 的一部分,但事实并非如此。 DXVK 已经发展成为 Proton 的基础组件,因此 Steam Deck 和《尼尔:机械纪元》在其中发挥了关键作用。
正如 Griffais 所说,“DXVK 对 Proton 非常重要”,而 Valve“没有计划为 Proton 放弃 DXVK”。
结果是,如今 Linux 游戏的处境与 2018 年初截然不同。未来似乎从未如此光明。它始于一位开发者对《尼尔:机械纪元》的热爱,但此后的努力已经发展成为更大的事情。最后,这就是开源开发如此特别的原因。您永远不知道谁的指纹最终会出现在最终产品中,并帮助塑造技术的未来。