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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM