LoginSignup
11
7

More than 3 years have passed since last update.

[UE4]RenderDoc(PIXも!)でシェーダーのアセンブラを読む方法

Posted at

描画結果がおかしくなった時、最適化してみた結果を見る時、酒の肴に読みたい時等々、シェーダーアセンブラを読む機会は偶に出てくると思います。
UE4+RenderDocでは簡単に今描画しているシェーダーのアセンブラを読むことが出来ます。


ターゲットによって変わるのでRenderDoc上のアセンブラを過信し過ぎるのも駄目だけど

UE4+RenderDocに関してはEpic Games JapanのSaitoさんが素晴らしい記事を書いてくれています
(若干のネタ被り)

RenderDocキャプチャーまで

各所で解説されていますのでざっくり書きます

  1. プラグインブラウザ
    • image.png
  2. 「RenderDoc」で検索、「Enabled」にチェック、「Restart Now」でエディター再起動
    • image.png
  3. Viewport右上のボタンクリック
    • image.png
  4. RenderDocが立ち上がる

RenderDocキャプチャーからシェーダーアセンブラを開くまで

  1. 左側の「EventBrowser」で確認したい描画パスを選択します
    • image.png
      • よく見るのはBasePassやPostProcessingの中でしょうか
  2. 選択したら、「Pipeline State」タブ→「VS」(VertexShader)か「PS」(PixelShader)→その下の「→View」ボタン
    • image.png
  3. そのシェーダーのアセンブラコード!
    • image.png
  4. 差分とかを見たい時はテキストエディタ等に貼り付けてDiffを取ったりしています。
  5. ピクセルデバッグを行いたい場合は、下記と同様で「Debug」ボタンを押せば行えます

ちなみに、マテリアルのInstructionsは、このシェーダーの行数になります。命令数。
image.png

PIXキャプチャーまで

(なんでPIX?)
(個人的に見やすさではRenderDocより好きです。パッケージ化した後前提で手軽さ無いですけど……)
(あとちょっと使う機会があったのでメモ代わりに)

  1. プロジェクトでパッケージを作ります。PC版はWin64で作ります
  2. 「Select Target Process」で「Launch Win32」でパス設定、コマンド引数に「-windowed -dx12」
  3. 「Launch For GPU Capture」がONになっているのを確認して「Launch」ボタン
    • image.png
  4. パッケージ化したプロジェクトが立ち上がりますので、GPUキャプチャーしたいタイミングで先程の下部にある「GPU Capture」ボタン
    • image.png
  5. キャプチャーした絵が出てくるのでダブルクリック
    • image.png

PIXでアセンブラを開くまで

  1. 「Pipeline」タブを開いて「Click here to start analysis」 をクリックします
    • image.png
  2. 起動していたプロジェクトが終了して、解析モードに入ります
  3. 「Events」タブから調べたいパスを選択すると下部の「Pipeline」タブに情報が出ます。Shaderをクリックして
    • image.png
  4. 右にある「DXBC」をクリックするとアセンブラコード!
    • image.png

取った後どうするの?

デバッグでしたらそのままピクセルデバッガで追いかけたりします。
特に 0 で div するのとか注意して見てます。
最適化でしたら、何か負荷高いけど一杯テクスチャをsampleしていないかとか、[branch] の確認とかします。
後はシェーダーコンパイラの挙動確認とかを見たりします。
 
 
 
 
(とはいえ僕は流石にデバッグ以外では普段ここまで調べて書かないです……ここ気にする前に全体をプロファイルしましょう)

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7