【新闻资讯】工作室更新:《激战2》即将支持DirectX11

鸣谢

本文由和风议会翻译组翻译,由和风议会小风筝阿离空岛日记等编辑。

本文部分内容转载自美服官网,论坛,wiki,Reddit等相关资讯站点。

本文所使用的部分译名为战火互娱所提供的官方译名,如转载请标注和风议会搬运。

大家好,我是《激战2》团队的高级引擎程序员James Fulop。在激战2项目中,对DirectX11的支持是一个我们酝酿已久的工程。那么在这篇小文章当中,我将回顾一下为了确定该项目的具体面貌而做出的高端技术决议、对于图形运行的一点纵览,还会简单介绍一下DirectX11将会如何影响图形效果。

测试版将于 2021 年 9 月 21 日开始。届时玩家们可以在游戏中的图形选项菜单中选择加入测试版。更改在重新启动游戏后生效。

那么为什么我们首先决定升级到 DirectX11?客户端性能是我们的首要任务,我们希望每个人都能够以尽可能高的帧率进行游戏。但是在当前的引擎中,我们发现有时游戏可能会停止以等待渲染工作完成。而现在已经是《激战2》上线的第9个年头,实现一些依赖于DirectX11 的功能可以帮助游戏在今后的版本迭代中继续保持画面上的优异表现。

DirectX11 还提供了一些 DirectX9 无法支持的先进技术选项。升级到 DirectX11 是迈向更多突破的第一步。 经过仔细研究,我们决定将开源渲染库 BGFX 集成到激战 2 中。BGFX 编写得很好,支持各种图形后端,并且已经在行业范围内的许多游戏中使用。大家可以在他们的官方网站上了解更多信息。

随着计算机行业图形生态系统的不断发展,BGFX使我们这些渲染工程师能够作为一个统一的社区一起工作,而不是各自蹲在工作室里闭门造车。ArenaNet已经,并将继续为 BGFX的发展做出贡献。

我们之所以选择使用DirectX11而不是DirectX12或Vulkan,是因为我们发现,如果我们把DirectX11的实现切换到BGFX,它将会提供可观的性能提升,使得图形后端不再是客户端性能的限制因素。 DirectX11非常稳定,迄今为止已经被数千款游戏使用了近十年。它使我们能够为 Windows Vista 提供支持,而相对地,对Vulkan的支持从Windows 7开始,而对DirectX12的支持则仅仅从Windows 10开始。就图形功能而言,从DirectX9跳转到DirectX11为我们提供了很多选择的空间,来在今后的数年中为我们的引擎增添许多有趣的新功能。并且,支持多个后端会增加QA方面的工作,而且几乎没有什么切实的好处。

当前的DirectX9渲染器没有任何重大改变。我在构建它时的理念之一是让DirectX11渲染器看起来与DirectX9相同。如果我同时对两者进行更改,我们就无法形成一个准确的期望。最终,随着新渲染器变得稳定,DirectX9渲染器将被弃用和移除。

帧率大跳水

现在我想聊聊DirectX11渲染器是如何影响游戏性能的。从基本要素开始,视频游戏就像电影一样,呈现在玩家面前的,是一组快速变化的静止图像。我们称每个静止图像为一个“帧”。这个过程就是术语“每秒帧数”(FPS) 的来源。FPS越高,动作看起来就越流畅,直到达到显示器的物理极限。这个不断响应输入(键盘和鼠标)并生成帧的过程就是游戏循环。

接下来是游戏循环的一些时间线可视化。如图所示,这是我使用图形预设中“最佳效果”选项,在狮子拱门的这个位置获取的所有数据。之所以会选择了这个地方,是因为这边需要渲染的东西比较多,几乎囊括了整个主城。然后正如各位所见,我们用于实时映射的技术基本上是从上到下把世界再次渲染了一遍。

对了,我进行测试时使用的是Intel I7-6700 的CPU和Nvidia 1080 的GPU。

以上是我们使用的可视化工具Telemetry的屏幕截图。该工具由RAD Game Tools开发,实现了游戏在CPU内核中运行状况的可视化。在图中,时间以横向的长度表示。它显示了游戏中的两种逻辑帧。

(为了清晰起见,我将一些标识符进行了模糊处理。)

每个横行代表着一个逻辑线程。在这里你可以看到我有六个工作线程。我们会根据玩家的CPU能够支持的线程数调整工作线程的数量。我手里有一个支持8个硬件线程的芯片,所以游戏将它们划分为一个游戏线程、一个渲染线程和六个工作线程。请注意,激战2中也有其他线程在运行,我没有在这里显示出来。这些线程不是特别占用 CPU,所以在这里忽略不计。

在各线程中的这些大大小小的方块代表着正在运行的工作。当线程显示为空时,这意味着它处于空闲状态并且不做任何游戏工作。在这些空间中,硬件线程可能会从您机器上的其他应用程序中获取工作。


逻辑帧是我们考虑重新启动游戏循环的地方。图中的竖线表示逻辑帧开始的位置。也是在这个位置,游戏开始检测硬件输入(如键盘/鼠标)。

这是图形帧循环的地方。由于游戏帧的开始不做任何渲染,我们让上一帧的一些工作溢出到下一帧,这样我们就可以并行做尽可能多的工作。在某些时候,你必须等待最后一帧刷新,以便你可以开始提交下一帧的工作。在这里,你可能已经注意到主线程上的红色工作块,它与渲染线程上结束的一些工作对齐。这是我们想要消除的。游戏线程永远不必等待渲染工作完成。

另:主线程上还有一些其他小得多的红色块。那是等待作业线程工作完成的主线程。

在这里,我们为要执行的渲染线程构建了详细的指令列表。当生成了一个通用渲染工作块时,它会被移交给渲染线程。


渲染线程将渲染工作转换为每个图形后端(OpenGL 或 DX9)的细节。

DX11 Beta 渲染器的游戏帧情况

以下是新渲染器在分析器中的图样。

线程的布局是相同的。

主线程不必再等待渲染线程完成!这是因为 BGFX 的架构方式。绘制调用将在游戏线程上收集。(在工作线程上也是如此,我们会谈到这一点)。然后当一帧结束时,BGFX会在其渲染线程上处理这些调用。现在我们有很大的绘图空间!

从我们排队的渲染数据到BGFX调用的转换是在两个跨作业的线程中并行发生的。

就是这样!这对我来说是非常有趣的项目。也正因为如此,我对《激战2》的技术前景可是充满期待捏!也欢迎大家在论坛上分享有关DirectX11的测试情况!

我们泰瑞亚见!

James Fulop

查攻略 看资讯 赏同人 尽在和风议会

玩家交流1群:638576890

玩家交流2群:783145339

扫描二维码 关注和风议会