PSO キャッシング は、最もよく使用される Pipeline State Object データをアプリケーションのために事前に作成して格納し、レンダリング パフォーマンスを改善します。特に、アプリケーションの実行時に障害を削減します。 このガイドでは、Unreal Engine (UE) の Android プロジェクトへの PSO キャッシュの実装について説明します。
このページでは、バンドルされた PSO キャッシング方法の手順について説明します。これは、バージョン 5.2 以前の UE で使用される手動のレガシー PSO キャッシング システムです。 プロジェクトで可能であれば、5.3 以降の PSO 事前キャッシング システムを使用することをお勧めします。 詳細については、「PSO プリキャッシングのドキュメント」を参照してください。
必要な設定
このガイドの手順に従うには、次のものが必要です。
Android をターゲット プラットフォームとして 設定する Unreal Engine プロジェクト。
現在お使いの Unreal Engine バージョンに対応した Android SDK および NDK バージョン。
デベロッパー モードと USB デバッグが有効になっている対応 Android テスト デバイス。
現在お使いの Unreal Engine のバージョンと互換性がある Android デバイスの詳細については、「Android の開発要件」を参照してください。
PSO キャッシングのプロジェクト設定をセットアップする
PSO キャッシングをサポートするプロジェクトを設定するには、以下の手順に従います。
Unreal Editor でプロジェクトを開きます。
[Edit (編集)] > [Project Settings (プロジェクト設定)] を開きます。
[Project (プロジェクト)] > [Packaging (パッケージ化)] に移動し、[Share Material Shader Code (マテリアル シェーダー コードの共有)] と [Shared Material Native Libraries (共有されたマテリアル ネイティブ ライブラリ)] の両方が有効になっていることを確認します。
次の手順で、コンフィグ ファイルを手動で編集する必要があります。 Unreal Editor を閉じて、手動の編集と [Project Settings] 間の競合を回避します。
プロジェクトの
Config/Androidフォルダを開き、AndroidEngine.iniを開きます。 以下の設定を追加します。C++[DevOptions.Shaders] NeedsShaderStableKeys=true
ゲームを実行して PSO を収集する
プロジェクト設定は PSO キャッシュと互換性があるので、-logPSO コマンド ラインを有効にしてプロジェクトのビルドを実行します。
テスト デバイスがコンピュータに接続されていることを確認します。
Unreal Editor でプロジェクトを開きます。
[Platforms (プラットフォーム)] > [Project Launcher (プロジェクト ランチャー)] の順にクリックします。
[Project Launcher (プロジェクト ランチャー)] で、[+Add (+追加)] > [Create Custom Profile (カスタムプロファイルを作成)] をクリックして新しい起動プロファイルを作成します。
プロファイル PSO Caching - ETC2 の名前を変更します。
[How would you like to cook your content? (コンテンツをどのようにクックしますか?)] の横のドロップダウンで、[Cook by the Book (マニュアルの通りにクック)] をクリックします。
ターゲット プラットフォームとして Android_ETC2 を選択します。
[Deploy (デプロイ)] でモバイル デバイスをターゲット デバイスとして選択して、[Variant (バリアント)] を [Android_ETC2] に設定します。
[Launch (起動)] カテゴリで
-logPSOコマンドを [Additional Command Line Parameters (追加コマンド ライン パラメータ)] に追加します。Android File Server (AFS) を使用して、デバイスの既存のビルドの
UECommandLine.txtファイルに-logPSOコマンドを追加します。 詳細については、「AFS のドキュメント」を参照してください。製品をリリースします。 UE ではプロジェクトをビルドしてパッケージ化してから、デバイスにデプロイします。
ゲーム全体をプレイします。 ゲームが新しい PSO をログに記録するときは常に、出力ログにメッセージが表示されます。
将来、PSO 収集セッションを実行すると、このセクションから作成したプロファイルを再利用できます。
PSO 収集のヒント
最終的なアプリケーションをパッケージ化すると、ユーザーがプレイを開始する前にすべての PSO をロードする必要があるため、PSO キャッシュを収集すればするほど、ゲームの起動時間が長くなります。 したがって、既知の位置であり、一般的に使用され、スタッタリングが目立つ位置で PSO を収集することをお勧めします。このような位置の PSO キャッシュがユーザーのエクスペリエンスに最もメリットをもたらすためです。
位置が大幅に変更されるときはいつでも、事前に収集したその位置の PSO が古くなります。 したがって、プロダクション全体で PSO を頻繁に収集します。
デバイスから収集した PSO データを取得する
PSO をログ記録したら、テスト デバイスからデータを取得し、新しいビルドに取り込む必要があります。 PSO データを取得するには、以下の手順に従います。
テスト デバイスをコンピュータからアンプラグし、ゲームを終了します。
プロジェクト ランチャーからゲームを終了しようとすると、デバイスはログ記録した PSO データを保存しない場合があります。
プロジェクトを終了して、テスト デバイスをコンピュータに再接続します。
以下のディレクトリから PSO を取得します。
Internal Storage/Android/Data/[プロジェクトのパッケージ名]/files/UnrealGame/[プロジェクト名]/Saved/CollectedPSOs以下の方法のいずれかを使用すると、「CollectedPSOs」ディレクトリのコンテンツを取得できます。
Android File Server (AFS) を使用して以下のコマンドを実行します:
UnrealAndroidFileTool -p [package name] -k [security token] pull ^saved/CollectedPSOs [destination path]デバイスをコンピュータに接続し、コンピュータのファイル システムを使用して PSO の場所を参照します。
コンピュータのアクセスしやすい場所に
.UPIPELINECACHEファイルをコピーします。 この例では、Import/PSOFilesとプロジェクト名のディレクトリにあるフォルダを使用します。
最終的な PSO キャッシュ データをビルドしてプロジェクトに追加する
PSO をビルドに組み込むには、以下の手順に従います。
プロジェクト フォルダを開き、「Saved/Cooked/Android_ETC2/[Project Name]/Metadata/PipelineCaches」を見つけます。 このフォルダのファイルを「Import/PSOFiles」にコピーします。
コマンド ライン ツールを開き、プロジェクト用に使用しているエンジン バージョンのインストール ディレクトリに移動してから、「Engine/Binaries/Win64」フォルダを見つけます。 たとえば、「C:/Program FIles/Epic Games/UE_5.2/Engine/Binaries/Win64」です。
以下のコマンドを実行します。
C++UnrealEditor-Cmd.exe "YourProjectPath.uproject" -run=ShaderPipelineCacheTools expand C:\PSOfiles\*.rec.upipelinecache C:\PSOfiles\*.shk C:\PSOfiles\"Alias Name"_"Project Name"_"Used Graphics API".spcコマンド ラインの実行が成功したら、「Import/PSOFiles」ディレクトリには新しい PKCS #7 証明書ファイルが含まれています。 これをプロジェクトの「Build/Android/PipelineCaches」フォルダにコピーします。
ゲームを再ビルドして起動します。 新しいビルドには、最終的な PSO キャッシュ データが含まれています。
結果
起動時に、ロードされた PSO の数を示すログも表示されます。 ゲームを実行すると、PSO の収集元の位置からレンダリング スタッタが解決されます。