Call of Duty: Warzone Mobile は、人気のコール オブ デューティ シリーズのファースト パーソン アクション ゲームです。非常に人気のあるコンソール ゲームと PC ゲームをモバイルで実現する場合は、モバイルの低レベル API を活用して、優れたプレーヤー エクスペリエンスを提供します。
技術的な観点から見ると、モバイル実装の目標は、幅広い Android モバイル デバイスをサポートすると同時に、コンソール バージョンに可能な限り近い形で実装を維持し、グラフィック パイプラインとツールチェーンが現在のコンソールおよび PC のタイトルおよびコンテンツと互換性を維持することです。
Call of Duty エンジンは、タスクグラフ レンダラと呼ばれるシステムを使用して、レンダリング送信管理の同期、メモリ割り当て、スケジューリングを実装します。このシステムは、GPU で実行する作業を決定し、必要なリソースを指定します。具体的には、このシステムはレンダリング グラフであり、上位レベルのスクリプトで定義されたタスク、リソース、依存関係が定義されています。このレンダリング グラフは、GPU で実行する作業の最適な順序を生成してフレーム送信時に使用されるリソースを提供するために、読み込み時に処理されます。
最新のクロス プラットフォーム 3D グラフィック API である Vulkan が、Android のタスクグラフ レンダラのバックエンド レンダリング インターフェースとして選択されました。
![](https://android-dot-devsite-v2-prod.appspot.com/static/images/cards/distribute/stories/codwzm_figure1.jpg?hl=ja)
Vulkan API のメリット
「Call of Duty」の独特な視覚的スタイルを維持し、「Call of Duty: Warzone Mobile」とコンソールや PC で進行が共有できるようにするため、このゲームでは既存のコンソールや PC の実装と同様のレンダリング API を使用しています。Android では、Vulkan により Activision はソフトウェア スタック全体を全面的に見直すことなく、既存のツール、パイプライン、シェーダーに基づいて構築し、アーティストが作成したコンテンツをサポートできます。
まったく別のレンダラでこれを実現しようとすると、法にかかわるコストがかかり、Call of Duty パイプラインで古い世代のグラフィック API をサポートしようとしても、機能セットに大きく影響します。Activision は、全体的な開発オーバーヘッドへの影響を最小限に抑えながら、すべての機能を Android に導入するには Vulkan が最も適切な選択肢であると判断しました。Vulkan は Android デバイス メーカーの間で重要なサポートを獲得しており、将来の開発にも適しています。
Vulkan 対応のハードウェアやドライバを搭載していないデバイスは一般的に古く、ゲームを実行するための十分な性能を備えていません。したがって、Vulkan はエンジンとコンテンツ パイプラインに技術的に適合するだけでなく、ハードウェア要件としての Vulkan サポートはパフォーマンス フィルタとして機能します。
既存のプラットフォーム API との互換性
Vulkan は、Call of Duty: Warzone で使用される既存の API と概念的に類似しており、明示的なリソース管理、メモリ エイリアス設定、同様のコンピューティング パイプライン、バインドレス リソース アクセスを備えています。この類似性により、Activision はレンダラとコンソールおよび PC レンダラとの構造的な一貫性を維持でき、Vulkan とのインターフェースはバックエンドの変更だけで済みます。
DXC から SPIR-V コンパイルへの完全な機能セットを備えた既存の HLSL ベースのシェーダーがサポートされているため、Android を Activision の既存のビルド パイプラインに統合できます。このプロセスに課題はありませんが、書き換えよりもメリットがあり、複数のバージョンや言語を維持する手間が省けます。
![](https://android-dot-devsite-v2-prod.appspot.com/static/images/cards/distribute/stories/codwzm_figure2.jpg?hl=ja)
![](https://android-dot-devsite-v2-prod.appspot.com/static/images/cards/distribute/stories/codwzm_figure3.jpg?hl=ja)
Call of Duty: Warzone Mobile で使用される Vulkan の機能
- リソース エイリアスと明示的なバリア コントロールにより、レンダリング タスクグラフでは、静的割り当てと比較して、レンダリング ターゲットのメモリ要件を大幅に削減できます。
- 柔軟性により、レンダリング タスクでモバイル フレンドリーな手法をシームレスに利用できます。
- コア機能であるレンダリング パスにより、レンダラは一般的なモバイル GPU アーキテクチャの最適な決定を行うことができます。こうした決定のほとんどは 他のプラットフォームにもメリットをもたらします
- 動的シーン解像度はタスクグラフでデフォルトでサポートされており、パフォーマンスと消費電力をある程度制御できます。
- 広範なコンピューティング ベースのカリングを備えた完全な GPU パイプラインにより、シーンの複雑さが大幅に増加します。
- タイルベースの遅延レンダラのターゲティングを考慮して選別粒度のバランスを取る。
- ボトルネックは、三角形の数ではなく、複雑なコンピューティング ワークロードです。
- GPU パイプラインは、さまざまなシナリオを念頭に置いて設計されています。
- 選別粒度を変更するオプション。
- 非常に大きな記述子セットにより、互換性のあるハードウェアで完全なバインドレス レンダリングが可能になり、それによって CPU 描画呼び出しの作成コストが大幅に削減され、関連するパフォーマンス、電力、温度のメリットが得られます。
- HW コンフィギュレータを使用すると、特定のデバイスモデルに基づいて忠実度設定を調整して、最適なユーザー エクスペリエンスを実現できます。
- ユーザーによる設定モード(最高のパフォーマンス、最高品質、またはバッテリー節約)。
- デバイス固有のシェーダー セット設計では、GPU プリセット(品質と忠実度の設定)ごとに異なるシェーダー セットが用意されています。HW コンフィギュレータにより、ゲームがデバイスに最適なシェーダーを選択できるようになります。
- パイプライン オブジェクトの作成の要件とともに、高度に構成可能なシェーダーの組み合わせの爆発的な増加を減らすことができます。
- サポートしているシェーダー リソースが少ない古いスマートフォンとドライバを対象とするフォールバック非バインド シェーダー セットが含まれています。
- ドライバの違いに対応するための特殊定数のスマートな使用。
- ドライバにおけるシェーダー コンパイラのバグのほとんどは、特殊定数を使用することで回避できます。
- デバイス固有のシェーダー セットの数とバランスを取ります。
![](https://android-dot-devsite-v2-prod.appspot.com/static/images/cards/distribute/stories/codwzm_figure4.jpg?hl=ja)
プロファイリングとデバッグ
Activision は開発初期の段階で、Vulkan のプロファイリング ツールとデバッグツールで安定性と機能の多くのギャップを発見しました。それ以来、ベンダー固有のプロファイラや、RenderDoc などのベンダーに依存しないツールは着実に改善されてきました。これにより、デベロッパーはレンダリングの問題と最適化の機会をより自信を持って絞り込むことができます。
Vulkan による高忠実度
Call of Duty: Warzone Mobile は、コンソールや PC 向けのタイトルと同じレンダリング技術を使用して、さまざまな Vulkan 対応 Android デバイスで動作します。Vulkan により開発のオーバーヘッドと負担が軽減され、忠実かつ忠実な Call of Duty コンテンツとゲームプレイを Android プレーヤーに配信できるようになりました。