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
IncrSatstencilBufferValue加1,如果stencilBufferValue超过255了,那么保留为255,即不大于255
DecrSatstencilBufferValue减1,如果stencilBufferValue超过为0,那么保留为0,即不小于0
Invert将当前模板缓冲值(stencilBufferValue)按位取反
IncrWrap当前缓冲的值加1,如果缓冲值超过255了,那么变成0,(然后继续自增)
DecrWrap当前缓冲的值减1,如果缓冲值已经为0,那么变成255,(然后继续自减) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值