UnityテンプレートテストStencil


Stencil


テンプレートバッファ(StencilBuffer)は、画面上の各画素点に符号のない整数値を保存することができ、この値の具体的な意味はプログラムの具体的な応用によって異なる.この値を予め設定する基準値と比較する、比較結果に基づいて対応する画素点の色値を更新するか否かを決定することができる.この比較の過程をテンプレートテストと呼ぶ.StencilBufferの値とReadMaskを演算する、その後Refの値とCompを行い、結果trueの場合はPass操作を行い、そうでない場合はFail操作を行い、操作値をStencilBufferに書き込む前にWriteMaskと演算を行う.数式:(Ref&ReadMask)Comp(StencilBufferValue&ReadMask)
Stencil {
Ref [_Stencil]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
Comp [_StencilComp] ((UnityEngine.Rendering.CompareFunction))
Pass [_StencilOp] (UnityEngine.Rendering.StencilOp)
Fail [_Fail]
ZFail [_ZFail]

}Ref:テンプレートバッファの値と比較するために設定参照値.取値範囲のビットは0-255の整数である.ReadMask:ReadMaskの値は、Refの値およびテンプレートバッファの値とビットアンド(&)操作を行い、値範囲も0-255の整数で、デフォルト値は255(バイナリビット11111111111)である、つまり、読み出し時にRefの値とテンプレートバッファの値を変更することなく、読み出したのは元の値である.WriteMask:WriteMaskの値は、テンプレートバッファへの書き込み時に行うビットアンドアクションである、値範囲が0-255の整数であり、デフォルト値も255である、つまり何の変更もしない.Comp:Refとテンプレートバッファの値を比較する操作関数を定義し、デフォルト値はalways.Pass:テンプレートテスト(および深さテスト)に合格すると、(stencilOperation値)に従ってテンプレートバッファ値を処理する、デフォルト値はkeepである.Fail:テンプレートテスト(および深さテスト)に失敗すると、(stencilOperation値)に基づいてテンプレートバッファ値が処理され、デフォルト値はkeepとなる.ZFail:テンプレートテストに合格する深さテストに失敗した場合、(stencilOperation値)に従ってテンプレートバッファ値を処理する、デフォルト値はkeepである.

Comp


Less:Greater:">"に相当する操作、すなわち左>右側のみテンプレートテストに合格し、ピクセルをレンダリングする.Lequal:「<=」の操作に相当する、すなわち左<=右のみ、テンプレートテストに合格し、画素をレンダリングする.Gequal:">="操作に相当する、すなわち左>=右のみ、テンプレートテストに合格し、画素をレンダリングする.Equal:「=」操作に相当する、すなわち左=右のみ、テンプレートテストに合格し、画素をレンダリングする.NotEqual:「!=」操作に相当します.すなわち、左のみです!=右側、テンプレートテストに合格し、ピクセルをレンダリングします.Always:数式の両側の値にかかわらず、テンプレートテストは常に合格し、ピクセルをレンダリングします.Never:数式の両側の値にかかわらず、テンプレートテストは常に失敗し、画素は捨てられます.

操作


Keep:現在のバッファの内容、すなわちstencilBufferValueは変わらない.Zero:0をバッファに書き込む、すなわちstencilBufferValueが0になる.Replace:参照値をバッファに書き込み、stencilBufferValueにreferenceValueを割り当てる.IncrSat:現在のテンプレートのバッファ値を1とし、stencilBufferValueが255を超える場合は255、すなわち255を超えない.DecrSat:現在のテンプレートのバッファ値を1に減らし、stencilBufferValueが0を超える場合は0に保持します.つまり、0以下ではありません.NotEqual:「!=」操作に相当します.すなわち、左のみです!=右側、テンプレートテストに合格し、ピクセルをレンダリングします.Invert:現在のテンプレートバッファ値をビット単位で反転する.IncrWrap:現在のバッファ値に1を加える、バッファ値が255を超えると0になる(その後、自己増加を続ける).DecrWrap:現在のバッファの値は1を減算し、バッファ値が0の場合は255になる(その後、自己減算を継続する).