Unreal Engine 5(UE5)で「Take High Res Screenshot」を実行した際に、「シェーダをコンパイル」という表記が出て長時間待たされることがあります。この現象は特にプロジェクトが大規模になるほど顕著に発生し、開発のストレス要因となります。
本記事では、その原因と解決策について詳しく解説し、ブループリントを活用してこの問題を回避する方法を紹介します。
なぜ「シェーダをコンパイル」が発生するのか?
UE5では、スクリーンショットを高解像度で取得する際、一時的にレンダリング設定が変更されることがあります。この際、新しいシェーダのコンパイルが必要になると、プロジェクトのシェーダ数に応じて大幅な処理時間がかかる場合があります。
特に以下の要因が関係しています:
- 使用しているマテリアルの種類が多い
- シェーダキャッシュが適切に保存されていない
- プロジェクトの設定で頻繁にマテリアルの変更が発生している
解決策1:シェーダキャッシュを事前にコンパイル
まず、シェーダのキャッシュを事前にコンパイルしておくことで、スクリーンショット時のコンパイルを減らすことができます。
以下の方法で事前にシェーダをコンパイルできます:
- プロジェクトを開いた後、「シェーダコンパイル」が完了するまで待つ
- シェーダキャッシュを保存するために、「プロジェクト設定」→「シェーダキャッシュの有効化」を行う
解決策2:ブループリントを使ってキャッシュを作成
ブループリントを使って、あらかじめシェーダをロードし、高解像度スクリーンショット時の負荷を軽減できます。
手順は以下の通りです:
- ブループリントのレベルブループリントを開く
- 「Begin Play」イベントを追加
- 「Load Asset」ノードを使い、使用するマテリアルを事前にロード
- 「Delay」ノードを挟み、ロードが完了するまで少し待機
この方法により、ゲーム開始時にシェーダが事前に読み込まれ、スクリーンショット時のコンパイルを削減できます。
解決策3:「r.ForceAllCoresToCompileShader」コマンドを使用
UE5には、シェーダコンパイル時にすべてのCPUコアを使用する設定が存在します。コンソールコマンドに以下を入力することで、コンパイルを高速化できます。
r.ForceAllCoresToCompileShader 1
この設定をブループリントから実行する場合は、「Execute Console Command」ノードを使用してコマンドを実行します。
まとめ
「Take High Res Screenshot」実行時に「シェーダをコンパイル」が発生する問題を解決するために、以下の対策を試してみてください:
- シェーダキャッシュを事前にコンパイルする
- ブループリントを活用してシェーダをロードする
- コンソールコマンドでCPUの使用効率を向上させる
これらの方法を実践することで、スクリーンショット撮影時の待ち時間を大幅に削減できるはずです。ぜひ試してみてください!