uGUIのUIにカスタムのシェーダーを適用させる時は基本的に、公式のビルトインシェーダからUI-Defaultを引っ張ってきて、これを下地にコーディングすることでカスタマイズします。
(そうしないとuGUIで用意しているマスク等の機能が働かなくなるのと、実行時にワーニング吐きまくったりする)。
その標準で用意されている機能の中の、ステンシルの比較関数についてですが、外から変更できるようにStencil Comparisonとしてパラメータ化されています。
この値に何が設定されるとどうなるか、ですが、なぜかこちらの公式マニュアルだと、Enumの定義順通りに載っていない罠が仕掛けられており、ちょっと混乱したのでメモしておきます。
※ちなみにStencil Operationについては定義順通りに記載されているようです。
CompareFunction(比較関数)
項目 | 値 | 説明 |
---|---|---|
Disabled | 0 | ステンシルテストを無効にします。 |
Never | 1 | 常にステンシルテストを通しません。 |
Less | 2 | ピクセルのレファレンス値がバッファの値より小さい場合のみレンダリングします。 |
Equal | 3 | ピクセルのレファレンス値がバッファの値と等しい場合のみレンダリングします。 |
LEqual | 4 | ピクセルのレファレンス値がバッファの値より小さいか等しい場合のみレンダリングします。 |
Greater | 5 | ピクセルのレファレンス値がバッファの値より大きい場合のみレンダリングします。 |
NotEqual | 6 | ピクセルのレファレンス値がバッファの値と等しくない場合のみレンダリングします。 |
GEqual | 7 | ピクセルのレファレンス値がバッファの値より大きいか等しい場合のみレンダリングします。 |
Always | 8 | 常にステンシルテストをパスさせます。デフォルト値。 |
参考リファレンス
Unity マニュアル - ShaderLab:ステンシル
Unity Scripting API - CompareFunction
Unity Scripting API - StencilOp