为什么Aplha test会使得Early-z失效?

Alpha Test与Early-Z结合使用时可能导致深度测试错误,原因在于Alpha Test未通过的片段仍会在Early-Z阶段写入深度缓冲,导致后续应显示的片段被错误剔除。为解决此问题,通常在开启Alpha Test时会关闭Early-Z,确保正确的深度处理和渲染效果。
摘要由CSDN通过智能技术生成

在这里插入图片描述
如图

1、只开启Early-z,Early-Z从前往后(先A再B)写入深度值,先写入A的深度值,然后B发现自己的深度更大,会抛弃这些(粉红色)片段。到后面执行片段着色器的时候,B中被A所遮盖的那片粉红色区域就不会执行片段着色器了。

2、只开启AlphaTest,执行片段着色器的时候,假设A不会通过AlphaTest,自然不会往深度缓冲中写入深度值,所以再渲染B的时候,B发现深度缓冲还没人来过,就更新深度缓冲,并把自己的颜色写入颜色缓冲。

3、但是,如果同时开启了Early-Z和AlphaTest:首先执行Early-Z,会把A的深度写入深度缓冲。在片段着色器中,如果A的AlphaTest没通过,会把片段A丢弃,理应不会写入深度值(但是实际上Early-Z的时候已经写入了),然后对B:因为Early-z的时候B深度测试没通过,把粉红色部分的片段剔除了,自然这部分不会执行片段着色器。本来A被剔除了,就应该显示B,但是现在A和B都没了。

4、所以如果开启了Alphatest,就会关闭Early-z,A如果Alphatest通过,就会在深度缓冲中写入深度值,B再来的时候,发现自己的深度值比深度缓冲中的大,就不会写入颜色值和深度值。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值