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

为什么Aplha test会使得Early-z失效?_第1张图片
如图

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的时候已经写入了&

你可能感兴趣的:(Opengl)