紋理壓縮簡介 DXT PVR ETC

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

一絮识、DXT PVR ETC

在軟件開發(fā)绿聘,特別是三維應(yīng)用中,紋理隨處可見次舌,但受限于網(wǎng)絡(luò)環(huán)境和硬件能力熄攘,紋理也是一大瓶頸。而且在一般的三維應(yīng)用中垃它,紋理所占大小基本都會在1/2以上鲜屏,模型中往往超過2/3烹看。或許你會說洛史,紋理不就是一張圖嗎惯殊,有那么重要嗎?如下兩張對比圖也殖,可能你會認(rèn)為前者逼格高土思,但對于正常人而言,后者顯然要好很多忆嗜。正是有了紋理己儒,如同在骨架上賦予了皮膚,讓我們的應(yīng)用更加的逼真捆毫,貼近現(xiàn)實闪湾。


image.png

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


image.png

看上去怪怪的途样。其實在紋理的壓縮中,人們先想到了如何去除冗余信息濒憋,對稱的部分只保留一份何暇,盡可能讓不同的部分緊湊,充分利用好每一個像素來保存有效數(shù)據(jù)凛驮。得益于對稱在大自然中的普遍性裆站,這種方式確實極大的減少了紋理像素。

紋理的拼接是紋理壓縮的開始黔夭,采用不同的壓縮方式對紋理最終的大小影響也是顯著的邮破。比如上面的這張紋理在不同壓縮格式下的大小差別也是非常顯著的(原始文件為tga格式渗柿,通過Photoshop轉(zhuǎn)換為其他格式卒落,默認(rèn)選項):

image.png

(注:原作者在評論中承認(rèn)筆誤哆姻,jpg實際上是有損壓縮)如果按照上面表格的邏輯疚鲤,用jpg或png格式就好了堤如,無損壓縮佳头,而且也是最小的氨鹏。確實在很多情況下這是一個比較好的選擇颜屠,比如網(wǎng)絡(luò)帶寬有限辰妙,這樣可以很好的節(jié)約帶寬和下載時間,而Bmp甫窟,tga密浑,png以及jpg都是無損格式。但這類壓縮存在一個致命缺陷粗井,他們都是基于整幅圖片下進(jìn)行的壓縮尔破,比如霍夫曼編碼等街图,這樣像素和像素之間在解碼的過程中存在依賴關(guān)系,無法直接實現(xiàn)單個像素級別的解析懒构,這就發(fā)揮不了顯卡的并發(fā)能力餐济,更重要的是問題在于無論是png還是jpeg最終在顯存中解碼后都是RGBA的紋理格式,因此并無法減少顯存的占用率胆剧。比如一張256256的RGBA紋理絮姆,無論是png還是jpg格式,雖然文件大小不一樣秩霍,在顯卡中的大小仍然是256256*4的顯存空間篙悯。

不同于png、jgp這種硬盤壓縮方式而言铃绒,DXT,ETC等紋理壓縮方式可以在游戲運行中無需CPU解壓就被GPU直接采樣鸽照,可以極大的減少內(nèi)存和帶寬的占用,提升運行效率颠悬,對移動游戲而言更是如此移宅。

1.DXT

DXT是一種有損紋理壓縮算法,微軟的Direct中支持椿疗,DXT的格式包括DXT1~DXT5漏峰,其中DXT1和DXT5較為多見,后面會做詳細(xì)討論届榄∏城牵可以說DXT是目前應(yīng)用最廣泛的紋理壓縮格式,可以認(rèn)為所有的PC端顯卡都支持DXT壓縮铝条,維基百科記錄靖苇,該專利有效期到2017年10月2號。


image.png

DXT算法非常容易理解班缰,而且整體看上去效果不錯贤壁,但如果對局部特寫,會發(fā)現(xiàn)在細(xì)節(jié)上會有很多丟失埠忘,這也是算法本身導(dǎo)致的脾拆,畢竟每個塊只有兩個顏色,而其他顏色都是在這兩個顏色區(qū)間的差值莹妒,如果當(dāng)前區(qū)域內(nèi)還有其他顯著顏色則必然會有丟失名船。


image.png

