寫在前面
素材也是擠壓了很久级历,之前在編寫框架是選擇使用texture packer打圖集還是直接使用unity自帶Packing Tag。當(dāng)然我們使用的是ugui岩灭,最后還是選擇unity自帶圖集打包囱晴,在寫圖片集合工具看到圖片導(dǎo)入的壓縮格式性湿。就看了看貼圖壓縮。
基礎(chǔ)
簡(jiǎn)單說說Texture
在unity中所有的圖片都會(huì)以叫Texture的文件呈現(xiàn)出來襟衰,unity只是把所有的圖片格式轉(zhuǎn)化為Texture來使用贴铜。
這里顯示2.7m并不是圖片本身的大小,而是讀到內(nèi)存中所占用的大小瀑晒。
為什么要壓縮圖片绍坝?
最直觀的感受就是減少包體,同時(shí)也減少我們加載一張圖片到內(nèi)存中的消耗及加載速度苔悦。
壓縮方式
我們可以在這個(gè)界面看到圖片的一些壓縮方式轩褐。我們一般都是選擇的默認(rèn)壓縮在IOS上用的RGBAPVRTC4,在Android上是RGBAETC2的格式间坐。當(dāng)然如果我們需要高質(zhì)量的顯示效果的話我們就選擇RGBA32既可以灾挨。簡(jiǎn)單說說幾個(gè)我認(rèn)為比較常用的格式。其實(shí)壓縮也就是把圖片轉(zhuǎn)成2進(jìn)制換一個(gè)方式存儲(chǔ)嘛竹宋。
壓縮格式 | 描述 | 大欣统巍( 256x256貼圖) | 平臺(tái)支持 |
---|---|---|---|
RGB16 | 不帶透明通道壓縮,對(duì)漸變類圖支持不好 | 128KB | 所有 |
RGB24 | 不帶透明通道蜈七,無壓縮 | 192KB | 所有 |
RGBA16 | 帶透明通道秒拔,對(duì)漸變類圖支持不好 | 128KB | 所有 |
RGBA32 | 帶透明通道,無壓縮 | 256KB | 所有 |
RGBA PVRTC 4 | 在蘋果手機(jī)上默認(rèn)使用的壓縮格式飒硅,需要邊長(zhǎng)是2次方大小 | 32KB | 蘋果 |
RGBA ETC2 | 在安卓上默認(rèn)使用的壓縮格式砂缩,帶透明通道作谚,需要邊長(zhǎng)是2次方大小 | 64KB | 安卓 |
RGB ETC2 | 在安卓手機(jī)上默認(rèn)使用的壓縮格式,不帶透明通道庵芭,需要邊長(zhǎng)是2次方大小 | 32KB | 安卓 |
這里需要邊長(zhǎng)是2次方大小的文件邊長(zhǎng)如果不是妹懒,則會(huì)對(duì)內(nèi)存及GUP造成更大的負(fù)擔(dān)。這里話我們就看圖片是否有透明双吆,沒有的話我們盡量使用RGB類的來壓縮眨唬,
然后就根據(jù)我們的項(xiàng)目情況對(duì)一些圖片做出特定的重新壓縮。暫且寫這么多吧好乐。
2019.3.21更新
2019.3.22更新
關(guān)于圖集設(shè)置:
Q:道具圖標(biāo)可能有幾百上千個(gè)匾竿,如果打到同一圖集里,大小都有2048P蔚万,實(shí)際游戲過程中有額外的內(nèi)存浪費(fèi)岭妖。
按類型拆分也不太好,新手各類道具各一個(gè)反璃,所有類型的圖集就都引用了一遍昵慌,跟打到一個(gè)里沒太大區(qū)別。
如果按等級(jí)段來規(guī)劃版扩,可能會(huì)好一點(diǎn)废离,但是對(duì)于像商城或者某些特定UI上展示的圖標(biāo),很可能就不是同一個(gè)等級(jí)段的礁芦,也會(huì)造成引用好多個(gè)圖集的情況蜻韭。如果按常用或者不常用來分圖集,得要策劃全程來跟進(jìn)這塊內(nèi)容柿扣,感覺也很容易出問題肖方。
或者直接對(duì)這大量的圖標(biāo)都不打到圖集,都是散圖未状,這樣雖然不會(huì)有太多內(nèi)存浪費(fèi)俯画,但渲染效率就低了。
請(qǐng)問下有沒有比較好的方案來處理這個(gè)問題司草?
A:1艰垂、如果圖量遠(yuǎn)超單屏顯示量,那比較實(shí)際的是自己實(shí)現(xiàn)動(dòng)態(tài)圖集埋虹,也就是圖標(biāo)是散圖猜憎,在運(yùn)行過程中根據(jù)需求實(shí)時(shí)拼裝成大圖,可以用Render to Texture實(shí)現(xiàn)搔课。
2胰柑、對(duì)于大多數(shù)游戲,如果不是常駐畫面的界面,以現(xiàn)在機(jī)器的性能柬讨,忍受一下DrawCall也非不可崩瓤。
2019.7.22更新
Android 又有一個(gè)更好的選擇:RGBA Crunched ETC2
看這里的說明,雖然是有損壓縮踩官,但是讀取是分開讀取却桶,現(xiàn)在CPU解壓在給GPU,壓縮力度非常大蔗牡,但是在解壓時(shí)也很快肾扰。
參考資料:
https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
https://blog.csdn.net/bobodan123/article/details/70316538
https://blog.csdn.net/swj524152416/article/details/54911103