Early Depth testing

正常情况下,depth testing(深度测试)是在屏幕空间进行的,是在fragment shader运行后,stencil testing运行后。

现在大部分GPUs支持Early Fragment Test也称为Early Depth Testing(提前深度测试),这是一种硬件特性。Early depth testing允许在fragment shader运行前进行depth test。只要一发现某个fragment不可见,则丢弃它,不再运行相应的fragment shader。这是一种性能优化。

使用early depth test硬件特性的最有效的方法是提前运行一个pass,即提前运行一条特殊的渲染管线(pre-processing pass),这条渲染管线只用来写入depth buffer,其中Vertex Shader除也变换顶点位置别的啥也不干,Fragment Shader直接不存在

(关于渲染管线可以看这篇这篇文章)

另外,在OpenGL中强制开启early depth test的方法是使用一个特殊的带有以下layout qualifier的fragment shader:

layout(early_fragment_tests) in;

这也会使stencil test提前发生。

**注意: **Early depth testing的一个限制是:不能写入fragment的depth value。如果一个fragment shader会写入depth value,则early depth testing无法使用,OpenGL将不能提前计算出depth value。

另外,在OpenGL中深度测试默认是关闭的,需要手动打开 :

glEnable(GL_DEPTH_TEST); 

在打开深度测试的情况下,可以通过设置depth mask,禁止写入depth buffer而使用read-only depth buffer:

glDepthMask(GL_FALSE);  

除了depth test外,其实现代GPUs也允许一些别的测试提前于fragment shader发生,比如: stencil test、The pixel ownership test、scissor test(OpenGL4.2起最后两个总是提前发生)。

References:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值