UE5.4 Shader Symbol が出力されないことについて

・現状説明

チームの開発状況で UE5.4 に固定しています。

グラフィックスに関連するクラッシュがある際に AfterMath を出力していますが、Shader Symbol が出力されないため、調査が難航していますので、Shader Symbol が出力できるように以下のページを参考にコンフィグファイルを編集します。

https://dev.epicgames.com/documentation/ja-jp/unreal-engine/shader-debugging-workflows-unreal-engine

内容は以下のように追加しています。

コンフィグ:

[ProjectDir]\Config\[Platform]\[Platform]Engine.ini

追加したコンソール変数:

[ShaderCompiler]

r.InvalidateCachedShaders=1

r.Shaders.Symbols=1

r.Shaders.GenerateSymbols=1

r.Shaders.WriteSymbols=1

r.Shaders.SymbolsInfo=1

r.Shaders.WriteSymbols.Zip=1

r.Shaders.AllowUniqueSymbols=1

r.Shaders.ExtraData=1

r.Shaders.Optimize=0

r.Shaders.KeepDebugInfo=1

r.ShaderDevelopmentMode=1

r.DumpShaderDebugInfo=1

r.CompileShadersForDevelopment=1

パッケージ化するとページ通りに [ProjectDir]/Saved/ShaderSymbols/[Platform]/ShaderSymbols.zip にファイルは出来上がりますが、ShaderSymbols.zip が 0 kb になっており、中身はファイルがない状態です。

・質問

①上記の手順はあっているかどうかをご確認したくご質問させていただきます。

②以下の修正も見たことがりますが関係があるでしょうか?

https://issues.unrealengine.com/issue/UE-252263

上記の修正は UE5.6 の機能に依存しているようで、もしその修正で治る場合は UE5.4 にも適用できる手段はあるでしょうか?

内容を軽く見ていましたが、Shader Serialization、Shader Compiler、Material Stats 周りは UE5.4 以降に変わりまして、

変更依存が多そうなので、ご確認させていただきます。

ご回答をよろしくお願いいたします。

[Attachment Removed]

(下記のリンク先は、本スレッドを英語に翻訳した英文スレッドですが、Epic Games のサポートチームが内部的に使用するものですので、ユーザーの方に利用していただく必要はございません。サポートは、この日本語スレッドに日本語で表示されることになります。)

