Android和iOS設備中的紋理壓縮


移動設備內存有限,為了節省內存,一般都會對貼圖進行壓縮。
一張4MB的貼圖,在移動設備中壓縮之后只有1/8,也就是0.5MB。

假如有一張1024px * 1024px的4通道(RGBA8888,每個通道都為8bit)貼圖。
一般來說,一張紋理所占用的內存的計算方式為長乘以框再撐每個像素的比特數,計算公式日下:

內存 = 長 * 寬 * 像素比特數

那么這張圖所長的內存為:1024 * 1024 * 4 * 8 bit = 1024 * 1024 * 4 Byte = 4MB

即一個像素占 32bit == 4Byte。


一 Android設備

Android設備中一般使用ETC1壓縮,一種有損的圖像壓縮方式。
ETC1是OpenGL2.0支持的標准,壓縮之后每個像素占4bit,壓縮之后的格式為KTX或者PKM,前者支持存儲多紋理,后者只支持單紋理。
上面的圖片壓縮之后的大小為:1024 * 1024 * 4 bit = 0.5MB
ETC1的缺點是不支持Alpha通道,不支持有透明度的圖片壓縮。
ETC2解決了Alpha通道,但是它是OpenGL3.0標准,考慮到2.0設備的市場占有率,一般使用ETC1。

二 iOS設備

iOS設備中采用的圖像格式一般是PVR,也是一種有損的圖像壓縮方式。

PVR壓縮分為兩種,PVRTC2和PVRTC4。
PVRTC4:Compressed format, 4 bits per pixel, ok image quality
PVRTC2:Compressed format, 2 bits per pixel, poor image quality

常用的PVRTC4,壓縮之后的大小為:1024 * 1024 * 4 bit = 0.5MB
除了壓縮內存,PVR可以直接被顯卡讀取,載入速度更快;缺點是PVR需要PowerVR芯片支持,目前iOS設備都能完美支持,Android支持尚少;此外,PVRTC4只支持方形貼圖,非方形會被處理成方形,且長寬必須為2的冪。

關於PVR壓縮算法可以參考:http://web.onetel.net.uk/~simonnihal/assorted3d/fenney03texcomp.pdf


免責聲明!

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



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