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