ShaderTips

シェーダーTips

主にUnityシェーダーについての記事を書いています。

ステンシルテストの各プロパティ解説

今回は、ステンシルテストにおける主要なプロパティである RefReadMaskCompWriteMask について、例とともにわかりやすく解説します。

docs.unity3d.com

Ref(リファレンス値)

Ref は、ステンシルバッファの値と比較する基準値です。
0〜255 の範囲で指定され、内部ではビット単位で扱われます。

Ref = 3;  // 0000 0011(2進表記)

この値と、ステンシルバッファの値が ReadMaskComp の条件に基づいて比較されます。

ReadMask(リードマスク)

ReadMask は、比較に使うビット位置を指定します。
1 のビットのみが比較対象になり、0 のビットは無視されます。

Ref = 3;          // 0000 0011
ReadMask = 1;     // 0000 0001

この例では、最下位ビット(ビット0) のみが比較対象です。
つまり、ステンシルバッファ & 1 == Ref & 1 の条件で比較されます。

Comp(比較条件)

Comp は、Ref とステンシルバッファの値をどのように比較するかを指定します。
代表的な比較条件は以下のとおりです:

  • Equal: 一致する場合に合格
  • NotEqual: 一致しない場合に合格
  • Less: バッファの値が Ref より小さい場合に合格
  • Greater: バッファの値が Ref より大きい場合に合格

例:Equal 条件

Comp = Equal;
Ref = 2;          // 0000 0010
ReadMask = 3;     // 0000 0011

この場合、下位2ビット10 と一致するかどうかで判定されます。

WriteMask(ライトマスク)

WriteMask は、ステンシルテストに合格した場合に書き込むビット位置を指定します。
WriteMask の各ビットが 1 になっている場所のみが書き込み対象となり、他のビットは変更されません。

WriteMask = 2;    // 0000 0010

この場合、Ref のビット 1 のみがステンシルバッファに反映されます。