アンリアルエンジン5のエンジニアは、多くの現代のゲーム開発者がエンジンで抱えている問題を解決しようとしている。

多くのUnreal Engine 5搭載ゲームがパフォーマンス面で苦戦していることは周知の事実です。これには、発売直後のRemnant 2やLords of the Fallenといった古いタイトルから、STALKER 2やGrey Zone Warfareといった新しいタイトルまでが含まれます。その間に数多くのゲームがリリースされ、さらに今後さらに多くのゲームがリリースされる中、こうした人々はUnreal Engine 5搭載タイトルについて少し不安を抱いています。
これらの問題への答えを見つけるため、Unreal Engineのエンジニアたちが、ゲームエンジンとシェーダーのスタッタリングについて解説しました。Kenzo ter Elst、Daniele Vettorel、Allan Bentham、Mihnea Baltaが、ブログ記事とYouTube動画で専門知識を披露しました。
最近、Epic コミュニティではシェーダースタッタリングとそれがゲーム開発プロジェクトに与える影響について、多くの議論が行われています。本日は、この現象が発生する理由を詳しく解説し、PSO のプリキャッシュがどのように問題解決に役立つかを説明し、シェーダースタッタリングを最小限に抑えるための開発ベストプラクティスをいくつかご紹介します。
冒頭の口調は友好的ではあるものの、開発者の仕事を怠っていると非難しているような感じだ。「シェーダーコンパイルのスタッターは、レンダリングエンジンが新しいシェーダーを描画に使用する直前にコンパイルする必要があることを発見した際に発生し、ドライバーのコンパイルが完了するまですべてが停止します。」
ここからは、高水準言語を離れ、付随的な部分へと深く掘り下げていきます。シェーダーとは何か、「GPU上で実行され、3D画像のレンダリングに必要な様々なステップを実行するプログラム」について解説します。より深く理解するために、ぜひ記事全体を読んでみてください。
問題と解決策
基本的な部分では、これらのシェーダープログラムは以前は実行時、つまりゲームの実行中にコンパイルされていました。長年にわたり実際に使用されていたシェーダープログラムが少なかったため、これは一般的に問題ではありませんでした。しかし、シェーダーコードの増加に伴い、ゲームプレイ中に実行されるシェーダーの数が増え、その数と複雑さが増したことで、大きな問題が生じています。
コンパイルとは、C++やJavaなどの高水準言語で記述されたソースコードを機械語に変換することです。このコンパイルにはリソースが必要です。シェーダーのコンパイルに関しても、このプロセスは実質的にほぼ同じです。このようなコンパイルを実行時に実行すると、GPUにかかる負荷がさらに増大します。
Windows と Xbox の熱狂的なファンのための最新ニュース、レビュー、ガイド。
ヒッチングは、これらのコンパイルが描画リクエスト中に表面化したときに発生します。例えば、カメラをまだ見ていない新しいアイテムや領域に向けたとします。画面上のアイテムをレンダリングするために描画リクエストが発行されますが、フレーム内の何かが新しいシェーダーを使用している場合、そのシェーダーはまさにその瞬間にコンパイルされるため、ゲームが待機している間にフレームが長くなり、ヒッチが発生します。
これらの問題は、プリキャッシュと呼ばれるプロセスによって最小限に抑えることができます。ドライバーは、描画リクエストが発生した際に後で使用できるように、コンパイル済みのPSO(パイプライン状態オブジェクト)を保存します。描画リクエスト中にシェーダーが再コンパイルされるのではなく、保存されたキャッシュからPSOが返されるため、コンパイル手順は省略されます。
問題は、キャッシュされたPSOがメモリまたはRAMにロードされていない場合、取得に時間がかかることです。キャッシュされたPSOの最初のリクエストは、マイクロスタッターを引き起こす可能性があります。RAMへの保存は、割り当てが利用可能な量を超えた場合、または一般的なユースケースの範囲を超えた場合に、独自の問題を引き起こします。
STALKER 2がWindows PCで起動時に大規模なシェーダーコンパイルを必要とする理由を疑問に思ったことがあるなら、これがその理由です。このプロセスは、ゲームプレイ中に発生するヒッチングを軽減するために必要なものです。STALKER 2はオープンワールドであるため、オープンワールドではないゲームのようにレベル間でプリキャッシュを行うのではなく、起動時にすべてのプリキャッシュを行います。
最初の起動時はプロセスが異なりますが、その後の起動はPSOのウォームアップのようなものになります。ドライバーやゲームのアップデートが行われるまで、完全なコンパイルを再度行う必要はありません。これはコンソールにとって何を意味するのでしょうか?
PCとコンソールの違い
ここで概説した問題の多くは、複数のGPU構成、ドライバー、その他のハードウェア構成を考慮する必要があるWindows PCで特に顕著です。コンソールの場合、ターゲットGPUが1つしかないため、これらの問題はそれほど深刻ではありません。
個々のシェーダーは、ゲームに同梱されている実行コード内に直接コンパイルされています。シェーダーは既にゲームコードに組み込まれているため、起動時にコンパイルする必要はありません。シェーダーは実行時にPSOに変換されるため、コンソールプラットフォームではPSOの遅延は発生しません。
アンリアルエンジンの未来
Epic GamesとUnreal Engineの開発者たちは、プリキャッシュシステムの開発を続けています。彼らは次のように述べています。「まだカバレッジギャップやその他の制限事項があるため、さらなる改善に向けて継続的に取り組んでいます。また、ハードウェアベンダーやソフトウェアベンダーと協力し、ゲームが実際にこれらのシステムを使用する方法に合わせてドライバーやグラフィックAPIを適応させています。」
将来的には、Unreal Engineの開発者は、このプリキャッシュシステムが自動かつ最適に動作し、こうしたヒッチングの発生を防ぎ、現在開発者に課せられている負担を軽減したいと考えています。そのタイムラインがどうなるかは誰にもわかりませんが、HaloやWitcherの次作のようなUnreal Engine搭載タイトルが登場する今、この技術は遅かれ早かれ必要になります。いや、昨日も必要だったのです。
これらはあらゆるヒッチングの解決策ではありません。過剰なスポーンやストリームイン、同期読み込み、その他のデバイスなどが、ヒッチングやスタッタリングの原因となる可能性があります。STALKER 2のようなゲームは、プリキャッシュを使用していても問題がないわけではありません。前に挙げた敵のスポーンやエリアの同期読み込みといった2つの要因は、プレイ可能なすべてのプラットフォームで多くのパフォーマンス問題を引き起こします。
これらの問題は、Windows PCに搭載されている高性能なCPUやGPUを使えば比較的簡単に解決できますが、コンソールでは実現可能なパワーが不足しているため、はるかに多くのパフォーマンスパスが必要になります。確かに、多くのPCゲーマーはコンソールよりも性能の低いシステムを使用しているかもしれません。それでも、設定を下げたり、XboxやPlayStationでは利用できないゲーム向けの最適化をMODで導入したりすることは可能です。しかし、Grey Zone Warfareのようなゲームは、最高のPCハードウェアでさえも非常に高い負荷がかかるため、現状ではコンソールでは全くプレイできないでしょう。設定を下げることの限界もあるのです。
多くのUnreal Engineゲームがパフォーマンス問題に悩まされているため、Unreal Engineを使用していることが明らかになったゲームを観るプレイヤーは深刻な不安を抱えています。これは個人的な意見かもしれませんが、かつてはプレイヤーがUnreal Engineゲームの発売に期待を膨らませていたのを覚えています。しかし今では、そのような感情は見られません。
むしろ、ゲーマーの不安について読んだり聞いたりしています。彼らはUnreal Engineが独占状態になる可能性を恐れています。『ウィッチャー4』のようなゲームが、『ウィッチャー3』や『サイバーパンク2077』といった美しいタイトルを支えてきた自社エンジンから移行すると、ゲーマーはストレスを感じます。REDエンジンが安全でないなら、何が安全なのでしょうか?そもそもなぜ移行するのでしょうか?
そうですね、問題は2つあります。まず、Unreal Engineのようなツールを使うことで、CD Projekt Redのようなスタジオが引き入れられる開発者のプールが広がります。既に使用されている技術に精通している人であれば、すぐに使いこなせるようになるまでのオンボーディング時間を短縮できます。また、ライセンスエンジンを使用することで、社内エンジン開発にかかるコストと時間を削減できます。
HaloのSlipspaceエンジンを見てください。ゲームとエンジンの両方の開発費は、噂によると5億ドル程度です。AAAゲームの開発費が一般的に1億ドルから2億ドル程度であることを考えると、Microsoftのような企業でさえ、自社開発を放棄し、他の用途に活用できる莫大な資金を節約することを選んだ理由が分かります。
開発コストが高騰し続ける中、これは悲しい現実ですが、多くのゲーム開発者が直面している問題です。Unityのような他のエンジンメーカーが自滅に追い込まれている今、Unreal Engineにはさらなる成長の余地が生まれています。他社が使っているものを活用して、同じ開発者を起用し、コストを削減してみてはいかがでしょうか?
なぜこの見通しが気に入らないのか、もう少し長々と語ってもいいでしょう。多くのUnreal Engineゲームは、開発者がUnreal Engineのデフォルト設定以外を使ったり、標準のアセットパックを共有したりすることに手間取っているため、結局同じような見た目になってしまいます。印象的なビジュアルで他とは一線を画すAvowedでさえ、Unreal Engineらしさが残っています。
今後、より多くのスタジオがUnrealを採用するようになるでしょう。そうなれば、この問題はさらに複雑化するでしょう。どういうわけか、『Remnant 2』や『Nightingale』のようなゲームは、全く異なる世界を舞台にしているにもかかわらず、ビジュアル的に似たような感覚がありました。これ以上説明するのは難しいのですが、あまりにも似ているように感じました。
スタジオがスキルを向上させ、使用するエンジンの多様化を進めていくことを期待しています。『Kingdom Come: Deliverance 2』は、Cry Engineのようなエンジンが次世代タイトルにも十分対応できることを証明しました。Cry Engineは、素晴らしいグラフィックでありながら、様々なPC環境やコンソールで非常にスムーズに動作します。
皆さんはどう思いますか?あなたはUnreal Engine 5のファンですか?もっと多くのスタジオがUnreal Engine 5を使いながら、開発をより最適な方法で進めていくことを期待していますか?ぜひ下のコメント欄やソーシャルメディアでご意見をお聞かせください。皆さんのご意見を必ず拝見させていただきます。
マイケルは5歳の頃、母親がブロックバスターで初めてスーパーファミコンを買ってくれた時からゲームを始めました。以前は今は閉鎖されたウェブサイトで記事を書いていましたが、Windows Centralに寄稿者として参加し、30年以上にわたるゲームへの愛をできる限り多くの人に伝えています。彼のお気に入りのゲームは『レッド・デッド・リデンプション』から、物議を醸した『ダークソウル2』まで様々です。