技术美术知识学习_03:模板测试与深度测试

一、模板测试与深度测试原理

 

1.1 Part 1:

Stencil Test :模板测试,在输入片段的模板上进行,以确定片段是否该被拒绝说到模板测试,就要先说到模板缓冲区。模板缓冲区与颜色缓冲区和深度缓冲区类似,模板缓冲区可以为屏幕上的每个像素点保存个无符号整数值(通常的话是个8位整数)。这个值的具体意义视程序的具体应用而定。在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值。这个比较的过程被称为模板测试。模板测试发生在透明度测试(alphatest)之后,深度测试(depth test)之前。如果模板测试通过,则相应的像素点更新,否则不更新。

1.2 Part 2:

Stencil Test

模板缓冲区(StencilBuffer)可以为屏幕上的每个像素点保存一个无符号整数值,这个值的具体意义视程序的具体应用而定.在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值.这个比较的过程被称为模板测试.
将StencilBuffer的值与ReadMask与运算,然后与Ref值进行Comp比较,结果为true时进行Pass操作,否则进行Fail操作,操作值写入StencilBuffer前先与WriteMask与运算.
模版缓冲中的默认值为:0
公式:(Ref & ReadMask) Comp (StencilBufferValue & ReadMask)

1.3 Part3:

Stencil Test

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(二进制位11111111),即读取的时候不对Ref的值和模板缓冲中的值产生修改,读取的还是原始值.
WriteMask:    WriteMask的值是当写入模板缓冲时进行的按位与操作,取值范围是0-255的整数,默认值也是255,即不做任何修改.
Comp:    定义Ref与模板缓冲中的值比较的操作函数,默认值为always.
Pass:    当模板测试(和深度测试)通过时,则根据(stencilOperation值)对模板缓冲值进行处理,默认值为keep.
Fail:    当模板测试(和深度测试)失败时,则根据(stencilOperation值)对模板缓冲值进行处理,默认值为keep.
ZFail:    当模板测试通过而深度测试失败时,则根据(stencilOperation值)对模板缓冲值进行处理,默认值为keep.

深度测试:拿当前像素的深度值与深度缓冲中的深度值进行比较,默认值为LEqual。可通过在属性中添加枚举UnityEngine.Rendering.CompareFunction

Disabled: 禁用,相当于永远通过。
Never: 于永远不通过。
Less:小于,表示如果当前像素的深度值小于深度缓冲中的深度值,则通过,以下类同。
Equal:等于。
LEqual:小于等于。
Greater:大于。
NotEqual:不等于。
Gequal:大于等于。
Always:永远通过。

二、模板测试与深度测试用途

三、关键代码:

 

1.4 Part4:实现效果

1.5 Part5:关于更多深度测试与模板测试详细内容参考Unity_Shader入门精要、bilibili百人计划《霜狼》!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值