关于Early-Z Culling(提前Z拣选)

1623 篇文章 23 订阅
1407 篇文章 2 订阅

http://blog.csdn.net/cywater2000/article/details/3465300


关于Early-Z Culling(提前Z拣选)


作者:cywater2000

日期:2008-12-7

来自:http://blog.csdn.net/cywater2000

 

其实以前在写流体模拟程序的时候用过Early-Z Culling(提前Z拣选,以下简称EZC),但当时把它和传统的Z-Test搞混淆了。

我们知道,Z-Buffer在图形学中的作用是剔除遮挡面。好了,那我问你,Z-Test具体发生在流水线的哪个阶段?肯定是Frame Buffer更新之前对吧?那么,是pixel shader(以下简称PS)之前还是之后呢?嘿嘿~

传统Z-Test其实是发生在PS之后的,因此仅仅依靠Z-Test并不能加快多少渲染速度。而EZC则发生在光栅化之后,调用PS之前。EZC会提前对深度进行比较,如果测试通过(Z-Func),则执行PS,否则跳过此片段/像素(fragment/pixel)。不过要注意的是,在PS中不能修改深度值,否则EZC会被禁用。

这样,在整个流水线阶段,深度比较发生了2次,一次是EZC,一次是传统Z-Test。

除了利用EZC帮助传统Z-Test加速之外(硬件自动调用,我称其为隐式用法),目前还有2个显示引申用法:一个类似于Deferred Shading(延迟着色)。比如说渲染头发的时候,有很多不透明的部分会挡住透明的部分,为了避免计算被挡住的透明部分(alpha混合很费)就可以使用EZC;另外一个典型应用是GPGPU中迭代法求解线性方程组,当某些矩阵单元的值已经满足要求时(比如收敛),则可以跳过计算。

显示引申使用EZC的典型框架如下:

Pass1: 准备z-buffer。

通常有两种作法:一种是直接“简单”渲染模型(不写frame buffer,只写z buffer);一种是人为指定depth/z值(即作为阈值,例如迭代法求解线性方程组)。

Pass2: 正常渲染。(禁用Z-Write)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值