[Issue of Shader Symbol not being output in [Content removed]

[Attachment Removed]

[mention removed] 様

(以下は、EPS メンバーの Gupta Rahul によるコメントを翻訳したものです。)

お世話になっております。

Vulkan をお使いでしたら、以下の CL が必要となるかと思います。

https://github.com/EpicGames/UnrealEngine/commit/8cd18edb7220cabb31fcda78f2584cedd6b6f8a1

次の reddit の投稿を読むと、Vulkan の Debug Markers は UE5.4 で無効化されていました。

https://www.reddit.com/r/unrealengine/comments/1hlsmna/unusually_high_gpu_time_50ms_on_low_end_mobile/

お役に立てたか教えていただけますと幸いです。

[Attachment Removed]

[mention removed]​ 様

(以下は、サポート担当の Chaney Lance によるコメントを翻訳したものです。)

お世話になっております。

同様の問題を UE5.5 では解決しました。シェーダーシンボルの出力問題および Aftermath のシンボル関連付けの問題は、UE5.6 では解決されました。ただし、それ以前のバージョンのエンジンでは問題が残っている可能性が高いです。

あなたが前の投稿で触れられた修正を統合し、dxil および pdb の出力を得ることが最初にとるべきステップです。シンボルが正しく機能しているか検証するためには、Aftermath やビルドで試す前に、エディタ内で PIX を使用することをおすすめします (プロジェクトを起動する際に、起動オプション -AttachPix を使います。このドキュメントを参照してください)。

PIX でキャプチャを取得し、PIX の設定で PDB search paths (PDB 検索パス) を PDB 出力先フォルダにセットしてください。Start Analysis (分析開始) ボタンをクリックし、シェーダーコードとの関連付けが正しく機能しているか確認してください。

注意: シェーダーの PDB ファイルが入っているフォルダを選択した後に 「+」ボタンをクリックすることが肝要です。

[Image Removed]

[Image Removed]まず、この方法でご自身でテストしてみることをお勧めしますが、残念ながら (少なくとも UE5.5 においては)、あなたが言及した修正をバックポートするだけでは Aftermath でシェーダー ソースコードを関連付けすることはできませんでした。この機能を動作させるためには、さらに以下の 2 つのコミットをバックポートする必要がありました。

1 つ目のコミットは、Aftermath におけるシェーダーコードの関連付けを修正するものです。

なお、この関連付けを有効にするためには、コンソール変数の

r.GPUCrashDebugging.Aftermath.DumpShaderDebugInfo=1

を設定する必要がありました。

2 つ目のコミットは、1 つ目のコミットの変更によって発生したスレッド処理のエラーを修正するものでした。

これらのコミットを UE5.4 にバックポートすることは、残念ながら、かなり困難です。

UE5.4 から 5.6 の間に多くの変更があり、修正コミットは多数のファイルに関わっています。しかも、それらのファイルの多くは、中間的な変更が加えられており、それらも適用が必須となっている可能性があります。

このような取り組みを行った場合は、ぜひその結果を教えてください。もしこれらの修正を UE5.4 に正常にバックポートできた場合は、同じ問題を抱えている他の開発者のために、修正コミットを伴った Git パッチを共有していただけますと助かります。

なお、ZipWriter の問題についてですが、この問題をテストするためには、あなたが現在運用している変更を伴った Git パッチを共有していただく必要があります。

[Attachment Removed]

[mention removed]

(以下は、サポート担当の Simpson Hayden によるコメントを翻訳したものです。)

お世話になっております。

本件問題は、引き続きまだサポートが必要な状態にありますでしょうか? (それともチケットをクローズしてもよろしいでしょうか?)

[Attachment Removed]

翻訳スレッドのご対応をいただきありがとうございます。

そちらの返答をお待ちします。

[Attachment Removed]

[mention removed] 様

お世話になっております。

情報提供不足ですみませんが、Rendering API は DirectX を利用しています。

もし関連情報がありましたらご共有いただけると幸いです。

引き続きよろしくお願いいたします。

[Attachment Removed]

(以下は EPS メンバーの Gupta Rahul によるコメントを翻訳したものです。)

ConsoleVariables.ini で r.Shaders.SymbolPathOverride= を使ってオプションで Symbol Path を設定し、シェーダーのシンボル情報が取得できるかどうか確認してから、使用しているツールにそのディレクトリをリンクさせてみてください。余談ですが、私の場合 r.DumpShaderDebugInfo=0 に設定することによって、失敗しているシェーダーだけでなく、デバッグ用の完全なシェーダー情報を取得しています。この API の最近のバージョンでエンジン本体に追加された D3D12 固有のスイッチは、覚えておりません (わかっておりません)。

また、ZIP 圧縮することはできないと思います。私の知る限りでは、プロジェクトは、圧縮されたアーカイブではなく、束ねられていないファイルとして存在している必要があります。また、ビルドは Debug/Development Configuration Build でなければなりません。ConsoleVariables.ini には他にもいくつかのコメントがあります。変数の値について、確認する価値があるかもしれません。

お役に立てますと幸いです。

[Attachment Removed]

[mention removed] 様

ご共有いただきありがとうございます!

試しに以下のように変更して手元で確認してみましたが、今までと同じく特に出力されていません。

変更点を太文字にします。

[ShaderCompiler]

r.Shaders.Symbols=1

r.Shaders.GenerateSymbols=1

r.Shaders.WriteSymbols=1

r.Shaders.SymbolsInfo=1

r.Shaders.WriteSymbols.Zip=0

r.Shaders.AllowUniqueSymbols=1

r.Shaders.ExtraData=1

r.Shaders.Optimize=0

r.ShaderDevelopmentMode=1

r.DumpShaderDebugInfo=0

r.CompileShadersForDevelopment=1

r.Shaders.SymbolPathOverride=“[ProjectPath]\Saved\TestShaderSymbols”

-----

他にもいろいろ試してみましたので共有します。

トップに記載しました以下の修正について UE5.4.4 に取り入れるようにしてみました。

https://issues.unrealengine.com/issue/UE-252263

手元では .pdb, .dxil が出力されるようになりました。

※使えるかどうかはまだ動作確認できていませんが一旦共有します。

r.Shaders.WriteSymbols.Zip についても上記の修正で利用できるようになっているようです。

ただし、Windows の場合は以下の制限があるようです。

・制限

[ShaderCompiler] の中に r.Shaders.WriteSymbols.Zip=1 を設定すると Editor 起動時に ZipWritter が設定されたパスの Zip の書き込み権限を持ち続け

該当 Editor でプロジェクトランチャーからクックするとクックスレッドでさらに新規 ZipWritter が同じファイルの書き込みしようとしますので権限がなく失敗します。

・対処

クック時に [ShaderCompiler_BuildMachine] の方に r.Shaders.WriteSymbols.Zip=1 にして

通常の [ShaderCompiler] の中にある r.Shaders.WriteSymbols.Zip=0 切り替えて Editor を立ち上げる必要があります。

パッケージ化後に .pdb, .dxil が使えるかどうかを試してみます。

引き続きよろしくお願いいたします。

[Attachment Removed]

Chaney Lance 様

お世話になっております。

ご共有ありがとうございます。

PIX について試してみまして問題なく Shader の関連付けができています。

[Image Removed]

Aftermath についてご提示のコミットをいただきありがとうございます。

こちらもまだ動作確認できていない状態ですので、一度内容を確認してバックポートするかどうかを検討します。

おっしゃる通り 5.4 から 5.6 の変更範囲は広いので、検証の時間とコストは結構かかりそうです。

ZipWriter の問題について特にソースコードの変更を行っていません。

運用上パッケージをビルドしない PC であれば r.Shaders.WriteSymbols.Zip が 0 か 1 どちらでも問題ありません。

パッケージをビルドする PC のみ 以下のようにコンフィグを設定しています。

[ShaderCompiler]
r.Shaders.WriteSymbols.Zip=0
 
[ShaderCompiler_BuildMachine] 
r.Shaders.WriteSymbols.Zip=1 

よろしくお願いいたします。

[Attachment Removed]

Simpson Hayden 様

お世話になっております。

社内のシステム整備関係で動作確認できていません。

ビルドマシンで WriteSymbols 有効時によく Virtual Memory が枯渇しているため、

失敗することが多いので一時停止しています。

バックポートの影響か、UE 本来の仕様なのか、もしくはプロジェクトの Shader Variant が多すぎるかは来年以降調査する予定です。

上記のようにまだまだ課題が残っている状態のため、引き続きサポートいただけると幸いです。

よろしくお願い致します。

[Attachment Removed]

[mention removed]​ 様

(以下は、サポート担当の Simpson Hayden によるコメントを翻訳したものです。)

大丈夫です、本件は引き続きオープンのままにしておきます。

テストすることができましたら、いつでもご連絡ください。

[Attachment Removed]