しゅみぷろ

プログラミングとか

VisualStudioによるUnityシェーダーのデバッグ

はじめに

docs.unity3d.com

VSによるデバッグの前にいくつか注意事項があります。

注意

  • Unity エディターは、内部に複数の子ウィンドウが含まれています。正しいウィンドウをキャプチャすることを確実にするために、「Maximize on Play」をチェックして、キャプチャする前にPlayボタンをクリックしましょう。これは、グラフィックスデバッガが誤ったウィンドウのフレームをキャプチャすることがあるためです。ですが、これでも正しいウィンドウがキャプチャされるという保証はありません。これがフレームのキャプチャでUnityエディターの使用を推奨していない理由です。

  • 現在ではUnityがDirectX 11で実行されている場合にデバッグが可能です。Player Settings (PC、Mac、LinuxStandalone) -> Other SettingsからDirectX 11を選択することができます。

デバッグできる環境を整える

手順

  • デバッグするシェーダーに「#pragma enable_d3d11_debug_symbols」を定義します。

    f:id:es_program:20160426001515p:plain

  • Visual Studioで空のC++プロジェクトを作成。

    f:id:es_program:20160426001523p:plain

  • プロジェクトのプロパティ設定画面からデバッグを選択します。

    f:id:es_program:20160426001535p:plain

  • コマンドにはデバッグするアプリケーションのパスを指定します。今回はUnityEditorでシェーダーのデバッグをするのでここにUnityの実行ファイルのパスを設定します。ビルドしたものをデバッグする場合などではここを変更します。

  • コマンド引数にはコマンドで指定したファイルの実行時に与えることができるコマンド引数を指定します。UnityでDirectX 11シェーダーのデバッグを行う場合はここに「-force-d3d11」を指定し、UnityEditorでDirectX 11の実行を強制します。Unityのコマンド引数はこちら

    f:id:es_program:20160426001553p:plain

  • グラフィックスの診断を開始します。

    f:id:es_program:20160426001605p:plain

デバッグしてみる

グラフィックスの診断を開始し、UnityEditorを横に並べた画面です。

f:id:es_program:20160426001618p:plain

デバッグ

1. フレームのキャプチャ
2. キャプチャしたフレームの詳細をみていく

という手順になります。

フレームのキャプチャ

フレームのキャプチャを行うには、以下のボタンをクリックし、UnityEditorをアクティブにします。

f:id:es_program:20160426001636p:plain

数フレームまとめてキャプチャする場合は以下のようにフレーム数を選択します。

f:id:es_program:20160426001648p:plain

フレームをキャプチャすると、キャプチャしたフレームのサムネイルが表示されます。

f:id:es_program:20160426001704p:plain

キャプチャしたフレームの詳細を見ていく

描画イベントやテクスチャのピクセルから、シェーダーの情報やレンダリングターゲットについての情報を見ることができます。

f:id:es_program:20160426001715p:plain

Raymarching.shaderの実行内容を解析したい場合であれば、例えばグラフィックスイベント一覧から「Raymarching」などと調べ、それらしい描画イベントを見つけます。

f:id:es_program:20160426001730p:plain