VALORANT の基盤を支える Unreal Engine

Marcus Reid, VALORANT Technical Lead, Riot Games |
2020年6月17日

Marcus Reid

Riot Games の VALORANT においてコンテントサポートのテクニカルリードをしている Marcus Reid 氏は、ゲームのエンジン部分を扱うチームで働いています。VALORANT 開発チーム全体のエンジニアではないコンテント開発者(デザイナー、アーティストなど)に対するサポートも行っています。2017年に Riot Games に参加する前には、The Coalition でGears of War 4Gears of War Ultimate Edition のエンジニアとして2年間勤務していました。 
皆様、こんにちは。私は Marcus Reid です。 VALORANT のコンテントサポートチームでテクニカルリードとして働いています。6月2日に、私達は5対5のキャラクタベース タクティカルシューター FPS である VALORANT をローンチしました。私達のチームは Unreal Engine を堅固な基盤として使用することで、スタジオの力をゲームを特徴的にする部分に集中できるようにしています。自分たちの使用方法に合わせて、エンジンに対して、的を絞りつつ大幅な改善を行っています。新しいエンジンバージョンには定期的に更新し、Epic やコミュニティによる新機能を活用できるようにしています。こうしたアプローチにより、比較的少人数のエンジニアチームで、エディタ上でゲームを構築する多数のコンテント開発者をサポートすることが可能になっています。プログラム開発サイクルでは、既に Unreal Engine が提供している機能を自分たちで作るというのではなく、ゲームプレイとサービス機能を開発することに大部分の時間を使用しています。

私達が行った中で大規模なエンジン改造の多くは、VALORANT における厳密なパフォーマンス要件から生まれています。様々なハードウェア構成におけるクライアントのパフォーマンスの計測と、サーバーにおけるチックレートと並行処理度合い(言い換えると、1コアごとのゲーム数)の評価を行っています。パフォーマンス目標を達成するためにエンジンの改造を行いました。以下に、改造を行った2つの領域について例を上げて説明します。
レイナが「ディスミス」を使うと、一時的に透明になって奇襲も逃走も可能です。

ローエンド GPU 向けのレンダラーカスタマイズ

私達の最小クライアントスペックは、2012年初頭のオンボード GPU である Intel HD Graphics 4000 で、ここでのターゲットは 30 FPS (フレーム時間は 33.3 ms)です。プレイヤーが品質レベル設定を変えても、競技としても一貫性を維持する必要があります。設定を変えても、ゲームでの銃撃戦における、視認性、明瞭性に影響しないようにすることが重要です。

この目標を満たすには、ゲーム内のコンテンツに厳しいアートバジェットを設定することと、アーティストの努力と創造性によって最小スペックでのパフォーマンスを落とさずにゲームの見た目を維持することの両方が必要になります。エンジニアチームが責任を持つパフォーマンス目標を実現する上で、アーティストチームは必要不可欠な相棒になります。

エンジンのレンダリングレイヤーについて大きな変更を行いました。その一部を紹介します。
  • Unreal Engine のモバイルレンダリングパスを元にしたカスタムのフォワードレンダラー
    • UE4.14 でデスクトップ向けに追加されたフォワードシェーディング レンダラーより先行した実装です。
  • 必要な機能のみをサポートしインストラクションとテクスチャサンプルを可能な限り削減したユニークなベースパス シェーダー
    • ベース環境マテリアルのピクセルシェーダーは、マテリアル品質を低にした場合、インストラクション数は 41 で、テクスチャルックアップも 1 個です。
  • 固定ライトと可動ライトの機能を制限しオーバーヘッドが最小の静的ライティングパスに移植
    • 例:各マップには単一の静的な指向性ライトがあり、一人称表示の腕や武器に動的な影をキャストします。
    • VALORANT のゲームプレイ環境は静的ライティングのみを使用しています。
  • 向きによるカリングやカスタム ビジビリティ クエリによるオクルージョンカリングを含む様々なデカルへの調整、簡略化した頂点フォグサポート、カスタムライティング影響
  • 各マップのビルドにベイクされた集約された Z プリパスメッシュ。マップの主要部分(壁、床など)の単純化ジオメトリから構成され、通常のデプスパスの代わりにデプスに描画されます。
    • 計測によって、シーンで個々のメッシュのデプスへのドローコールを行うことに比べて、集約メッシュを使うことで大幅な改善を確認しました。
    • このアプローチは GPU シーンからの自動ドローコールマージが行われるようになると将来的には必要がなくなるかもしれません。独自のカスタマイズをEpic がサポートする新しいエンジン機能によって置き換えることができるのは、常に喜ばしいことです。
