4.19.2016

シェーダー コンパイルのデバッグ プロセス

作成 Rolando Caloca

CVars を有効にして、中間シェーダーのダンプを可能にする

ConsoleVariables.ini ファイル(通常 Engine/Config/ConsoleVariables.ini にあります) 上でこれらの cvars を有効にします:

cVars

ShaderCompileWorker を Debug にビルドする

UnrealBuildTool (UBT) では、デフォルトで、ツール用のプロジェクトは常に [Development] にコンパイルされるように生成されます。それらが [Debug] にビルドされるようにするには、ShaderCompileWorker to Debug_Program のソリューション プロパティ (Visual Studio:Build->Configuration Manager) を変更します。

solution config

中間ファイルの生成

ここでデバッグ可能なファイルを生成すると良いでしょう。cvars を有効にすれば、その後のコンパイルで生成されたファイルはダンプされ、すべてのシェーダーの再ビルドと、Engine/Shaders/Common.usf への空間または変更の追加が強制的に行われたら、エディタを再起動します。これによりシェーダーが再コンパイルされ、Project/Saved/ShaderDebugInfo フォルダ内のすべての中間ファイルがダンプされます。

ダンプされたシェーダー用フォルダの構造

ダンプ ファイルのフルパスを分析してみましょう:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

プロジェクトのルート パス:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

ダンプするシェーダーのルート パス:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

それぞれのシェーダー フォーマット / プラットフォームに対して、サブフォルダがあります。この場合は PC D3D Shader Model 5 です:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

マテリアル名ごとにフォルダを取得します。特別なフォルダは Global と呼ばれます。ここでは、M_Egg マテリアルです。

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

シェーダーは頂点ファクトリの順番でマップにグループ化されます (ほとんどの場合、メッシュ / コンポーネント タイプと一緒になります)。このケースでは Local Vertex Factory があります。

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

最後に、次のパスは機能の置き換えです。r.DumpShaderDebugShortNames=1 を既に有効にしているので、名前がコンパクトになりました (パスの長さを短くするため)。これを 0 に設定すると、フルパスは次のようになります:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\FLocalVertexFactory\TBasePassPSFNoLightMapPolicy\BasePassPixelShader.usf

このフォルダの中にはバッチファイルと usf ファイルがあります。usf ファイルはプラットフォームのコンパイラに贈られる最後のシェーダー コードです。バッチファイルは中間コードを確認するためにプラットフォーム コンパイラを呼び出す手段です。

ShaderCompileWorker を使ってデバッグする

4.11 から ShaderCompileWorker (SCW) 用の機能が追加され、以下のコマンドラインで、プラットフォーム コンパイラへの呼び出しをデバッグできるようになりました。

PathToGeneratedUsfFile -directcompile -format=ShaderFormat -ShaderType -entry=EntryPoint 

  • PathToGeneratedUsfFile は、ShaderDebugInfo フォルダから受け取る最後の usf ファイルです。
  • ShaderFormat はデバッグ対象のシェーダー プラットフォーム形式です (ここでは PCD3D_SM5)。
  • ShaderType Vertex/Pixel/Geometry/Hull/Domain/Compute シェーダー タイプに一致する vs/ps/gs/hs/ds/cs のひとつです。
  • EntryPoint はこのシェーダーのusf ファイルでのエントリーポイントの関数名です。

例えば、D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf -format=PCD3D_SM5 -ps -entry=Main

ここで、D3D11ShaderCompiler.cpp 上に CompileD3D11Shader() 関数へのブレークポイントを指定して SCW をコマンドラインで実行すると、プラットフォーム コンパイラの呼び出しをステップ実行することができます。

これに関する詳細は、アンリアル エンジン ドキュメントで次の項目をご覧ください。

最近の投稿

UNREAL FEST EAST 2018 参加登録開始!公式サイトを公開しました

10月14日(日)に横浜にて開催される『 UNREAL FEST EAST 2018 』の参加登録を開始しました。

Holospark の Earthfall が Co-op シューティング ゲームのジャンルにイノベーションをもたらす

シアトルを拠点とする独立系開発会社 Holospark が開発した Earthfall は、太平洋岸北西部を舞台にした、4 人プレイのシューティング ...

The Mill と Monster.com が生み出したモンスターをアンリアル エンジンが操る

高い評価を受けているスタジオ、The Mill は、毛皮に覆われた巨大なクリーチャーが登場するアニメーション スポットをいくつも短期間で制作する必要に...