PSO キャッシュ

アプリケーションの GPU 状態を事前に記録することで、レンダリングを最適化します。

Direct3D 11 などの初期のグラフィック API では、ドローコールを発行する前に、GPU パラメータをオン ザ フライで設定するために何十回もの個別の呼び出しを行う必要がありました。Direct3D 12 (D3D12)VulkanMetal などのより新しいグラフィックス API では、Pipeline State Objects (PSO) という事前に設定された GPU 状態情報のパッケージの使用がサポートされており、より迅速にGPU 状態を変更することができます。

これによりレンダリング効率が大幅に向上するものの、オンデマンドでの 新しい PSO の生成に 100 ミリ秒以上かかる場合があります。これは、アプリケーションで使用可能なすべてのパラメータを設定する必要があるからです。このため、PSO を効率的に使用するためには、PSO が必要になるよりかなり前に PSO を生成する必要があります。

Unreal Engine (UE) などの高度にプログラム可能なリアルタイム レンダリング環境では、大量のコンテンツを処理するあらゆるアプリケーションに非常に多くの変更可能な GPU 状態パラメータがあるため、PSO を事前に手動で設定するのは実用的ではありません。この複雑な状況に対処するため、UE では、ランタイム時にアプリケーション ビルドから GPU 状態に関するデータを収集し、このキャッシュ データを使用して、使用されるよりはるか前に新しい PSO を生成することができます。これにより、発生している可能性のある GPU 状態を、アプリケーションで使用される GPU 状態のみに絞り込むことができます。アプリケーションの実行によって収集された PSO の記述は、PSO キャッシュ と呼ばれています。

Unreal で PSO を収集する手順は次のとおりです。

  1. ゲームをプレイします。

  2. 実際に描画された内容をログに記録します。

  3. この情報をビルドに含めます。

その後、後続のプレイスルーでは、レンダリング コードで必要になるよりも前に、ゲームで必要な GPU 状態を作成することができます。

このドキュメントでは、UE で使用可能な PSO のタイプと、PSO キャッシュの生成プロセスの詳細について説明します。

用語およびサポートされる PSO タイプ

このドキュメントでは、GPU 状態を D3D12 API で使用されている PSO (Pipeline State Object) という用語で統一します。その他の API では若干異なる名称を使用しています。たとえば、Vulkan は「パイプライン」、Metal では「パイプライン状態」という用語を使用しています。ただし、これらは概念上はすべて同じです。

「PSO キャッシュ」という用語は、ビルドに含まれる PSO 記述を含むファイルを指しています。そのため、ゲームで PSO キャッシュの状態を早い段階で作成することができます。つまり、PSO キャッシュは、早い段階で作成するための PSO のリストです。

Unreal Engine では、次の 2 つのタイプの PSO をサポートしています。

  • グラフィック PSO: アプリケーションのグラフィック パイプラインの状態を表し、多くの設定可能な変数で構成されます。

  • コンピュート PSO: 通常、コンピュート シェーダー という形式をとります。

これらの PSO タイプの他に、レイ トレーシング PSO もありますが、UE 5.0 ではレイ トレーシング データの PSO キャッシュをサポートしていません。

PSO キャッシュを生成する

PSO キャッシュの生成方法については以下の手順を参照してください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル