Unity Stencil 模板测试概要

模板测试与透明度测试以及深度测试类似,模板测试也是用来决定一个像素点是否渲染的过程。其中要用到的模板缓冲区与颜色缓冲区以及深度缓冲区类似,模板缓冲区可以为屏幕上的为每个像素点保存一个无符号整数值(通常的话是个8位整数)。模板测试发生在透明度测试(alpha test)之后,深度测试(depth test)之前。其中所有的测试都通过,才会更新颜色缓冲区中的颜色。

一般来说,stencil完整语法格式如下:

stencil{
	Ref referenceValue
	ReadMask  readMask
	WriteMask writeMask
	Comp comparisonFunction
	Pass stencilOperation
	Fail stencilOperation
	ZFail stencilOperation
}
关键字 实际意义 默认值
Ref 作为与缓冲区中的值比较的参考值。
ReadMask (ref & readMask Comp函数 stencilBuffer & readMask)的bool值决定是否通过模板测试 255
WriteMask (ref & writeMask)的值在修改方式为replace的情况,整数值将覆盖buffer,其他修改方式无效 255
Comp 定义参考值与模板值比较的方式,即决定的是模板测试通过与否的方式。 Always
Pass 定义模板测试与深度测试皆通过时,基于参考值对模板值的修改方式。 Keep
Fail 定义模板测试不通过时,基于参考值对模板值的修改方式。 Keep
ZFail 定义模板测试通过,深度测试不通过时,基于参考值对模板值的修改方式。 Keep
 
ComparisonFunction可选类型:
Greater

相当于“>”操作,即仅当左边>右边,模板测试通过,渲染像素

GEqual

相当于“>=”操作,即仅当左边>=右边,模板测试通过,渲染像素

Less

相当于“<”操作,即仅当左边<右边,模板测试通过,渲染像素

LEqual

相当于“<=”操作,即仅当左边<=右边,模板测试通过,渲染像素

Equal

相当于“=”操作,即仅当左边=右边,模板测试通过,渲染像素

NotEqual

相当于“!=”操作,即仅当左边!=右边,模板测试通过,渲染像素

Always 不管公式两边为何值,模板测试总是通过,渲染像素
Never 不敢公式两边为何值,模板测试总是失败 ,像素被抛弃
 

StencilOperation可选类型:

Keep 保留当前缓冲中的内容,即stencilBufferValue不变
Zero 将0写入缓冲,即stencilBufferValue值变为0
Replace 将参考值写入缓冲,即将referenceValue赋值给stencilBufferValue
IncrSat stencilBufferValue加1,如果stencilBufferValue超过255了,那么保留为255,即不大于255
DecrSat stencilBufferValue减1,如果stencilBufferValue超过为0,那么保留为0,即不小于0
Invert 将当前模板缓冲值(stencilBufferValue)按位取反
IncrWrap 当前缓冲的值加1,如果缓冲值超过255了,那么变成0,(然后继续自增)
DecrWrap 当前缓冲的值减1,如果缓冲值已经为0,那么变成255,(然后继续自减) 

你可能感兴趣的:(Unity,Shader)