本日はシェーダー学習枠です。
現在MRTKやMRGTでグラフィックを担当されているMicrosoftのCameronさんによるMR向けのShader解説セッションを読み解いています。
前回までは§4のシェーダーの実行をコードを読み解きながら見ていました。
今回は§6のデバッグです。
通常のプログラミング言語の場合ログの出力を行いデバッグを行うことが一般的ですが、Shaderの場合筆者もよくデバッグ方法に関して知らないことがあったので読み解いていきます。
〇セクションの内容
セッションは次の8つのセクションで区切られています。
§1Shaderとは何か?
§ 2 Shaderの実行
§3 マテリアルとレンダーモード
§4 MixedReality における注意点
§5 パフォーマンスと最適化ツール
§6 デバッグ
§7 その他のリファレンス
§8 Q&A
〇Shaderのデバッグ
Shaderのデバッグはとても難しいです。
一般的に昨日紹介したパフォーマンスツールなどで処理の負荷を見ますが、そもそもシェーダーのプログラム上のデバッグを行う場合はカラー出力を使用します。
例えばフラグメントシェーダー内の次のようなコードではUVのx成分が0.5以下の値を持っている場合その領域は赤が出力されます。
if(i.uv.x <0.5) { retuen fixed4(1,0,0,1); }
このようにif文で条件を決め、色を返すことでShaderのデバッグが行われます。
ShaderではUnityC#のDebug.Log("Hoge")のようなチェック方法を次のようにします。
これが最も簡単なデバッグ方法ですが、もう少し本格的に行う場合はFrame Debuggerを使用します。
また、RenderDocも便利なデバッグ機能になります。
RenderDocはUnityのFrameDebugger同様に1フレーム内のレンダリングを見ることができます。
デバッグはやはり色情報を出力することが一般的なようです。
FrameDebuggerは使ったことがあるものの見方など詳しく理解しているわけではないので改めて調査していきます。