美文网首页
提前的深度模板测试(Early-Z)

提前的深度模板测试(Early-Z)

作者: 陈成_Adam | 来源:发表于2024-08-04 10:58 被阅读0次

深度测试的目的是把 3D 模型中被遮挡的像素部分丢弃。
例如,射击游戏中,某个门背后藏了一个老 6,我们看到的只有门,而那个老 6 是被门遮挡的,不需要显示出来。

怎么判断是否被遮挡?
每个像素都有深度值,也就是像素距离眼睛的距离,距离近的会遮挡距离远的。

OpenGL 规范中所描述的渲染管线,像素的深度测试是发生在像素着色之后的。
而主流显卡都提供了 EarlyZ 的功能,即提前深度测试。将深度测试提前于像素着色。

EarlyZ 的好处很明显:可以提前扔掉一些被遮挡的像素,避免在像素着色和像素后处理中额外浪费功耗和时间。

能用 EarlyZ 就不用 LateZ。

EarlyZ 什么时候开启?满足以下任意一个条件时,不能启用 EarlyZ,
● 像素着色阶段会修改像素的深度时
● 像素着色阶段会丢弃某些像素时(使用 Discard 或者 Clip 关键字),
● 开启 Alpha 测试时
● 开启 Alpha-to-coverage 功能时

为何在像素着色阶段会修改像素的深度时不能启用 EarlyZ?
举一个反例,
有一个像素的深度值是 0.3,
深度测试的设置:深度值小于 0.5 则丢弃;像素着色的设置:将像素的深度修改为 0.8
期望的结果是不丢弃该像素,但 EarlyZ 阶段会丢弃该像素,因为 0.3 小于 0.5。

为何在像素着色阶段会丢弃某些像素时(使用 Discard 或者 Clip 关键字)不能启用 EarlyZ?
举一个反例,
有一个像素的深度值是 0.8,其对应位置的深度缓冲区的深度值为 0.3,
深度测试的设置:深度值小于 0.5 则丢弃;像素着色的设置:丢弃上述像素
期望的结果是深度缓冲区的深度值为 0.3,但 EarlyZ 阶段会修改为 0.8,因为深度测试通过了。

为何在开启 Alpha 测试时不能启用 EarlyZ?
举一个反例,
与上面的例子类似,开启 Alpha 测试会丢弃某些像素,如果开启 EarlyZ 会错误地更新深度缓冲区。

为何在开启 Alpha-to-coverage 功能时不能启用 EarlyZ?
举一个反例,
与上面的例子类似,开启 Alpha-to-coverage 功能会丢弃某些像素,如果开启 EarlyZ 会错误地更新深度缓冲区。

相关文章

  • Shader-模板测试

    模板测试 模板测试在透明度测试之后,在深度测试之前 使用模板缓冲区最重要的两个值:当前模板缓冲值(stencilB...

  • 【六十五,高级OpenGL-02模板测试】

    模板测试 片段着色器处理完之后,模板测试就开始执行了,它能丢弃一些片段,被保留下来的片段会进入到深度测试,深度测试...

  • 模板测试 深度测试

    模板测试 主要代码 先绘制一个模板 在绘制一个需要绘制的纹理 深度测试 深度测试 两个图片,一个图片旋转,不...

  • NDK OpenGL ES 3.0 开发(十一):模板测试

    该原创文章首发于微信公众号:字节流动 OpenGL ES 模板测试 模板测试与深度测试类似,主要作用是利用模板缓冲...

  • 深度/模板测试

    深度测试 深度缓冲(Depth Buffer)存储每个片段的信息,深度缓冲由窗口系统自动创建并将其深度值存储为 1...

  • 模板测试

    其实UGUI的Mask,就是使用了模板测试。 什么是模板测试?(Stencil Buffer)如果开启了模板测试,...

  • 测试用例和测试计划

    ***测试用例的******image.png ******模板介绍*** 测试用例的模板 测试用例定义: 要素:...

  • 中高级测试人员怎么保证产品质量

    测试流程的把控: 需求的把控 测试人员必须参与需求评审,提前介入项目。要深度挖掘显示需求和隐式需求(这部分东西比较...

  • 模板解析

    模板解析函数 测试 测试结果

  • Early-Z

    Advanced graphics techniques - Getting started (arm.com)[...

网友评论

      本文标题:提前的深度模板测试(Early-Z)

      本文链接:https://www.haomeiwen.com/subject/tustkjtx.html