StencilBuffer模板缓冲

1、Stencil buffer概念:

屏幕平面好比一块大的平面,然后每个像素都有自己对应的stencil值,可以把他理解为一个数字标记,然后所有像素的初始默认stencil值都是0
在这里插入图片描述

这个时候如果想用到Stencil Buffer,那么就要去改变这些像素的值来舍弃或保留这些像素,相当于去判断渲染哪些像素

stencil buffer其实是zBuffer其中的一部分,StencilTest在ZTest之前,两者紧密联系,存在于显存内的某一片区域中。目前的显卡架构中,比如在depth/stencil缓冲区某个32位的区域中,有24位记录着像素A的depth数据,紧接着8位记录着像素A的stencil数据。

在这里插入图片描述

2、API:

在这里插入图片描述

unityShader中可以直接定义Stencil结构,pass,subshader中都可以,类似ztest

Ref referenceValue,这个是设定参考值,stencilbuffer里面的值会与他比较

ReadMask readMask,这个是在比较参考值和buffer值的时候用的,用于读取buffer值里面的值。

WriteMask writeMask,这个是写入buffer值用的。

Comp comparisonFunction,让Ref的值和Stencil Buffer里的值比较,注意比较时是左边是Ref,右边是Stencil Buffer里的值。大致有Greater,GEqual,Equal等八种比较方式,具体待会列图。

Pass stencilOperation,这个是当stencil测试和深度测试都通过的时候,进行的stencilOperation操作方法。改变Stencil Buffer里的值,只改变Stencil Buffer里的Stencil值,不改变任何其他东西,什么color,depth值都不会牵扯到

Fail stencilOperation,这个是在stencil测试通过的时候执行的stencilOperation方法。这里只要stencil测试通过就可以了

ZFail stencilOperation,这个是在stencil测试通过,但是深度测试没有通过的时候执行的stencilOperation方法。

一般Comp,Pass,Fail,ZFail只用于正面的渲染,除非有Cull front,这样的语句出现。如果要渲染两面,可以用CompFront,PassFront等和CompBack,PassBack等。意思和上面的一样

比较方式:

Disabled Depth or stencil test is disabled. 0
Never Never pass depth or stencil test. 1
Less Pass depth or stencil test when new value is less
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值