エンジンへの改造と、アーティストによる努力の両方によって最小スペックでも 30 FPS 以上のパフォーマンスを維持しています。こうした最適化によって新しい GPU を搭載した PC では時には 1-3 ミリ秒でフレームを完全に描画することも可能になっています。
機敏なジェットが、反撃の「ブレイドストーム」からクナイを発射

ゲームサーバーにおけるアニメーション負荷の削減

VALORANT のゲームサーバーはシングルスレッドで 1 秒間 に 128 チック、CPU コア一つあたり 3 ゲームを処理します。サーバーインスタンスのフレーム時間のバジェット予算はわずか 2.6 ミリ秒になります。このターゲットに到達するにはゲーム全体に渡る最適化が必要になります。キャラクタアニメーションをその例として取り上げます。

ゲームサーバーはヒット登録に関連しないスケルタルメッシュのアニメーションすべてをスキップします。戦闘が起こり得ない時(各ラウンドの武器購入フェーズなど)は、アニメーションは完全に無効になっています。

ヒットを正確にチェックするために、武器の投射物にヒットされたアクタは、アニメーションを評価し、正しいボーン位置を設定します。銃が発射されると、ゲームサーバーはサーバーシミュレーションをネットワークレイテンシーとクライアント/サーバーのフレーム時間を考慮し、クライアントの発射時まで巻き戻します。過去のボーン位置間の補間をサーバー時間でサブフレーム単位のオフセットで巻き戻し、ターゲットとなりえるアクタに対してヒットをチェックしてダメージを計算します。ヒットチェックの後、サーバーシミュレーションを現在時間に戻して処理を続けます。

計測によると、キャラクタ一体の更新と評価は最大 0.1 ミリ秒かかります。毎サーバーフレームにおいて 10 体のキャラクタすべてをアニメーションさせると、フレームバジェットの 40 %が消費されてしまいます。このコストの大部分は評価から来ています。比較すると更新はコストが低いものです。

はじめは、アニメーションの更新頻度を数フレームに一回に制限し、毎回の評価の後に最終ボーン位置のスナップショットを保存する方法を試しました。巻き戻しはアニメーション評価を強制し、現在のフレームスナップショットを作ります。一番近い二つのスナップショットを補間してヒットテストをしました。

次に、このショットで当たる可能性がないアクタを取り除いて不必要な巻き戻しを削減するロジックを追加しました。これで無関係のアクタのアニメーション評価の強制がなくなります。可能性を判定するために、サーバーは発射したプレイヤーのエイムベクターから球体をキャストします。この球体は直近の動きと武器の誤差をカバーできるように十分大きいものです。この球体と衝突するキャラクタは巻き戻されて評価されます。
走っているサイファーは巻き戻され、プレイヤーのショットが当たったか評価されます。ソーヴァは離れて立っているので、サーバーはヒット判定のためにソーヴァのボーン位置を完全に評価する必要はありません。
巻き戻しの対象を減らすことで、ヒットする可能性のあるキャラクタのみにオンデマンドのアニメーション評価を行うことになりますが、それでもすべてのキャラクタに対して定期的なボーン位置のスナップショットを作成するための評価コストがかかります。この評価を削減するために、更新を実行した時に、最終的なボーン位置のスナップショットを作成する代わりに、それぞれのアニメーショングラフノードの入力のスナップショットを作成しています。アニメーショングラフを任意の時点に巻き戻し、グラフを評価するとボーン位置が得られます。

アニメーションノードの入力のスナップショットというのはなかなか大変なエンジン改造になります。各ノードタイプでの必須状態を理解することが必要になるからです。それでも、私達の利用シナリオにおいては、実行する価値があるスピードアップが得られました。こうした最適化すべてによって、アニメーション処理の平均時間は 1 サーバーフレームあたり 0.3 ミリ秒になりました。

まとめ

Unreal Engine は素晴らしいツールと堅牢な機能によって VALORANT の基盤になっています。エンジニアチームは車輪の再発明に時間を費やすことはしませんでした。コンテンツ開発者はエディタで高い生産性を発揮しています。Unreal Engine によってゲームを特別にする部分について高速なイテレーションが可能になります。

    今すぐ Unreal Engine をダウンロードしましょう!

    世界で最もオープンで高度な制作プラットフォームを入手しましょう 
    Unreal Engine はそのままでフル機能と完全なソースコードアクセスを提供し制作準備ができています。