之前经常忘记模板测试的用法,现在把这些用法记录在博客上免得以后忘记了。
在Shader的Pass开头写Stencil{ }结构体,如果每个Pass都用,则可以提到外面。
Stencil {
Ref 2 //参考值为2,stencilBuffer值默认为0
Comp always //stencil比较方式是永远通过
Pass replace //pass的处理是替换,就是拿2替换buffer 的值
ZFail decrWrap //ZFail的处理是溢出型减1
}
Ref 2:设置参考值。除了2,还可以设置0-255的任意数。
Comp equal:表示通过模板测试的条件。这里只有等于2的像素才算通过测试。除了equal,还有Greater、Less、Always、Never等,类似ZTest。
Pass keep:表示通过模板测试和Z测试(注意是都通过)的像素,怎么处置它的模板值,这里我们保留它的模板值。除了keep,还有Replace,IncrWrap(循环自增1,超过255为0),IncrSat(自增1,超过255还是255),DecrWrap,DecrSat等。
Fail decrWrap:表示没通过模板测试的像素, 怎么处置它的模板值。这里为循环自减。
ZFail keep:表示通过了模板测试但没通过Z测试的像素,怎么处置它的模板值。这里为保持不变。
除此之外,还有ReadMask和WriteMask语法,用来提取Ref值或模板缓存的某几位,默认是255,全部提取。