early z optimization
為什么80%的碼農都做不了架構師?>>> ??
這個是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
轉載于:https://my.oschina.net/dtec/blog/44506
總結
以上是生活随笔為你收集整理的early z optimization的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习:Java泛型之一
- 下一篇: newman的键盘不错