mobile cpu上禁用alpha test的相關總結

   由於,每家芯片的特性不一樣,根據向framebuffer寫法的不一樣,分爲tile-based的mobile cpu,如ImgTec  PowerVR ,ARM Mali,一部分老版本Qualcomm  Adreno 。還有標準的direct(immediate )的mobile cpu,如Nvida,Intel,Viante,以及一部分Qualcomm芯片(Qualcomm的Adreno.3xx系列後是能夠在這二者之間進行切換的)。對tile-based的GPU來講,一旦使用打開alpha test或者其餘discard功能的指令,就意味着這個fragment shader上再也不只繪製一次像素了。這樣會增長額外的性能消耗,因此通常都是建議用不實用alpha test,或者用alpha blend來代替。
 
  tile-based gpu又分爲Tiled Deferred(PowerVR)和Tiled(Adreno,Mali),二者都是在tile裏進行渲染,而區別是TBR有本身的預處理,能夠只着色可見像素。
 

圖 1 三種管線。
 
  TBDR,以蘋果設備用的ImgTec的PowerVR系列來講,在渲染處理時,會在fragment shading 階段提供,在每一個tile使用Deferred的方法,進行Hidden Surface Removal(HSR)的處理,原理是fs階段前,對多邊形進行預處理,決定它的哪一個像素會對最終結果產生貢獻,後面就只對這些像素進行着色。這個功能須要對不透明幾何體進行排序。也就是說,要進行這種優化,必需要確保必定有能遮擋的像素,然而使用帶有discard的shader指令,例如alpha-test,sample mask,alpha-to-coverage等等,會使得一些原本被遮擋的像素對最終結果產生貢獻,因此,這個特性可能只能對一部分物體產生做用,從而產生額外的狀態切換消費。以及該 fragment額外隱藏像素的處理。
  
圖2  ImgeTec的渲染處理
 
  除此以外,ImgeTec還有另外一個depth-only pass功能,生成深度緩衝,再次 進行渲染時,就能夠獲取每一個像素的可見深度,只有可見像素纔會進行處理。 因此,對於蘋果設備來講,在CPU階段對不透明物體的那種從前向後預處理排序是沒有必要的。而是應該根據渲染狀態來排序。

圖3 ImgTec的 渲染提示
  TBR也上有提供相似的 HSR 方法,也就是 early z-cull ,使用粗糙,低精度和分辨率的Zbuffer進行depth-test,測試失敗的fragment則不傳說給rasterization。若是打開alpha test,後果跟TBDR也是相似的。
圖4 TBDR的Deferred vs TBR的 Early z
 
圖5  Qualcomm的TBR
 
  而IMR上,仍是按照傳統方法,儘量的在CPU上進行Cull,以及從前向後進行距離排序,也提升erlay-z的效率。
 

不透明物體,early-z的overdraw測試,只有PowerVR不須要進行預先排序處理。紅色是從前向後繪製,藍色是從後向前繪製

如圖,當繪製透明和半透明混合物體時,必須使用discard命令的話,對性能的消耗仍是很大的
 
不一樣芯片上的的推薦繪製順序
 
OpenGL Insights Performance Tuning for Tile-Based Architectures
Next-Generation AAA Mobile Rendering
FastMobileShaders
High-End Graphics for Smartphones and Tablets: A Development Case Study" CEDEC 2013
相關文章
相關標籤/搜索