GLSLのデバッグを行う方法 in Unity

  • 5
    Like
  • 0
    Comment
More than 1 year has passed since last update.

GLSLのデバッグ方法について、以下の記事があったので理解した部分についてメモ。

GLSL Programming/Unity/Debugging of Shaders

コンパイルエラーが出た場合はUnityのInspectorに表示されるので問題ありませんが、Unityから渡される準備されている変数にどんな値が入っているかは出力できません。

そこで、上記記事では適当なGameObjectにシェーダを適用させ、色として出力することでどんな値が入っているのかを見る、というのがデバッグ方法として書かれています。

cap.jpg

上記のGameObjectに適用しているシェーダは以下です。

#ifdef VERTEX

void main()
{
    color = gl_MultiTexCoord0;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

#endif

#ifdef FRAGMENT

void main()
{
    gl_FragColor = color;
}

#endif

おそらく上記はポリゴンの向きなどによる問題だと思いますが、色を見てみるとそれぞれ図のような値になっているようです。
つまりこれがデバッグ方法です。
確認したい変数をそのまま色として扱い、実際に表示してみてどんな色になるかを確認する、という手順です。

これは、GLSLが基本的にすべて-1.0〜1.0(あるいは0.0〜1.0)の範囲に収まっているからできるものだと思います。

余談ですが、どうやらCubeのプリミティブのgl_Vertexの範囲は-0.5〜0.5のようです。
なのでこういうものの場合は色として表示できるように補正しないとなりません。(これの場合はそれぞれの0.5を加算すれば0.0〜1.0に補正されます)