Case Studies

Epic Games

网格计算与游戏开发:Epic Games 如何集众力强势推进编译进程

摘要

Epic Games 的虚幻引擎3(Unreal® Engine 3)是当今许多领先电子游戏的助推技术。本文说明了 Epic 如何将 Incredibuild 网格计算解决方案集成到虚幻引擎3中,从而实现巨大成功,让该公司以及其他获得此技术授权的公司大受裨益。

难点

虚幻引擎3包含超过200万行代码,所有代码都能够以不同的配置面向多种所支持的平台进行编译。冗长的编译工作越来越多地占用着程序员的时间,同时程序员在代码崩溃修复方面耗费的时间也越来越多。其挑战在于,要改善程序员的迭代时间,并实现代码验证测试系统自动化。

在超快速超高端8核/16线程机器上,在发布模式下,虚幻开发工具包 (UDK) 的32 位 Windows 编译耗时不到三分钟。这听起来似乎并不太差,但如果考虑到它要服务类型众多的平台和配置,更别提全球有无数程序员在给定时间同时在开发基于虚幻引擎3授权的游戏,那么即便是微小的编译时间增加,也可能产生巨大的影响,导致人力和财力方面压力剧增。

在未采用 Incredibuild 的时候,它有意识地提高编译速度的唯一选择是,增加系统中的代码编译核数。如果某些文件看起来太长而不适合编译(比如,由于缺乏可用的核),就会出现典型的序列化问题,生产效率将受到严重影响。这一方案为 Epic 带来的最终编译速度提升完全无法与 Incredibuild 相比,后者能够跨整个机器网络有效地提供对大量核心的访问。

解决方案

Epic 所需的解决方案不仅要能够加快面向具体平台和配置的本地编译,而且还要能够同时跨多个平台和配置并行开展编译过程,从而利用虚幻引擎多平台代码库的共享性质。而且,这套解决方案还必须让所有虚幻引擎3被许可人受益。Xoreax 的 Incredibuild 解决方案成功应对了上述挑战。得益于 Incredibuild,Epic不再依赖于增加各单元设备上运行的核心数,而是能够即时访问跨整个机器网络工作的众多核心。

Incredibuild 集成顺畅,效果立显。

现在,Epic 针对在 PC 上编译的所有平台,直接使用其编译系统 (UnrealBuildTool (UBT)) 使用 Incredibuild。开发人员一开始就在UBT中创建依赖性图,并生成包含编译所需的命令行的 Incredibuild 控制文件。之后便由 Incredibuild 接管,它使用XML文件在整个工作室的数以百计的系统之间分配编译工作。

好处

Incredibuild 对程序员的编译等待时间有着直接性影响,让他们能够跨工作室中超过200套多核系统同时开展海量编译。下图详细显示了在采用和不采用 Incredibuild 的情况下各多核系统上的编译时间差异。

采用 Incredibuild 时,在发布模式下,前述提及的UDK的32 位Windows编译时间缩减至1:37分钟。这有什么实际收益呢?Epic能够同时在所有平台和配置上编译游戏,并且得益于利用 Incredibuild 实现的近乎完美的并行操作,能够在创纪录的时间内完成这种编译。

Epic的UBT还包含智能源合并技术,它能够在引擎的全面重新编译过程中极大改善编译时间。但为了在单个源文件的快速迭代期间确保最佳的编译性能,实际上可能需要临时禁用此功能。无论是以上哪种情况,Incredibuild 都能够显著加快编译进程,如下图所示。

总结

利用 Incredibuild,Epic 能够大幅加快其编译进程,加速测试,让开发人员能够专注于开发,而不是浪费时间等待编译。考虑到全球有大量虚幻引擎3被许可人,这种方法通过直接在引擎中实施 Incredibuild,在整个项目开发期间实现的人均时间节省达到数年(而不仅仅是数天或数小时)的时间。

UDK 32 位 Windows 构建
3分钟Without Incredibuild
1.6分钟With Incredibuild