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
」を開きます。以下の設定を追加します。[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) を使用して
-logPSO
コマンドをデバイスの既存のビルドの「`UECommandLine.txt」ファイルに追加します。詳細については、AFS のドキュメント を参照してください。 -
製品をリリースします。UE ではプロジェクトをビルドしてパッケージ化してから、デバイスにデプロイします。
-
ゲーム全体をプレイします。ゲームが新しい PSO をログに記録するときは常に、出力ログにメッセージが表示されます。
将来、PSO 収集セッションを実行すると、このセクションから作成したプロファイルを再利用できます。
PSO 収集のヒント
最終的なアプリケーションをパッケージ化すると、ユーザーがプレイを開始する前にすべての PSO をロードする必要があるため、PSO キャッシュを収集すればするほど、ゲームの起動時間が長くなります。したがって、既知の位置であり、一般的に使用され、スタッタリングが目立つ位置で PSO を収集することをお勧めします。このような位置の PSO キャッシュがユーザーのエクスペリエンスに最もメリットをもたらすためです。
位置が大幅に変更されるときはいつでも、事前に収集したその位置の PSO が古くなります。したがって、プロダクション全体で PSO を頻繁に収集します。
デバイスから収集した PSO データを取得する
PSO をログ記録したら、テスト デバイスからデータを取得し、新しいビルドに取り込む必要があります。PSO データを取得するには、以下の手順に従います。
-
テスト デバイスをコンピュータからアンプラグし、ゲームを終了します。
プロジェクト ランチャーからゲームを終了しようとすると、デバイスはログ記録した PSO データを保存しない場合があります。
-
プロジェクトを終了して、テスト デバイスをコンピュータに再接続します。
-
以下のディレクトリから PSO を取得します。
内部の Storage/Android/Data/[プロジェクトのパッケージ名]/files/UnrealGame/[project name]/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」です。
-
以下のコマンドを実行します。
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 の収集元の位置からレンダリング スタッタが解決されます。