dpqp

オンラインゲームの攻略情報ブログ

【Fortnite Battle Royale】今月にも適用されるUnreal Engine 4のパフォーマンス最適化についてアナウンス

 

EpicGamesより、最近追加されたバトルロワイアルモードである『Fortnite Battle Royale』のパフォーマンス最適化に関する投稿がありました。

同社が開発したUnreal Engineが使用されているので、事細かに開発状況を伝えてくれるようです。

今月にもいくつかのパフォーマンス最適化を含んだUnreal Engine 4.18がリリースされます。

また、いくつかの項目は4.19で適用されるようですが、時期は未定となっています。

以下に、Fortnite Battle Royaleの最適化に関する投稿の内容を翻訳して置いておきます。

 

Fortnite Battle Royaleとは?

私たちは最近、Fortnite:Battle Royaleに新しいPvPモードをリリースしました 。この新しいゲームモードは、100人のプレイヤーを大規模な5.5キロのプレイ可能エリアにドロップして、それを公然と立ててプレイヤーが最後のプレイヤーになるのを見ます。これらの要件の規模はFortnite開発チームにいくつかの課題を提示しました。これについてはここで説明します。

バトルロワイヤルのゲームモードを開発する過程で、バトルロワイヤルだけでなく、Unreal Engine 4を使用するすべての開発者、特に同様の要件を持つビルドを含む、多くのパフォーマンス、メモリ、ワークフローの最適化を行っています。

これらの改善は、PerforceとGitHubの両方で既に利用可能です。今月はUnreal Engine 4.18で出荷され、残りは4.19で出荷されます。

 

専用サーバーのパフォーマンス最適化

最初の課題は、専用のサーバーを最適化して100人の同時プレイヤーを処理し、20時間を維持し、帯域幅を最小限に抑えることでした。

すべてのフレームで、サーバーはそのプレーヤーの近くのすべてのアクターに更新を送信します。これは、各プレイヤーが関連するすべてのアクターを決定し、それらのアクターで何が変更されたのかを把握し、その違いを持つプレーヤーにパケットを送信する必要があることを意味します。CPU時間と帯域幅を最小限に抑えるためには、プレイヤーに良い経験を提供するために必要な最小限のアップデートを送信する必要があります。

この作業の大部分は、ゲームコードのプロファイリングと最適化でしたが、途中で多くのエンジン最適化の機会も見つけました。

ここでは、私たちがエンジン用に行ったサーバ専用の最適化をいくつか紹介します。

  • クライアントに接続するときに送信する必要があるRPCの数を減らすために、バッチ処理されたレベルのストリーミングRPC。(4.19になる予定)
  • OSソケットのバッファサイズを設定可能にし、Battle Royaleのためにそれらを上げます。これにより、同時に接続しているクライアントがこれらのバッファーをオーバーフローするのを防止し、サーバーの負荷を過剰にします。(4.19になる予定)
  • キャラクターがジャンプや転倒などのいずれのコンポーネントにも立っていない場合、CharacterMovement RPCの帯域幅を削減します。(4.19になる予定)
  • フレームごとにサーバーから更新を受け取るプレーヤーの数を制限する機能を追加しました。私たちは、ロビーでは25、ゲームプレイでは50に制限を設定しました。(4.19になる予定)
  • クライアントがサーバーに移動の更新を送信する速度を制限します。高いフレームレートで実行されているクライアントがサーバーに過剰な負荷をかけることを防止します。(4.17に同梱)
  • クライアントのping時間を他のクライアントに複製しないようにするオプションを追加しました。多くのプレイヤーがいるときにネットワークトラフィックが多く発生します。(4.19になる予定)
  • FArchive :: SerializeIntPackedでレプリケーション中にいくつかのメモリ割り当てを削除し、CompatibleChecksumの計算方法を変更しました。(4.19になる予定)
  • 複製中の速度のために、文字列からFNamesへのプロパティタイプの比較を切り替えました。(4.19になる予定)
  • クラウドホストサーバーの統計をより簡単に表示できるように、専用サーバーのネットワーク統計をクライアントでリアルタイムで表示する方法を追加しました。(4.19になる予定)
  • 関連性をよりよく説明する能力システムへの変更。能力システム使用時の複製コストを大幅に削減します。(4.19になる予定)

 

大型地図の作成とレンダリング

フォートライトの地図:バトル・ロワイアルは5.5km2の遊園地です。パラシュートを行うときにマップ全体を一度に見ることができ、ゲームプレイ中に遠方の距離をサポートしたいと考えました。私たちは、可能な限り詳細レベルのソリューションを最適化する必要があることを知りました。

f:id:deepeequepee:20171009152707j:plain

Simplygonに裏付けされたエンジンのHierarchical LOD(HLOD)機能を使用して、地図の領域を単一の低ポリゴンメッシュに結合しました。これは遠くから見たときに1回の描画呼び出しで描画できます。これらのツールはすでに存在しています - 我々はそれらをParagonで使用し ていますが、アーティストをより効率的にするために変更する必要がありました。

アーティストがそれに協力できるように地図が分割された方法は、GoogleのHLODツールとうまく一致しませんでした。そのワークフローをより良くサポートするためにHLODをいくつか変更し、アーティストがローカルでHLODを再構築するのではなく、夜間に実行できるマップ内のすべてのHLODを再構築するコマンドレットを追加しました。(4.19になる予定)

 

コンソールでの改良点

バトル・ロワイヤルの視野距離とプレイヤー数の拡大は、特にメモリに関する改善を必要とするコンソール上でのいくつかのパフォーマンスとメモリの課題を提示しました。この作業の多くは、ゲーム側のコンテンツの最適化でしたが、エンジンにはいくつかの改良も加えました。

4.18で提供されるいくつかのコンソールの改良があります:

  • [XboxOne + PS4]潜在的なメモリの最適化をより明確にするため、低レベルのメモリトラッキングツールを改良しました。
  • [XboxOne + PS4]より効率的なボリュームテクスチャのアップデート。ピークメモリを240MB +削減しました。
  • [XboxOne]どのレンダリング機能が有効になっているかに応じて、GPUの帯域幅使用率を最大限にするために、さまざまなレンダーターゲットレイアウトのオプションを追加しました。
  • [XboxOne] D3D12ディスクリプタヒープのメモリオーバーヘッドを削減し、120MBを節約しました。
  • [XboxOne]レンダリングターゲットを割り当てて解放し、メモリ使用量を100MB以上削減しました。
  • [PS4]テクスチャストリーミングと最適化プールの処理方法を最適化し、300〜400MBを節約しました。

バトル・ロワイヤルに取り組んでいるうちに、特に30Hzのゲームに影響を与えたエンジンの入力レイテンシに関する問題を特定しました。この問題に対処するために、スレッド同期を改善してレイテンシを約66ms短縮しました(この削減は60Hzタイトルの約半分になります)。これらの変更により、ゲームの感触が目立つように改善され、より敏感で簡単に目標を達成できます。(4.19になる予定)

 

最後に

これらは、最初のバージョンのFortnite:Battle Royaleを出荷したときのエンジンの改良点に過ぎません。この経験を踏まえて、特に大規模なマップを扱う際のレベルストリーミングやエディタのパフォーマンスに関連して、私たちのゲームチームと業界全体のユーザーをより効率的にするための改善が必要であることを確認しました。

情報元:EpicGames