图形学进阶——深度与模板测试

本文详细介绍了图形学中的深度测试(Z-Test)和模板测试(Stencil Test)。深度测试涉及深度缓冲区、ZWrite、ZTest等概念,模板测试则涵盖其逻辑和在Unity3d中的应用。文章通过Unity示例,解释了如何使用这两种测试实现遮罩、水波纹等视觉效果,并探讨了防止深度冲突的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的像素才会通过模板缓冲区
在这里插入图片描述
最终效果:
在这里插入图片描述

4 .总结

在这里插入图片描述

5. 模板测试扩展

在这里插入图片描述

二、深度测试 Z-Test

1.一些效果

在这里插入图片描述

2. 什么是深度测试

①从渲染管线上看

在这里插入图片描述
图中可以看到深度测试是发生在逐片元操作的,而且处于模板测试之后,透明度混合之前

还有一个特殊的技术叫early-Z,它会发生在片元着色器之前

<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值