early z optimization

这个是nvidia‘s GPU Programming Guide,3.6节 中的内容。

就是在geforce fx,以及6以上的系列里面,加了early z optimization或者也叫zcull的特性。

正常的depth test是在pixel shader之后的pixel rendering阶段,即便一个fragment被砍掉,仍旧耗费了pixel shader的计算时间。

这个zcull是放在光栅化之后和pixel shader之前的位置,如果这个fragment没有通过zcull 的test,那么就被砍掉,不进入pixel shader进行计算。

zcull的硬件实现一般也是有一个memory与传统的depth/stencil memory绑定,当一个fragment从pixel shader中出来并且通过了depth/stencil test,这个fragment就会进一步做一个zcull的test,如果通过了就更新zcull memory。这个更新memory的test和pixel shader之前的那个test不是一个含义的。

而这个zcull memory也就是用来在pixel shader之前砍fragment的依据。

如果是我们通过SetRenderTarget换了depth/stencil memory,就是用了没有被zcull 绑定的depth buffer,zcull就不起作用而且也不会更新。

---------------------------------------------------------------------------------------------------------------------------------------------------

使用zcull时候最好先构建一个depth buffer。

这里就用到double-speed-depth/stencil-render

在禁掉color buffer写入,alpha test, user clip,multi-sampling,texkill, color key的情况下,render会变得非常快。

由于实际操作的时候,做double speed z only render都省去lighting, texture sampling等等,这个速度非常快。

然后用这个结果来做zcull,可以省去大量的计算。

另外说一点,这个double-speed-z-only-render用来清depth buffer非常好,某些情况下比硬件提供的clear_depth_buffer函数还快。

---------------------------------------------------------------------------------------------------------------------------------------------------

这种剔除优化已经比较生猛了,可以大幅度弥补cpu端对可见性判断优化不足的特点,节省大量计算。

cool feature


原文链接: http://blog.csdn.net/ccanan/article/details/1655470

你可能感兴趣的:(early z optimization)