移動端紋理壓縮格式


設備資源的限制和制作過程中對表現的無限追求永遠是矛盾點,不會隨設備的發展而轉移。紋理壓縮就是這種矛盾的一種解決方式,不同於png、jgp這種硬盤壓縮方式而言,DXT,ETC等紋理壓縮方式可以在游戲運行中無需CPU解壓就被GPU直接采樣,可以極大的減少內存和帶寬的占用,提升運行效率,對移動游戲而言更是如此。

這篇文章做一些簡要概述,詳細紋理壓縮算法需要查閱更詳細文檔。

非壓縮格式

格式 內存消耗 (bytes/pixel) 描述
RGBA8888(RGBA32) 4bpp RGBA通道各占用8位
RGBA4444(RGBA16) 2bpp 每個像素2字節
RGB888(RGB24) 3bpp 每個像素3字節,RGB通道各占用8位,無透明通道
RGB565(RGB16) 2bpp 每個像素2字節,RGB通道各占用5/6/5位,無透明通道

壓縮格式

格式 壓縮比 GPU支持 描述 圖片要求
DXT DXT1:0.3/DXT5:0.6 Windows\Android(Nvidia Tegra and Intel Bay Trail) 分為DXT1-DXT5這五個級別,DXT1 適用於不具有透明度或者僅具有一位Alpha的貼圖,DXT3和DX5支持包含4位alpha通道的RGB紋理
ATC RGBA/RGB RGBA:0.25/RGB:0.125 Qualcomm -Adreno 高通GPU支持格式,支持帶有Alpha的RGB紋理壓縮。
PVRTC RGBA/RGB 2bit:0.125/4bit:0.25 PowerVR IOS平台都支持,支持每個像素2位或者4位的紋理,包含或者不包含alpha通道都可以;PVRTC 2-bpp把一個8×4的像素單元組壓成一個64位的數據塊,壓縮效果比較差;PVRTC 4-bpp把一個4×4的像素單元組壓成一個64位的數據塊。游戲中使用4位壓縮更多。 尺寸為2的N次冪,並且寬高相同。
ETC1 RGB 4Bit 0.125 支持Opnegl ES2.0的GPU OpenGL ES2.0版本支持,移動GPU均支持的一個格式,遺憾的是不支持Alpha通道。ETC1把一個4x4的像素單元組壓成一個64位的數據塊。游戲開發中采用最多的格式,不過麻煩的是需要對Alpha通道進行單獨存儲,Unity5.4.3版本之后提供了官方支持 尺寸為2的N次冪,長寬可不同
ETC2 ARGB/RGB 4bit RGBA:0.25/RGB:0.125 支持Opnegl ES3.0的GPU OpenGL ES 3.0以上才支持,補全了ETC1不支持Alpha通道,支持更高質量的壓縮。雖然如此,從Android官方數據來看,還有相當大的設備是采用Opengl ES2.0;使用需要謹慎,不過隨着設備更新換代,開發時間周期比較長的游戲可以考慮直接使用 尺寸為4的倍數

Unity官網對每個平台默認的紋理壓縮格式以及使用建議給出了詳細描述,需要注意的是:在不同移動GPU平台下選擇GPU支持的壓縮紋理,就可以在不需要CPU解壓的情況下直接被GPU采樣,節省CPU內存和帶寬,也可以節省存儲的體積。如果目標平台不支持設置的壓縮格式,紋理將解壓為RGBA32或者RGB24,浪費CPU時間和內存

ASTC

從IOS9(A8架構)Apple 手機開始支持ASTC壓縮格式 ,如果考慮放棄Apple 6代之前的手機兼容問題了,可以直接使用了。相對於PVRTC2/4而言,ASTC(4X4)的壓縮比會增加到0.25,不過顯示效果也會好很多,而且不需要把圖片設置為方形。

Using ASTC Texture Compression for Game Assets 說明的比較詳細,也給出了一些使用上的建議,即針對不同貼圖類型給出不同的壓縮方案。

ARM的參考資料: ASTC: The Future of Texture Compression

引用

[1]: "常用紋理和紋理壓縮格式" http://blog.csdn.net/ynnmnm/article/details/44983545
[2]:"Unity Compressed" https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
[3]: "移動設備的紋理壓縮方案" http://gad.qq.com/article/detail/72
[4]: "關於U3D貼圖格式壓縮" http://blog.sina.com.cn/s/blog_5b6cb9500102vi6i.html
[5]: "各種移動GPU壓縮紋理的使用方法" http://www.cnblogs.com/luming1979/archive/2013/02/04/2891421.html
[6] "版本分布情況" https://developer.android.com/about/dashboards/index.html#Screens


免責聲明!

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



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