GLSLのデバッグ方法について、以下の記事があったので理解した部分についてメモ。
GLSL Programming/Unity/Debugging of Shaders
コンパイルエラーが出た場合はUnityのInspectorに表示されるので問題ありませんが、Unityから渡される準備されている変数にどんな値が入っているかは出力できません。
そこで、上記記事では適当なGameObjectにシェーダを適用させ、色として出力することでどんな値が入っているのかを見る、というのがデバッグ方法として書かれています。
上記の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に補正されます)