Z Test & Stencil Test深度测试与模板测试
百人计划学习地址:图形 3.1 深度与模板测试 传送门效果示例
一、模板测试 Stencil Test
流程:
1. 什么是模板测试
① 从渲染管线出发
像素权限测试——》裁剪测试——》透明度测试——》模板测试——》深度测试——》混合等操作——》输出片元到帧缓冲区
② 从逻辑上理解
就是通过一定条件判断该片元或者片元属性执行抛弃操作还是保留操作
③ 从书面概念上理解
需要注意的是:模板测试发生在透明度测试之后,深度测试之前
2 .模板测试的语法表示
具体的含义如下:
- referenceValue :自己定义的模版参考值,每个片元或者说像素点就是用这个值进行比较
- readMask::读取掩码,取值范围也是0-255的整数,默认值为255。即读取的时候不对referenceValue和stencilBufferValue产生效果,读取的还是原始值
- writeMask:输出掩码,当写入模板缓冲时进行掩码操作(按位与&),writeMask取值范围是0-255的整数,默认值也是255,即当修改stencilBufferValue值时,写入的仍然是原始值。
- ComparisonFunction :重点,进行模板测试时候的判断方法,具体有以下几种
- Pass stencilOperation:条件满足后的更新操作
- Fail stencilOperation:条件不满足后的更新操作
- ZFail stencilOperation:模板测试通过,但是深度测试不通过的更新操作
上诉三种具体更新操作方法的值如下
3. Unity3d中使用模板测试
用作遮罩效果的shader:默认ref为1,总是通过模板测试,并替换模板缓冲区的值
用作显示在遮罩后的shader,需要满足equal的像素才会通过模板缓冲区
最终效果: