cocosCreator 壓縮紋理及詳細(xì)介紹 (性能優(yōu)化必看棘伴,改)

cocosCreator版本:2.4.4

平臺:android

測試工具:adb ,perfdog: https://perfdog.qq.com/

紋理壓縮工具:cocoscreator 提供的etc1A slow模式

測試參數(shù):一張 1280 * 720 的png格式的背景圖片

這篇文章主要圍繞「cocoscreator提供的紋理壓縮功能」「紋理壓縮相關(guān)的知識點」來進行的,通過閱讀本篇文章天梧,你可以 更清晰的認(rèn)識在你的項目中 如何權(quán)衡 是否用紋理壓縮 來達到你想要的 優(yōu)化效果霉旗。

紋理壓縮相關(guān)知識點

1,計算機中計量存儲容量計量單位:

「位(bit」 數(shù)據(jù)存儲的最小單位冰蘑。在計算機中的二進制數(shù)系統(tǒng)中,位村缸,簡記為b,也稱為比特祠肥,每個0或1就是一個位(bit)。計算機中的CPU位數(shù)指的是CPU一次能處理的最大位數(shù)梯皿。

「字節(jié)(byte」字節(jié)(Byte)是計算機信息技術(shù)用于計量存儲容量的一種計量單位仇箱,也表示一些計算機編程語言中的數(shù)據(jù)類型和語言字符。Byte是從0-255的無符號類型东羹,所以不能表示負(fù)數(shù) 剂桥。

KB: 千字節(jié) 是計算機信息技術(shù)用于計量存儲容量的一種計量單位

MB:兆字節(jié) 是計算機信息技術(shù)用于計量存儲容量的一種計量單位

GB:是計算機信息技術(shù)用于計量存儲容量的一種計量單位

關(guān)系:

1GB = 1024MB

1MB = 1024KB

1KB = 1024Byte

1Byte = 8bit

1bit(位) 是數(shù)據(jù)存儲最小單位

2,像素格式。

像素格式描述了像素數(shù)據(jù)存儲所用的格式属提。定義了像素在內(nèi)存中的編碼方式权逗。

「像素深度」:像素深度是指存儲每個像素所用的位數(shù)美尸,也用它來度量圖像的分辨率。像素深度決定彩色圖像的每個像素可能有的顏色數(shù)斟薇,或者確定灰度圖像的每個像素可能有的灰度級數(shù)师坎。例如,一幅彩色圖像的每個像素用R堪滨,G胯陋,B三個分量表示,若每個分量用8位椿猎,那么一個像素共用24位表示惶岭,就說像素的深度為24。一個像素的位數(shù)越多犯眠,它能表達的顏色數(shù)目就越多,而它的深度就越深症革。

「顏色通道」:一般用RGBA來表示 顏色通道中R,G,B,A的意義是:R 紅色成分筐咧,通常范圍從0.0(沒有紅色)到1.0(全部的紅色)。G 綠色成分噪矛,通常范圍從0.0(沒有綠色)到1.0(全部的綠色)量蕊。B 藍色成分,通常范圍從0.0(沒有藍色)到1.0(全部的藍色)艇挨。A alpha(不透明度)成分残炮,通常范圍從0.0(完全透明)到1.0(不透明)。

「像素格式」:每個像素所使用的顏色通道的組合模式

常見的像素格式有:

「RGBA4444」 :每個通道占4位(bit) 及用此種格式表示一個像素 占用的存儲大小是 4*4 = 16 位 = 2Byte缩滨。

「RGBA8888」 :每個通道占8位(bit) 及用此種格式表示一個像素 占用的存儲大小是 4*8 = 32 位 = 4Byte势就。

「RGB565」 :占用的存儲大小 5+6+5 = 16 位 = 2Byte

「RGB888」 :每個通道占8位(bit) 及用此種格式表示一個像素 占用的存儲大小是 3*8 = 24 位 = 3BYte。

等等其他格式脉漏。

每個像素的大小 取決于 像素深度 及每個顏色通道所占的位數(shù) 所有通道位數(shù)的累加苞冯。

2,一張圖片在磁盤中的大小,一張圖片加載到內(nèi)存中的大小

「我們在 磁盤中看到的一張圖片的大小 與 加載到內(nèi)存中該圖片所占用的大小 是不一樣的 侧巨,png格式是一種復(fù)雜的編碼壓縮格式舅锄,可以把圖像信息 高比例壓縮,便于傳輸司忱,而加載到內(nèi)存中 需要解壓解碼還原原始信息皇忿。所以 在內(nèi)存中占用的大小要遠遠大于我們在磁盤中看到的大小」后面會詳細(xì)解釋,這里先了解一下坦仍。

通常情況下 計算一張png圖片加載到內(nèi)存的占用大小公式是: 「圖片分辨率4 = 占用內(nèi)存」* 單位是字節(jié)

比如一張1280 * 720 的背景圖 所占的內(nèi)存(顯存)是

1280 * 720 * 4 = 3686400 byte = 3686400 / 1024 = 3600 kb = 3600 / 1024 = 3.515 MB

因為一張圖片加載到內(nèi)存中的大小 是由他的像素格式?jīng)Q定的鳍烁,也是就是 每個像素所用的 像素格式 一般情況下 是默認(rèn)「rgba8888」格式也就是 一個像素32位 及4個字節(jié)。 如果 格式用「rgba4444」 那就是 16位 及2個字節(jié) 那計算出來的 內(nèi)存占用是:

「圖片分辨率2 = 占用內(nèi)存」* 單位是字節(jié)

細(xì)化后的 計算公式是「分辨率寬分辨率高 * 像素格式通道所占用的位數(shù) / 8 = 內(nèi)存占用」*

如果是安卓手機 圖片在不同目錄下 系統(tǒng)會根據(jù) 所在目錄的dpi(圖像每英寸長度內(nèi)的像素點數(shù)) 進行 計算桨踪。

另外 如果用壓縮紋理格式的話 老翘, 壓縮后的紋理大小 跟紋理加載到gpu的大小 是一樣的。比如 一張1280 * 720 的png圖片 壓縮紋理后大小 1441kb 傳遞給 gpu 使用時的大小就是 1441kb。

1铺峭,圖片文件格式與紋理格式的區(qū)別

「圖片文件格式是」:將「位圖信息(圖像的表述方式墓怀,二維數(shù)組)」 通過 特殊的編碼 生成的存儲格式,用于圖像信息的存儲和傳輸卫键,一般在磁盤傀履,內(nèi)存及網(wǎng)絡(luò)中存儲與傳輸。我們經(jīng)忱蚵看到的圖片文件格式 有 png钓账,jpg等格式,「png(無損壓縮)」, 「jpg(有損壓縮」也會把這些圖片稱為紋理絮宁,但他們并不是紋理格式梆暮,不能被GPU直接讀取并顯示。這些文件格式當(dāng)被游戲讀入后绍昂,需要經(jīng)過CPU解碼成 「原始位圖(位圖的每個像素可以用RGB格式(像素/紋理格式)表述如:RGB565啦粹,RGBA4444,RGBA5555窘游,RGB888, RGBA8888)」 唠椭,再傳送到GPU端進行使用。

「紋理格式」:是能被GPU所識別的像素/紋理格式(「RGB565忍饰,RGBA4444贪嫂,RGBA5555,RGB888, RGBA8888等」)艾蓝,能被快速尋址并采樣力崇。是GPU能直接使用的數(shù)據(jù)格式。

2饶深,什么是紋理壓縮餐曹,常見的壓縮紋理格式

「紋理壓縮格式」

紋理壓縮原理參考地址:https://www.khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt

參考博客:https://www.cnblogs.com/fuckgiser/p/5497013.html

壓縮紋理,是一種GPU能直接讀取并顯示的格式敌厘,使得圖像無需解壓即可進行渲染台猴,可節(jié)約大量的內(nèi)存。常見的紋理壓縮格式ETC,PVRTC.

「ETC:」是一種為感知質(zhì)量設(shè)計的有損算法俱两,其依據(jù)是人眼對亮度改變的反應(yīng)要高于色度改變饱狂。是把4x4的像素塊壓縮成一個64或128位的數(shù)據(jù)塊,,是有損壓縮宪彩。壓縮率6:1休讳,ETC 分為兩種,「ETC1」「ETC2」 ETC1適用于Opengl ES 2.0 支持幾乎所有市面上的Android機尿孔,所有iPhone ETC2 適用于 Opengl ES 3.0 支持大部分高端Android機俊柔,iPhone 5S及以上機型筹麸。

「PVRTC:」PVRTC格式與基于塊的壓縮格式皂甘,與ETC的不同之處是忙干,它使用2張雙線性放大的低分辨率圖,根據(jù)精度和每個像素的權(quán)重较坛,融合到一起來呈現(xiàn)紋理留晚,并且2-bpp和4-bpp都支持ARGB數(shù)據(jù)酵紫。PVRTC格式壓縮比較高,也是有損壓縮错维。壓縮比 2-bpp 16:1 4-bpp 8:1. 只支持長寬相等且為2的冪次方的紋理,支持部分Android機(GPU:PowerVR系列)奖地,iPhone全系列機型

「opengl與webgl版本對應(yīng)關(guān)系」

OpenGL 2.0 ——> OpenGL ES 2.0 ——> WebGL 1.0

OpenGL 3.3 ——> OpenGL ES 3.0 ——> WebGL 2.0

紋理壓縮對游戲項目的影響

1,包體

1)紋理壓縮后的文件要比 png文件大很多(etc紋理壓縮的文件名后綴是.pkm) 一張35kb左右的 1280 * 720 的png格式 的圖片 紋理壓縮后的 pkm文件是 1.4MB左右赋焕。

2)打成蘋果包和安卓包 后 大小 壓縮紋理的 包要比 png的包小 一些 項目中只有一張自己添加的1280 * 720的背景圖

