DirectX 12 是在 2015 年与 Windows 10 一起发布的。随着它的发布,微软的 DirectX 12 为游戏玩家和游戏开发者开创了一个新时代。DirectX 12 能够减少 CPU 的开销,同时提高 GPU 的性能,很快 DirectX 12 就获得了大量的关注。
然而,提高计算机的性能真的像从 DirectX 11 切换到 DirectX 12 那么简单吗?让我们通过看看 DirectX 11 和 12 之间的差异来了解一下。
什么是微软的 DirectX?
正如我们在对微软 DirectX 的概述中所解释的那样,DirectX 是一个用于处理与多媒体有关的任务的 API 集合。这包括在基于微软的平台上的游戏编程,如 Windows 和 Xbox。为了提供一些背景,让我们简要地谈谈 API。
应用程序编程接口(API)使两个或更多的计算机程序有可能相互通信。把它想象成一部电话。如果你朋友给你发了一条带有杂货清单的短信,你的手机就会接收这些数据并为你显示。这基本上就是一个 API。
DirectX 11 和 DirectX 12 之间的区别是什么?
那么,DirectX 11 和 DirectX 12 之间有什么区别?简单地说,DirectX 12 是 DirectX 的最新版本。两者之间最明显的区别之一是它们如何与你的硬件互动。大多数用 DirectX 11 开发的游戏只利用两到四个 CPU 核心。其中一个核心通常是专门用来告诉显卡做什么的。
然后,游戏使用剩余的核心来处理各种 CPU 密集型设置,如游戏的粒子或绘制距离。另一方面,DirectX 12 将 CPU 的工作负荷分散到多个核心,并允许每个核心同时与显卡对话。
DirectX 12 还带有一些花哨的铃声和口哨。这包括异步计算和管道状态对象(PSO)。异步计算通过允许多个工作负载并行工作来提高显卡利用率。这从本质上释放了你的显卡的全部潜力。
除了图形渲染,你的显卡还负责处理广泛的其他任务,如运行机器学习算法。有了 DirectX 11,显卡一次只能按照一定的顺序执行这些任务中的一项。当这种情况发生时,性能会受到打击,因为你所有的显卡资源都没有被使用。
把它想象成餐厅的服务员。当服务员第一次接受你的订单时,他们会问你想先喝什么。一旦你收到饮料,他们会问你想吃什么主菜。你的订单是分步骤进行的。服务员不会在你吃完主菜之前问你想吃什么甜点。虽然这很有效,但它并不像它可以做到的那样高效。
在计算中,服务员的每项任务都将由不同的显卡资源处理。在你收到你的饮料之前,接受你的主菜订单所需的显卡资源将被闲置。有了 DirectX 12 的异步计算,服务员将能够像在快餐连锁店一样一次性地接受你的订单。这可以最大限度地提高显卡的使用率,并提高你的游戏性能。
DirectX 12 还引入了 PSO。在 DirectX 11 中,当一个游戏的几何图形被提交给显卡进行渲染时,各种硬件设置负责解释和渲染这些数据。这被称为图形管道,是显卡渲染帧时发生的数据输入和输出的流程。然而,DirectX 11 的图形管线并不完美。
这个管道包含不同状态的集合,包括光栅化状态、混合状态和深度模版状态,以及其他组件。在 DirectX 11 中,这些不同的状态之间存在着依赖关系。因此,在前一个状态被定义之前,一个状态不能被完成。这降低了显卡的利用率,并以性能为代价增加了 CPU 的开销。
为了解决这个问题,DirectX 12 引入了 PSO,它是描述整个图形管道状态的对象。PSO 就像一个瓶子,包含了创建图像所需的各种状态和组件。这使得 GPU 可以预先处理每一个依赖的状态,而不是根据当前的图形管道不断地重新计算状态。
这大大减少了 DirectX 11 中的 CPU 开销,提高了性能。那么,这种差异实际上是什么样子的?嗯,根据微软的说法,DirectX 12 将 CPU 开销减少了 50%,并将 GPU 性能提高了 20% 之多。虽然这些是一些实质性的改进,但这并不意味着你会看到同样的结果。
从 DirextX 11 切换到 DirectX 12 并不顺利
DirectX 11 在 2009 年 10 月 27 日首次为 Windows Vista 发布。因此,随着 DirectX 12 在 2015 年的发布,在 DirectX 11 和 DirectX 12 之间有六年的差距。在这段时间里,成千上万的游戏都是使用 DirectX 11 开发的。不幸的是,从 DirectX 11 转移到 DirectX 12 并不容易。
DirectX 11 是所谓的高级别 API。简单地说,高级别 API 对开发者来说更容易工作。其结果是稳定的和可玩的游戏。另一方面,DirectX 12 是一个低级别的 API,与 DirectX 11 相比是一个不同的对比。虽然它允许开发者在细微的层面上进行微调优化,但它也需要大量的知识来使用。
也就是说,用 DirectX 12 开发的游戏最终可能会有更差的性能,这取决于开发者对 API 的了解。DirectX 12 有一些改进,但它真正归结为一个开发者能够多好地实现它。出于这个原因,很多开发者选择坚持使用像 DirectX 11 这样的高级 API。
你应该选择 DirectX 11 还是 DirectX 12?
答案取决于一些事情,比如你想运行什么游戏。例如,《激战2》在 DirectX 11 上运行。即使你的操作系统和硬件使用 DirectX 12,你也不能在《激战2》中选择 DirectX 11,因为该游戏不支持它。这完全是开发商 ArenaNet 的决定。
ArenaNet 花了九年时间才从 DirectX 9 转换到 DirectX 11。然而,有一些游戏确实同时支持 DirectX 11 和 DirectX 12。例如,《堡垒之夜》。通过游戏的设置,用户可以在两个版本之间切换。总而言之,不是每个游戏都同时支持 DirectX 11 和 DirectX 12。对于那些支持的游戏,可以在两者之间切换,自己决定哪一个在你的电脑上表现得更好。
你是否可以在 DirectX 11 和 DirectX 12之间进行选择,也将取决于你的硬件。几乎所有的现代显卡都会支持 DirectX 12,但对于像 Radeon HD 4870 这样的老式显卡来说,情况就不是这样了。2008 年发布的这款显卡只支持 DirectX 10,这意味着它无法运行大多数现代游戏,这些游戏使用 DirectX 11 和 DirectX 12 运行。
DirectX 12 是你的正确选择吗?
总而言之,从 DirectX 11 切换到 DirectX 12 并不像它听起来那样黑白分明。它取决于各种因素,如硬件、软件、操作系统,以及一个游戏是否支持这两个因素。所有这些都需要在做出决定之前加以考虑,这对于未来几代的 DirectX 也可能是如此。