有什么区别以及您应该使用哪个?

DirectX 12 的诞生与意义

2015年,随着Windows 10的发布,DirectX 12也随之问世。它的到来,标志着微软DirectX为游戏玩家和游戏开发者开启了一个崭新的时代。DirectX 12 凭借其降低CPU开销、同时提升GPU性能的优势,迅速赢得了广泛的认可。

然而,性能的提升真的仅仅像从DirectX 11切换到DirectX 12那样简单吗?让我们深入探讨DirectX 11和12之间的差异,以便找出答案。

微软的DirectX是什么?

正如我们在关于Microsoft DirectX的概述中解释的那样,DirectX是一系列应用程序编程接口(API)的集合,用于处理与多媒体相关的任务。这包括在基于微软的平台(如Windows和Xbox)上的游戏编程。为了提供一些背景知识,我们简要地讨论一下API。

API使得两个或多个计算机程序能够相互通信,这一点我们在API概述中已经讨论过。可以把它想象成一部电话。如果你的母亲通过短信给你发送购物清单,你的手机将会接收到这些数据并展示给你。这本质上就是一个API在工作。

DirectX 11和DirectX 12之间有哪些不同?

那么,DirectX 11和DirectX 12之间究竟有哪些区别呢?简而言之,DirectX 12是DirectX的最新版本。它们之间最显著的区别之一在于它们与硬件的交互方式。大多数使用DirectX 11开发的游戏仅利用两到四个CPU核心。其中一个核心通常负责指示GPU执行任务。

随后,游戏利用剩余的核心来处理各种CPU密集型的设置,例如游戏的粒子效果或者渲染距离。与之不同的是,DirectX 12将CPU的工作负载分散到多个核心上,并允许每个核心同时与GPU进行通信。

DirectX 12还引入了一些强大的新特性。这包括异步计算和管道状态对象(PSO)。异步计算允许多个工作负载并行执行,从而提高GPU的利用率。这实际上释放了GPU的全部潜力。

除了图形渲染之外,你的GPU还可以处理各种其他任务,例如运行机器学习算法。在使用DirectX 11时,GPU一次只能按照特定的顺序执行其中一个任务。当这种情况发生时,由于你的GPU资源没有得到有效利用,性能将会受到影响。

可以把这种情况想象成餐厅里的服务员。当服务员点餐时,他们会先询问你想喝什么。一旦你收到饮料,他们才会问你主菜想要什么。你的订单将逐步进行。在你吃主菜之前,服务员不会询问你想要什么甜点。虽然这种方式有效,但效率并非最高。

在计算机运算中,不同的GPU资源将处理每个服务员的任务。在你收到饮料之前,点主菜所需的GPU资源将会处于闲置状态。借助DirectX 12的异步计算,服务员可以一次性接受你的所有订单,就像在快餐连锁店一样。这样可以最大限度地提高GPU的利用率并提升游戏性能。

DirectX 12还引入了管道状态对象(PSO)。在使用DirectX 11时,当游戏的几何图形提交给GPU进行渲染时,各种硬件设置负责解释和渲染这些数据。这被称为图形管道,以及GPU渲染帧时发生的数据输入和输出流。然而,DirectX 11的图形管道并非完美。

该管道包含不同状态的集合,包括光栅化状态、混合状态和深度模板状态等组件。在DirectX 11中,这些不同的状态之间存在依赖关系。因此,在定义前一个状态之前,一个状态无法完成。这会降低GPU的利用率并增加CPU的开销,从而牺牲了性能。

为了解决这个问题,DirectX 12引入了PSO,它是一个描述整个图形管道状态的对象。PSO就像一个瓶子,其中包含了创建图像所需的各种状态和组件。这允许GPU预先处理每个相关状态,而不是根据当前的图形管道不断重新计算状态。

这显著降低了DirectX 11中的CPU开销并提高了性能。那么,这种差异具体体现在哪些方面呢?根据微软的说法,DirectX 12可以将CPU的开销降低多达50%,并将GPU的性能提高多达20%。虽然这些都是相当可观的改进,但这并不意味着你会看到完全相同的结果。

为什么从DirectX 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不同。虽然它允许开发者在细粒度级别上进行微调优化,但也需要丰富的知识才能使用。

话虽如此,根据开发者对API的理解程度,使用DirectX 12开发的游戏最终可能会出现较差的性能。虽然DirectX 12带来了一些改进,但实际上这取决于开发者如何实现它。因此,许多开发者选择坚持使用DirectX 11等高级API。

DX 11与DX 12:你该如何选择?

答案取决于多个因素,例如你想运行什么游戏。例如,《激战2》是基于DirectX 11运行的。即使你的操作系统和硬件可以使用DirectX 12,在《激战2》中也无法选择DirectX 12,因为游戏本身并不支持它。这完全是开发商ArenaNet的决定。

图片来源:马丁·克斯坦/激战2

无论你是否相信,ArenaNet花费了九年时间才从DirectX 9切换到DirectX 11。不过,有些游戏确实同时支持DirectX 11和DirectX 12,包括《堡垒之夜》(请阅读我们的《堡垒之夜》备忘录)、《战地5》、《古墓丽影:暗影》等等。用户可以在游戏设置中切换DirectX 11和DirectX 12。

现在,有些游戏同时支持DirectX 11和12这一事实,可能会让你对游戏中的性能产生好奇。选择DX 11或者DX 12是否能够带来更好的游戏性能?下面的视频展示了DirectX 11和DirectX 12在一系列游戏中的差异,其中展示了诸如平均每秒帧数、CPU利用率、GPU利用率等重要参数,使用的硬件包括AMD Ryzen 3600、Nvidia GeForce RTX 3060 Ti和16GB DDR4内存。

结果在很多方面都令人惊讶,尽管DX 11和DX 12发布的时间相隔多年,但它们有时几乎没有视觉上的差异。你可能还会注意到两个DirectX版本之间GPU和CPU负载的差异,通常情况下,每个游戏的DX 12版本所需要的资源比旧版本的DX 11更少。

除了游戏内的支持外,在DirectX 11和DirectX 12之间进行选择还取决于你的硬件。几乎所有现代GPU都将支持DirectX 12,但对于像Radeon HD 4870这样较旧的GPU来说,情况就不一样了。这款GPU发布于2008年,最多只支持DirectX 10。这意味着它将无法运行大多数现代GPU使用DirectX 11和DirectX 12运行的游戏。

DirectX 12是你的正确选择吗?

总而言之,从DirectX 11切换到DirectX 12并非像听起来那么简单明了。这取决于多种因素,例如你的硬件、软件、操作系统以及游戏是否同时支持两者。在做出决定之前,需要考虑所有这些因素,对于下一代的DirectX也可能会是如此。