沒有壓縮紋理的包體是 9254kb

壓縮紋理的包體是 9227kb

3)如果需要動態(tài)加載又想節(jié)省下載時間成本 可以考慮 紋理壓縮后進行zip壓縮 下載到本地后進行解壓縮 這種方案参歹。權(quán)衡利弊。

zip壓縮后的大泻暧省:測試用的工具是 7-zip 僅用于測試泽示。項目中可以考慮用gzip 命令gzip地址 http://gnuwin32.sourceforge.net/packages/gzip.htm

壓縮前1441kb 壓縮后9kb
image.gif
2,內(nèi)存

1)通過翻閱大量資料和實際測試 png格式的圖片 加載到內(nèi)存 到提供給gpu渲染蜜氨。會保存兩份 cpu解碼后的位圖數(shù)據(jù) ,一份放在cpu 一份放在gpu. 壓縮紋理的數(shù)據(jù) 則只在gpu保留一份捎泻。

2)測試數(shù)據(jù) 兩種方式:一種將1280 * 720的圖片直接拖到編輯器 第二種是 用cc.resources.load動態(tài)加載

「a」:直接拖到編輯器 貼圖大小 1280*720 加載之前 內(nèi)存占用 約 121MB 加載紋理壓縮后的 圖片 內(nèi)存占用122-123MB 未壓縮紋理的加載占用內(nèi)存是 125-126左右

