对于游戏玩家和开发者来说 directx12意味着什么
彼得“杜兰特”托曼是个人电脑下采样工具Geo Sato和黑暗灵魂DSfix背后的调制器的创造者。 他以前分析过瓦尔基里亚志、黑暗灵魂2、巫师3等的PC端口。 这篇文章最近更新了关于第一个DX12游戏的新信息。
Windows10的发布标志着广大的个人电脑游戏公众首次获得了一个低级别、跨供应商的图形API。 自从AMD在2013年首次推出Mantle以来,就有很多关于低级API对游戏的真正意义的讨论。 人们的看法从认为它只不过是图形处理的一场革命,到仅仅是一场过度的营销活动。 本文旨在提供一个冷静的展望,确切地说,DirectX12将为玩家提供什么,在哪种情况下,以及何时我们将看到这些收益。
第一个开放GL1.0示例应用程序之一,1995年。
为了不仅解释什么,而且解释为什么,我将详细说明各种API设计决策所涉及的权衡,以及导致当前艺术状态的历史增长。 这将得到技术。 很技术性的。 如果您主要有兴趣了解这些变化将如何影响您作为游戏玩家,以及您可以期望从现在和不久的将来升级到Windows10,那么跳转到最后一节,这涉及到重要的点,而不需要深潜。
本文不涉及的是在DirectX12中暴露的少数新图形硬件管道特性。 每一个新版本的API都增加了对少量硬件特性的支持,例如,您可以在DX12功能级图形硬件上更有效地实现与订单无关的透明度,这一事实与高/低级别API权衡讨论是正交的。 对于不想切换到DX12的开发人员,这些特性实际上也被添加到DX11.3中,进一步支持了这种分离。 期望这些硬件功能在未来几年变得重要,但对Direct3D12游戏的第一波影响最小。
第1页:图形API的介绍-第2页:DX12和低级API是如何工作的-第3页:直接X12对玩家意味着什么?
在我们详细了解DirectX12中的哪些变化之前,需要建立一些基础知识。 首先,什么是3DAPI,真的吗? 当3D加速器硬件第一次出现在市场上时,需要为程序员提供一个接口来利用其功能-一个应用程序编程接口,可以说。 虽然由3dfxInteractive开发的特定于供应商的GlideAPI设法保持了一段时间的基础,但也很明显,市场的持续增长将需要一个与硬件无关的抽象接口。 此接口由OpenGL和DirectX提供。
与现在相比,当时的GPU是相当简单的设备。 最后,API只需要允许开发人员将纹理(也许是点亮的)三角形呈现到屏幕上,因为硬件就是这样做的。 自那时以来,硬件能力迅速发展,API逐渐被调整以跟上,在这里和那里的整个管道阶段增加了大量的功能。 这并不是说以前没有显著的API端变化-开关完全远离直接模式几何生成的开放GL和直接X是非常重要的,例如。
尽管如此,PC上的高级API仍然遵循保护程序员不担心硬件级细节的基本原则。 这可能是一个方便的特性,但有时完全理解硬件中正在发生的事情-这是低级别API的中心原理-可能对性能至关重要。
低级API是对3D编程的一个很大的改变,它们的引入需要平台提供商和硬件供应商以及游戏和中间件开发人员的主要设计和工程努力。 大约20年来,高级别API在PC上“足够好”,以推动3D渲染,就像其他平台没有做过的那样。 那么,为什么现在要进行这项努力呢? 我认为,原因是几个不同的事态发展的结合,这些事态发展现在一起超过了实施这一变化所需的努力。
一个主要的驱动程序当然是硬件开发,无论是在GPU上,还是在CPU方面的东西上。 考虑CPU硬件的变化会导致图形API的剧变,这可能是违反直觉的,但由于API充当了运行在CPU上的程序与GPU的渲染能力之间的桥梁,这并不奇怪。
如前所述,从90年代初开始,高水平的API在大约20年的图形开发中似乎足够好。 上面的图表说明了高端桌面CPU在同一时间段的浮点性能,并应该给你一个想法,为什么CPU性能的影响和并行化的图形API没有站在他们的设计师的思想在90年代和00年代早期。 蓝色描述并行性能,而纯顺序性能则以橙色表示。 直到2004年,两者都处于停滞阶段,但最近连续业绩的增长已经大大放缓。 因此,改变API景观的一个重要目标是改进并行化。
然而,虽然CPU顺序性能增长的严重放缓可能是这些API变化的最重要驱动因素,但现代GPU也与我们在90年代使用的设备有着根本的不同。 它们对各种各样的数据进行任意计算,自行创建几何,而不仅仅是处理输入流,并在惊人数量的级别上利用并行性。 所有这些变化都可以(并且已经)固定在现有的API上,但不是没有一些越来越严重的语义不匹配。
虽然方程的硬件方面可以说是最重要的,当然也是最常见的,但还有另一组理由可以与现有的图形API进行干净的突破,而且它完全与软件有关。 每个PC游戏玩家都应该熟悉这一系列事件:一个新的高度期待的AAA游戏被发布,同时两个相关的GPU供应商发布新的驱动程序“优化”的标题。 这些可能要快得多,甚至可能是游戏工作所必需的。
这不是因为游戏开发人员或驱动工程师不称职。 这是由于现代高级图形API在多年的增量变化之后所达到的纯粹尺寸,以及图形驱动程序更加惊人的复杂性,它们需要以某种方式将这些抽象的API分解成GPU硬件能够理解和有效执行的指令流。 简化驱动责任似乎能有效地提高他们的可靠性-熟悉这两种情况的开发人员声称,DX12驱动程序的状态已经远远优于DX11驱动程序,尽管API施加了更大的变化,但它们在开发时间表中处于类似的时刻。
拥有这样一个可怕的驱动程序代码库不仅对GPU供应商来说是困难的:它还使开发人员自己诊断错误或性能问题更具挑战性-有时甚至几乎不可能。 实际游戏代码库中的所有内容都可以被调查和推理使用传统的开发工具,但只有硬件供应商才能确定API墙后面发生了什么。
如果驱动程序决定每隔几秒花很多时间重建一些数据结构,引入口吃,那么逆转设计游戏代码的哪一部分-这是开发人员唯一控制的-几乎是不可能的。 如上所述,通过将更多的责任转移到游戏代码中,使API和驱动程序更小、更轻,将使开发人员能够更完整地了解在所有情况下发生的事情。
在下一页:像DirectX12这样的低级API实际上是如何工作的。