這種信息的丟失主要集中在比較細(xì)的邊界中,但DXT1在壓縮率上是RGB的6倍旨怠,這種問題可以通過提高紋理分辨率的方式來解決渠驼,高寬放大41%(1.41*1.41=1.9881),這樣整個紋理是以前的2倍鉴腻,但壓縮率還能保持為3倍迷扇,也是可以接受的百揭。在DXT中還有一個主要的損失,就是RGB的24位轉(zhuǎn)為了16位顏色蜓席,16位中R&B各占5位信峻,但是G占了6位,這是因為人眼對綠色最為敏感瓮床。
image.png

另外一個問題就是DXT3和DXT5之間的對比盹舞,相比DXT1不支持透明度(但支持是否透明),DXT5要大一倍(多了64bit)隘庄,和之前顏色保存方案一樣對透明度也保存了兩個16位的顏色和對應(yīng)的調(diào)色板踢步,對RGBA的效果也得到了保證,但DXT3思路不一樣丑掺,它是對每一個像素保存了4bit的透明度获印,同樣也是多了64bit,但此時畢竟只有16個透明度選項街州,相比DXT5兼丰,在壓縮率上相當(dāng),但對透明色的處理不夠細(xì)膩唆缴,因此在實用性上并不推薦DXT3鳍征。

盡管DXT在細(xì)節(jié)上有明顯硬傷,在總體效果不錯面徽,而且確實是一種強(qiáng)大的壓縮方式艳丛,所以在多數(shù)紋理壓縮選擇中都是最佳方案,幾乎可以認(rèn)為是PC下的標(biāo)準(zhǔn)壓縮格式趟紊。

2.PVR&ETC
也許是出于專利和商業(yè)角度氮双,也許確實DXT在移動端確實無法滿足要求,DXT并沒有在移動端得到很大的支持霎匈,相反戴差,在iOS設(shè)備中支持的是PVR壓縮,在Android中支持的是ETC壓縮铛嘱。

DXT在細(xì)節(jié)上缺陷明顯暖释,最重要的原因是當(dāng)把紋理分為4*4像素的區(qū)域塊后,每個塊之間都是獨立的弄痹,盡管這極大的簡化了壓縮算法饭入,但卻丟失了相鄰塊之間這種普遍的相似性。這是算法本身導(dǎo)致的肛真,而PVR則會考慮該區(qū)域塊對應(yīng)的右側(cè),下側(cè)和右下側(cè)的三個區(qū)域塊的關(guān)聯(lián)性爽航。

從現(xiàn)實的角度來看蚓让,受制于專利和硬件廠商乾忱,我們并沒太多選擇的余地历极,Android下就要用ETC窄瘟,iOS下只能PVR,而在PC上不用DXT估計就要被嘲諷了蹄葱。但這也是一個很棘手的問題,比如在WebGL下竣况,特別是Android下差異化很大,是否支持紋理壓縮摹恨,甚至在同一個設(shè)備不同的瀏覽器睬塌,因為驅(qū)動的不一致,可能系統(tǒng)自帶的會支持ETC壓縮歇万,而微信等QQ瀏覽器下并不支持揩晴。而且華為的手機(jī)貌似在瀏覽器級別下都不支持ETC(硬件支持,還是驅(qū)動的問題)贪磺。而如果在移動設(shè)備上不用壓縮硫兰,顯存是有限的,除非你在數(shù)據(jù)量上做出犧牲寒锚,怎么解決都很矛盾劫映,相比而言,iOS下則要舒服很多刹前。

格式 壓縮比 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位的數(shù)據(jù)塊千诬,壓縮效果比較差耍目;PVRTC 4-bpp把一個4×4的像素單元組壓成一個64位的數(shù)據(jù)塊。游戲中使用4位壓縮更多徐绑。 尺寸為2的N次冪邪驮,并且寬高相同。
ETC1 RGB 4Bit 0.125 支持Opnegl ES2.0的GPU OpenGL ES2.0版本支持傲茄,移動GPU均支持的一個格式毅访,遺憾的是不支持Alpha通道。ETC1把一個4x4的像素單元組壓成一個64位的數(shù)據(jù)塊盘榨。游戲開發(fā)中采用最多的格式喻粹,不過麻煩的是需要對Alpha通道進(jìn)行單獨存儲,Unity5.4.3版本之后提供了官方支持 尺寸為2的N次冪较曼,長寬可不同
ETC2 ARGB/RGB 4bit RGBA:0.25/RGB:0.125 支持Opnegl ES3.0的GPU OpenGL ES 3.0以上才支持磷斧,補(bǔ)全了ETC1不支持Alpha通道,支持更高質(zhì)量的壓縮。雖然如此捷犹,從Android官方數(shù)據(jù)來看弛饭,還有相當(dāng)大的設(shè)備是采用Opengl ES2.0;使用需要謹(jǐn)慎萍歉,不過隨著設(shè)備更新?lián)Q代侣颂,開發(fā)時間周期比較長的游戲可以考慮直接使用 尺寸為4的倍數(shù)