「b」:用cc.resources.load動態(tài)加載

未進行紋理壓縮的圖片:

未加載---加載后----加載瞬間內(nèi)存占用

118MB 128MB 130MB

117MB 128MB 130MB

118MB 127MB 130MB

114MB 124MB 125MB

104MB 116MB 116MB

進行紋理壓縮后的內(nèi)存占用:

124MB 129MB 129MB

118MB 123MB 123MB

117MB 122MB 122MB

117MB 122MB 122MB

117MB 122MB 122MB

通過測試數(shù)據(jù)可以看出

1)計算 一張圖片 加載到內(nèi)存的 大小公式:分辨率 * 通道數(shù) *單個通道占用內(nèi)存的大徐住(bit) 與 實際測試的 數(shù)據(jù) 有些偏差。

2)通過直接將圖片拖到編輯器上 與 動態(tài)加載圖片 的內(nèi)存占用 數(shù)據(jù) 偏差很大 笆豁,前者占用較小 與 計算公式所得的結(jié)果 相近郎汪, 后者翻了2倍左右

3)壓縮紋理后占用內(nèi)存 大小 遠遠小于 未壓縮紋理占用內(nèi)存大小,約 2倍左右闯狱。

注意:webgl 只支持rgba8888格式
最后 會按照 32的倍數(shù) 占用內(nèi)存

