3Dゲームなど、シェーダーを使用したアプリを開発する際、描画がうまくいかないがブレークポイントを置いても原因がわからないといった経験はありませんか?
RenderDocを使用することで、テクスチャやバッファの中身を直接確認し、GPU内部の処理を可視化することが可能になります。
本記事では神ツールであるRenderDocを使用して、「キャプチャを取る」「フレームを確認する」といった基本的な操作方法を紹介します。
RenderDocとは
RenderDocとは、GPUの描画処理を「1フレーム単位」でキャプチャし、詳細に解析できるオープンソースのグラフィックスデバッガーです。DirectX、Vulkan、OpenGLなど幅広いAPIに対応しており、ゲームや3Dアプリ開発でのデバッグに必須級のツールです。
インストールと起動
上記のサイトに飛び、Downloadボタンをクリックし、自身のデバイスに対応するバージョンのRenderDocをインストールしてください。
ファイルを開くとセットアップウィンドウが表示されるので、設定を行います。

本記事ではTypical(一般的な機能)を選択し、初心者に必要な機能をすべてインストールします。
そのままNextをクリックします。

Installをクリックしてインストールを行います。

インストールが完了したらFinishをクリックしてセットアップを閉じます。
これで起動する準備が完了しました。

そのままRenderDocを起動します。
検索バーから起動するのが最も簡単かと思います。

下画像の画面が表示されていたら正常にインストールが完了しています。

キャプチャの取り方
キャプチャとは、そのフレームのGPU内部のスナップショットのようなものです。
RenderDocでデバッグをする際に必須となる作業ですので、まずはこの工程を行います。
アプリケーションの起動
ウィンドウ右側のLaunch Applicationタブ内を設定することで、起動するアプリケーションを選択します。
まずはExecutable Pathに実行ファイルのパスを指定します。

次に、Working Directoryを指定します。
Working Directoryは、アプリケーションが相対パスを参照する場所のことです。

画面下の中央あたりにあるLaunchボタンを押すことで、パスが正しく設定されていればアプリケーションが起動されます。

キャプチャの実行
実行中に、F12キーを押すことで、キャプチャすることが出来ます。
キャプチャを行うと、その瞬間のフレームが保存され、RenderDocのウィンドウにキャプチャファイルが追加されます。
複数フレームをキャプチャして後から選ぶことも可能です。

RenderDocのメインウィンドウに戻ると、取得したキャプチャが一覧に表示されます。
ダブルクリックで解析画面に移動し、フレームの中身を確認できます。

フレームの確認方法
RenderDocでは、複数の解析ウィンドウを駆使してデバッグを行うことになります。
このセクションでは各解析ウィンドウを紹介します。
Event Browser
ウィンドウ左(デフォルトの配置では)にEvent Browserというものがあり、キャプチャしたフレーム内の描画イベントが時系列で一覧表示されます。
ここを確認することで、どの順番で描画が行われたかを確認できます。

Pipeline State
GPUパイプラインの各ステージ(VertexShader, PixelShaderなど)の状態を確認できます。
ここを確認することで、入力・出力のデータやシェーダーの設定を追跡できます。

Texture Viewer
実際に描画されたテクスチャを直接確認できます。
テクスチャへの描画自体はうまくいっているのかどうかを確認する際に使用します。

Mesh Viewer
このウィンドウでは頂点データやシェーダー出力を確認できます。
主に座標のずれや頂点が破損してないかを確認する際に使用します。

キャプチャファイルの保存・利用
キャプチャファイルの保存方法
左上GUIのFileからSave Captureをクリックすることで、任意の名前でキャプチャファイル(.rdc)を保存することが出来ます。
保存しておくことで、後で同じキャプチャを確認したり、チームに共有して複数人で同じキャプチャのデバッグを行うことも可能になります。


キャプチャファイルの利用
GUI左上のFile->Open Captureをクリックしてください。

任意のキャプチャファイル(.rdc)を選択することで、保存されたファイルの解析を行うことが出来ます。

総括
-
RenderDocを使用することでGPUを可視化し、高度なデバッグを行うことが出来る -
キャプチャファイルを保存することで、複数人で共有してデバッグを行うことが出来る