導航:首頁 > 文件處理 > astc壓縮

astc壓縮

發布時間:2023-01-23 11:42:44

❶ 紋理壓縮簡介 DXT PVR ETC

參考
為什麼需要紋理壓縮
移動端紋理壓縮格式
干貨:Unity游戲開發圖片紋理壓縮方案
Creator使用壓縮紋理
常用紋理和紋理壓縮格式
移動設備的紋理壓縮方案
各種移動GPU壓縮紋理的使用方法

在軟體開發,特別是三維應用中,紋理隨處可見,但受限於網路環境和硬體能力,紋理也是一大瓶頸。而且在一般的三維應用中,紋理所佔大小基本都會在1/2以上,模型中往往超過2/3。或許你會說,紋理不就是一張圖嗎,有那麼重要嗎?如下兩張對比圖,可能你會認為前者逼格高,但對於正常人而言,後者顯然要好很多。正是有了紋理,如同在骨架上賦予了皮膚,讓我們的應用更加的逼真,貼近現實。

而你能想像到嗎?如上的模型一共有三張紋理,其中之一效果如下:

紋理的拼接是紋理壓縮的開始,採用不同的壓縮方式對紋理最終的大小影響也是顯著的。比如上面的這張紋理在不同壓縮格式下的大小差別也是非常顯著的(原始文件為tga格式,通過Photoshop轉換為其他格式,默認選項):

不同於png、jgp這種硬碟壓縮方式而言,DXT,ETC等紋理壓縮方式可以在游戲運行中無需CPU解壓就被GPU直接采樣,可以極大的減少內存和帶寬的佔用,提升運行效率,對移動游戲而言更是如此。

1.DXT

DXT是一種有損紋理壓縮演算法,微軟的Direct中支持,DXT的格式包括DXT1~DXT5,其中DXT1和DXT5較為多見,後面會做詳細討論。可以說DXT是目前應用最廣泛的紋理壓縮格式,可以認為所有的PC端顯卡都支持DXT壓縮,維基網路記錄,該專利有效期到2017年10月2號。

DXT演算法非常容易理解,而且整體看上去效果不錯,但如果對局部特寫,會發現在細節上會有很多丟失,這也是演算法本身導致的,畢竟每個塊只有兩個顏色,而其他顏色都是在這兩個顏色區間的差值,如果當前區域內還有其他顯著顏色則必然會有丟失。

另外一個問題就是DXT3和DXT5之間的對比,相比DXT1不支持透明度(但支持是否透明),DXT5要大一倍(多了64bit),和之前顏色保存方案一樣對透明度也保存了兩個16位的顏色和對應的調色板,對RGBA的效果也得到了保證,但DXT3思路不一樣,它是對每一個像素保存了4bit的透明度,同樣也是多了64bit,但此時畢竟只有16個透明度選項,相比DXT5,在壓縮率上相當,但對透明色的處理不夠細膩,因此在實用性上並不推薦DXT3。

盡管DXT在細節上有明顯硬傷,在總體效果不錯,而且確實是一種強大的壓縮方式,所以在多數紋理壓縮選擇中都是最佳方案,幾乎可以認為是PC下的標准壓縮格式。

2.PVR&ETC
也許是出於專利和商業角度,也許確實DXT在移動端確實無法滿足要求,DXT並沒有在移動端得到很大的支持,相反,在iOS設備中支持的是PVR壓縮,在Android中支持的是ETC壓縮。

DXT在細節上缺陷明顯,最重要的原因是當把紋理分為4*4像素的區域塊後,每個塊之間都是獨立的,盡管這極大的簡化了壓縮演算法,但卻丟失了相鄰塊之間這種普遍的相似性。這是演算法本身導致的,而PVR則會考慮該區域塊對應的右側,下側和右下側的三個區域塊的關聯性。

從現實的角度來看,受制於專利和硬體廠商,我們並沒太多選擇的餘地,Android下就要用ETC,iOS下只能PVR,而在PC上不用DXT估計就要被嘲諷了。但這也是一個很棘手的問題,比如在WebGL下,特別是Android下差異化很大,是否支持紋理壓縮,甚至在同一個設備不同的瀏覽器,因為驅動的不一致,可能系統自帶的會支持ETC壓縮,而微信等QQ瀏覽器下並不支持。而且華為的手機貌似在瀏覽器級別下都不支持ETC(硬體支持,還是驅動的問題)。而如果在移動設備上不用壓縮,顯存是有限的,除非你在數據量上做出犧牲,怎麼解決都很矛盾,相比而言,iOS下則要舒服很多。

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

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

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

1. laya問答 H5游戲能使用壓縮紋理(ETC,PVR等)嗎?
Q:H5游戲能使用壓縮紋理(ETC,PVR等)嗎?
A:部分瀏覽器會不支持(比如safari)
Q:那laya裡面能根據不同瀏覽器(或不同平台)使用不同壓縮格式的紋理嗎?
A:你自己是可以獲取到當前是哪個瀏覽器的,自行處理即可

2. LAYA Runtme目前支持 ETC/DXT或者PVR這類格式嗎?在文檔中沒有找到這類的說明
LayaAir目前暫時還不支持ETC/DXT/PVR這類格式!關注layaAir的版本引擎更新日誌即可,支持了我們會及時告知!

3. Egret 內存分析-RES載入資源後存在雙份內存無法釋放的問題
支持pvr、etc已經在計劃中。

閱讀全文

與astc壓縮相關的資料

熱點內容
程序員那麼可愛陸漓和姜逸城吻戲 瀏覽:802
android獲取窗口大小 瀏覽:180
程序員為世界帶來的貢獻 瀏覽:214
程序員招聘自薦信 瀏覽:693
魔獸鍵位設置命令宏 瀏覽:645
程序員沒有目標了 瀏覽:828
搶答器c程序編程 瀏覽:703
什麼app可以自己玩 瀏覽:76
刨客app是什麼 瀏覽:963
cad輸入命令欄不見了 瀏覽:834
做故事集可以用什麼app 瀏覽:692
qq郵箱發送壓縮包 瀏覽:672
程序員桌面機器人 瀏覽:589
xjr快速開發平台源碼 瀏覽:159
java介面runnable 瀏覽:31
python怎麼運行web伺服器 瀏覽:349
notepad編程代碼 瀏覽:740
什麼安卓的毛病最少 瀏覽:611
hp的pjl設備訪問命令 瀏覽:635
googlewebp圖片壓縮技術 瀏覽:215