【问题标题】:Will the depth be written immediately after Early Z passes?Early Z通过后会立即写入深度吗?
【发布时间】:2021-10-06 15:57:22
【问题描述】:

如果不是,那为什么要丢弃被打断的 earlyZ? 假设B前面有一个物体A,A在fs中有一个discard操作。假设A在屏幕坐标(100, 100)处的像素通过了Early z测试,那么它在fragment shader中被丢弃,所以A 没有机会写深度。现在渲染 B!显然 A 在 (100,100) 处不会对 B 产生任何影响。如果是这样,那为什么A的EarlyZ需要被打断?

【问题讨论】:

  • 我没有完全明白你的问题,但从听起来,还有一种叫做透明度的东西,它会影响像素和深度将被丢弃/渲染的方式。
  • @SnipingPoodle 不抱歉,但“透明度”对片段的深度没有影响。当您使用Blending 时,透明度会起作用,但它与Depth Test 无关。
  • 哎呀,对不起。
  • @SnipingPoodle 我只想知道 early-z 是否在 FS 之前将深度写入缓冲区。

标签: opengl graphics depth-testing


【解决方案1】:

是的,深度写入(就硬件而言)是深度测试的一部分。这是一个原子的、有序的读/修改/写操作,所以硬件就是这样实现的。

因此,fragment testing before the fragment shader 也表示writing those fragment values before the fragment shader。所以即使 FS 丢弃了 Fragment,它的部分组件已经被写入,不能被不写。

因此,如果 FS 在其中包含 discard 语句,则 GPU 不会使用早期测试,除非 FS 指定它必须这样做。如果它确实指定了,那么discard 只会部分丢弃该片段。

请注意,这还包括遮挡查询计数和模板测试/写入等内容。

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多