mobile cpu上禁用alpha test的相关总结
生活随笔
收集整理的這篇文章主要介紹了
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 http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf Next-Generation AAA Mobile Rendering https://de45xmedrsdbp.cloudfront.net/Resources/files/GDC2014_Next_Generation_Mobile_Rendering-2033767592.pdf FastMobileShaders http://aras-p.info/texts/files/FastMobileShaders_siggraph2011.pdf High-End Graphics for Smartphones and Tablets: A Development Case Study" CEDEC 2013 http://research.tri-ace.com/Data/AndroidABC2014_Final.pptx
圖 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 http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf Next-Generation AAA Mobile Rendering https://de45xmedrsdbp.cloudfront.net/Resources/files/GDC2014_Next_Generation_Mobile_Rendering-2033767592.pdf FastMobileShaders http://aras-p.info/texts/files/FastMobileShaders_siggraph2011.pdf High-End Graphics for Smartphones and Tablets: A Development Case Study" CEDEC 2013 http://research.tri-ace.com/Data/AndroidABC2014_Final.pptx
轉載于:https://www.cnblogs.com/TracePlus/p/4037165.html
總結
以上是生活随笔為你收集整理的mobile cpu上禁用alpha test的相关总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SEL selector (二)
- 下一篇: 简易分享功能(非第三方)