使命召唤:战争地带移动版是广受欢迎的《使命召唤》系列中的第一人称动作游戏。超受欢迎的主机和 PC 游戏的移动实现利用低层级移动 API 来提供出色的玩家体验。
从技术角度来看,移动实现的目标是支持各种 Android 移动设备,同时尽可能使实现与主机版本保持一致,并确保图形管道和工具链与当前的主机和 PC 游戏及内容保持兼容。
Call of Duty 引擎使用名为任务图渲染程序的系统实现渲染提交管理的同步、内存分配和调度,该系统确定在 GPU 上执行的工作并指定所需资源。更具体地说,系统是一个渲染图,其中包含在高级别脚本中定义的任务、资源和依赖项,该脚本在加载时进行处理,以生成要在 GPU 上执行的工作的最优排序,并提供帧提交时所使用的资源。
Vulkan 是一种现代跨平台 3D 图形 API,已被选作 Android 上的任务图表渲染程序的后端渲染接口。
Vulkan API 的优势
为了保持《使命召唤》的独特视觉风格,并更好地支持《使命召唤:战争地带移动版》及其主机版和 PC 版游戏之间的共同推进,该游戏使用了与现有主机和 PC 实现类似的渲染 API。在 Android 上,Vulkan 使 Activision 能够在其现有的工具、流水线和着色器上进行构建,并支持音乐人创作的内容,而无需彻底修饰整个软件堆栈。
尝试使用完全不同的渲染程序实现这一目标的代价非常高昂,而且尝试为 Call of Duty 管道支持旧版图形 API 会对功能集产生很大的影响。Activision 确定 Vulkan 是为 Android 引入完整功能同时最大限度减少对整体开发开销的影响的最佳选择。Vulkan 在 Android 设备制造商中获得了显著的支持,这使得该 API 也成为未来的开发理想之选。
缺少支持 Vulkan 的硬件或驱动程序的设备通常较旧,性能不足以运行游戏。因此,除了 Vulkan 在技术上适合引擎和内容流水线之外,Vulkan 支持作为一项硬件要求还可用作性能过滤器。
与现有平台 API 的兼容性
Vulkan 在概念上类似于《使命召唤:战争地带》所使用的现有 API,具有显式资源管理、内存别名、类似的计算流水线和无绑定资源访问。得益于这些相似之处,Activision 可确保渲染程序在结构上与控制台和 PC 渲染程序保持一致,只需更改后端即可与 Vulkan 接口。
通过支持基于 HLSL 的现有着色器(具有使用 DXC 到 SPIR-V 编译的完整功能集),Android 可以集成到 Activision 的现有构建流水线。此过程并非没有挑战,但仍然比重写和维护多个版本或语言产生的开销更有益。
《使命召唤:战争地带》移动应用中使用的 Vulkan 功能
- 与静态分配相比,资源别名和显式屏障控制使渲染任务图显著降低渲染目标的内存要求。
- 具有大量基于计算的剔除功能的完整 GPU 流水线可以大幅增加场景复杂性。
- 平衡剔除粒度以考虑定位基于功能块的延迟渲染程序。
- 瓶颈是复杂的计算工作负载,而不是三角形计数。
- GPU 流水线在设计时考虑了不同的场景。
- 用于更改剔除粒度的选项。
- 非常较大的描述符集可以在兼容硬件上实现完全无绑定渲染,从而大大降低 CPU 绘制调用创建成本,并带来相关的性能、功耗和散热优势。
- 硬件配置程序支持根据特定设备型号调整保真度设置,以提供最佳用户体验
- 用户可以配置模式:最佳性能、最佳画质或省电模式。
- 设备专用的着色器集设计,为不同的 GPU 预设(质量和保真度设置)提供不同的着色器集。硬件配置器可帮助游戏为设备选择最佳着色器集。
- 根据创建流水线对象的要求,帮助减少高度可配置的着色器的组合爆发。
- 包含回退非绑定着色器集,以针对不支持过多着色器资源的旧款手机和驱动程序。
- 智能使用特化常量来解决驱动程序差异。
- 驱动程序中的大多数着色器编译器 bug 都通过使用特化常量得到解决。
- 应根据设备专用着色器集的数量进行平衡。
性能分析和调试
在开发的早期,Activision 发现 Vulkan 性能剖析和调试工具在稳定性和功能方面存在许多不足。从那以后,我们对特定于供应商的分析器和与供应商无关的工具(如 RenderDoc)得到了不断改进。现在,开发者可以更自信地缩小呈现问题和优化机会的范围。
通过 Vulkan 实现高保真
《使命召唤:战争地带》手游可在各种支持 Vulkan 的 Android 设备上运行,该技术采用与主机游戏和 PC 游戏共用的渲染技术。Vulkan 降低了开发开销和摩擦力,得以向 Android 玩家提供真实、高保真度的《使命召唤》内容和游戏内容。