OpenGLのプログラムをRenderDocで見てみる

はじめに

この記事はシリーズ記事です。目次はこちら。

この記事ではデバッグのためのRenderDocの使い方をメモします。

2020 04 11 13 06 11

RenderDoc

OpenGLのプログラムを作ってきましたが、このプログラムが思うように動作しないということにも何度も直面すると思います。 その際にアプリケーションに色々と解析用のプログラムを書き加えてデバッグするのはなかなかつらいものがあります。

そこでRenderDocです。

RenderDoc

自分の作ったOpenGLなどのプログラムを指定するだけで簡単にレンダリングの様子を解析できる素晴らしいツールです。

使い方

Launch Applicationから解析したいプログラムとそのプログラムのWorking Directoryを指定してLaunchします。

2020 04 11 12 52 12

Launchするとアプリケーションが立ち上がるので、F12を押してフレームをキャプチャできます。

2020 04 11 12 54 18

キャプチャしたフレームについて次のように色々と解析できます。

まずはGPUの描画命令を一つずつ見ていく機能です。 Texture Viewerの左側のEvent Browserをクリックしていくことで途中のパスでの描画がどうなっているかを確認できます。

2020 04 11 12 55 59

各パスのInputのテクスチャとOutputの様子をテクスチャビューワーで確認できます。

InputのG-Bufferがどうなっているかとかも確認できます。

2020 04 11 12 57 50

アウトプットが複数ある場合もそれぞれのアウトプットについて描画されたものを見ることができます。

2020 04 11 12 56 24

Texture Viewerではデフォルトで0-1の範囲を描画していますが、これを0-100などとすることでHDRな画像も解析できます。

2020 04 11 12 58 58

Texture ViewerのOverlayではメッシュのワイヤーフレームや、デプステストステンシルテストが通ったか落ちたか、などなど様々な情報がひと目見てわかります。

次の画像はこのパスでDepthテストに通った部分が緑色で示されています。 デプステストで落ちる場合は赤色で示されることになります。

2020 04 11 13 00 51

Pipeline Stateでは各パイプラインの状態やUniform変数などの情報を閲覧できます。

2020 04 11 13 01 36

2020 04 11 13 01 52

描画がうまく行かないときにUniform変数がうまく渡せていないのか、Uniform変数は渡せているがシェーダが間違っているのかなどを切り分けできて良いです。

Mesh Viewerでは頂点シェーダの入力と出力、ジオメトリシェーダの出力のメッシュの確認ができます。

2020 04 11 13 03 49

2020 04 11 13 04 25

だいたいこのあたりの機能がわかっていれば、デバッグに必要なことはだいたい分かると思います。