Unity官網(wǎng)對每個平臺默認(rèn)的紋理壓縮格式以及使用建議給出了詳細(xì)描述,需要注意的是:在不同移動GPU平臺下選擇GPU支持的壓縮紋理枪孩,就可以在不需要CPU解壓的情況下直接被GPU采樣憔晒,節(jié)省CPU內(nèi)存和帶寬,也可以節(jié)省存儲的體積蔑舞。如果目標(biāo)平臺不支持設(shè)置的壓縮格式拒担,紋理將解壓為RGBA32或者RGB24,浪費CPU時間和內(nèi)存攻询。

二从撼、ASTC

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

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

三、laya egret支持情況

1.laya問答 H5游戲能使用壓縮紋理(ETC茎芭,PVR等)嗎揖膜?
Q:H5游戲能使用壓縮紋理(ETC誓沸,PVR等)嗎梅桩?
A:部分瀏覽器會不支持(比如safari)
Q:那laya里面能根據(jù)不同瀏覽器(或不同平臺)使用不同壓縮格式的紋理嗎?
A:你自己是可以獲取到當(dāng)前是哪個瀏覽器的拜隧,自行處理即可

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

3.Egret 內(nèi)存分析-RES加載資源后存在雙份內(nèi)存無法釋放的問題
支持pvr垦页、etc已經(jīng)在計劃中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末干奢,一起剝皮案震驚了整個濱河市痊焊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忿峻,老刑警劉巖薄啥,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逛尚,居然都是意外死亡垄惧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門绰寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來到逊,“玉大人,你說我怎么就攤上這事滤钱【鹾” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵件缸,是天一觀的道長铜靶。 經(jīng)常有香客問我,道長停团,這世上最難降的妖魔是什么旷坦? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮佑稠,結(jié)果婚禮上秒梅,老公的妹妹穿的比我還像新娘。我一直安慰自己舌胶,他們只是感情好捆蜀,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般辆它。 火紅的嫁衣襯著肌膚如雪誊薄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天锰茉,我揣著相機(jī)與錄音呢蔫,去河邊找鬼。 笑死飒筑,一個胖子當(dāng)著我的面吹牛片吊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播协屡,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俏脊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肤晓?” 一聲冷哼從身側(cè)響起爷贫,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎补憾,沒想到半個月后漫萄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡余蟹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年卷胯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威酒。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窑睁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葵孤,到底是詐尸還是另有隱情担钮,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布尤仍,位于F島的核電站箫津,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宰啦。R本人自食惡果不足惜苏遥,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赡模。 院中可真熱鬧田炭,春花似錦、人聲如沸漓柑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞬矩,卻和暖如春茶鉴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背景用。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工涵叮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丛肢。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓围肥,卻偏偏與公主長得像剿干,于是被迫代替她去往敵國和親蜂怎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 紋理基礎(chǔ) 紋理是一種結(jié)構(gòu)化的存儲形式(Textures are a structured form of st...
    RichardJieChen閱讀 15,808評論 0 9
  • 1置尔、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 用兩張圖告訴你杠步,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,714評論 2 59
  • 這是我第一次用簡書榜轿,也是第一次寫周復(fù)盤幽歼。 以前不明白寫復(fù)盤有什么好處,認(rèn)為就是寫幾個字而已谬盐,經(jīng)過10多天的簡短復(fù)盤...
    海芋cc閱讀 226評論 1 3
  • 參考鏈接http://www.cnblogs.com/leeboke/p/5014058.html Seleniu...
    ktide閱讀 353評論 0 0