3煞赢,加載時間

理論上 壓縮紋理的 加載時間 要遠遠小于 未壓縮紋理的時間 。因為 壓縮紋理 可以被gpu快速尋址采樣哄孤,不需要cpu的解碼 照筑,這個過程時間的消耗很大。而未壓縮紋理的 需要經(jīng)過特定的解碼規(guī)則 進行解碼瘦陈,還原 成原始位圖凝危,傳送給gpu 進行渲染。

4晨逝,cup負(fù)荷

因為未壓縮紋理的圖片 在加入到內(nèi)存后 需要cpu進行解碼 還原成位圖蛾默,而壓縮紋理格式不需要,所以 后者會減輕cpu的負(fù)荷捉貌。

總結(jié)一下壓縮紋理的 優(yōu)缺點:

「優(yōu)點」:包體較小支鸡,減小首包下載時間和流量冬念。內(nèi)存占用小,對cpu的壓力小 牧挣,減少手機耗電量急前,減少游戲由于占用內(nèi)存過大導(dǎo)致的崩潰概率。

「缺點」:不同的壓縮紋理格式對手機設(shè)備的支持 不盡相同浸踩,所以 需要根據(jù)市場情況選擇不同的壓縮格式叔汁。紋理壓縮后的文件 遠遠大于png等壓縮格式的大小,對于熱更新检碗,動態(tài)遠程加載資源 來說 是很大的考驗据块,時間久資源包體大≌厶辏可以進行zip壓縮解壓縮另假,處理這種問題。

在cocosCreator中配置及使用紋理壓縮功能

官方文檔參考

https://docs.cocos.com/creator/manual/zh/asset-workflow/compress-texture.html?h=%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怕犁,一起剝皮案震驚了整個濱河市边篮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奏甫,老刑警劉巖戈轿,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阵子,居然都是意外死亡思杯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門挠进,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色乾,“玉大人,你說我怎么就攤上這事领突∨担” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵君旦,是天一觀的道長澎办。 經(jīng)常有香客問我,道長于宙,這世上最難降的妖魔是什么浮驳? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮捞魁,結(jié)果婚禮上至会,老公的妹妹穿的比我還像新娘。我一直安慰自己谱俭,他們只是感情好奉件,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布宵蛀。 她就那樣靜靜地躺著,像睡著了一般县貌。 火紅的嫁衣襯著肌膚如雪术陶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天煤痕,我揣著相機與錄音梧宫,去河邊找鬼。 笑死摆碉,一個胖子當(dāng)著我的面吹牛塘匣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巷帝,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼忌卤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了楞泼?” 一聲冷哼從身側(cè)響起驰徊,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堕阔,沒想到半個月后棍厂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡超陆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年勋桶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侥猬。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捐韩,靈堂內(nèi)的尸體忽然破棺而出退唠,到底是詐尸還是另有隱情,我是刑警寧澤荤胁,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布瞧预,位于F島的核電站,受9級特大地震影響仅政,放射性物質(zhì)發(fā)生泄漏垢油。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一圆丹、第九天 我趴在偏房一處隱蔽的房頂上張望滩愁。 院中可真熱鬧,春花似錦辫封、人聲如沸硝枉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻味。三九已至正压,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間责球,已是汗流浹背焦履。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雏逾,地道東北人嘉裤。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像校套,于是被迫代替她去往敵國和親价脾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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