遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

遊資網發表於2019-11-08
編者按:在遊戲開發中,有些事看似不起眼,實際上卻影響很大,比如遊戲資源的壓縮,會影響到最終包體的大小,而包體過大可能會讓手機記憶體小的玩家無法下載。在本文中,作者vian分析了Unity貼圖壓縮需要注意的地方,希望對大家有所幫助。

01 為什麼要做貼圖壓縮?

在Unity下,為降低DC,通常都會做打包圖集處理。我們基本用的一種是TexturePacker,還有就是使用UGUI下,Unity用的設定Packing Tag自帶的圖集打包。那麼,這些圖集到底佔多大記憶體?都有哪些壓縮方式呢?

接下來看一組Texture的預覽(PC platform):

遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

以上RGBA32壓縮格式帶透明通道,記憶體佔用情況:

2048*2048的貼圖佔(2048*2048*4)/1024/1024=16MB

1024*1024的貼圖佔(1024*1024*4)/1024/1024=4MB

以上RGB24壓縮格式帶透明通道,記憶體佔用情況:

1024*1024的貼圖佔(1024*1024*3)/1024/1024=3MB

512*1024的貼圖佔(512*1024*3)/1024/1024=1.5MB

為啥要做貼圖壓縮呢?最基本就是包體與記憶體佔用兩方面。

02 壓縮格式

如上面提到的RGBA32和RGB24。

遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

在編包的時候我們可根據安卓或蘋果平臺去設定相應壓縮格式。

遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

另外各種壓縮格式列表可見:

遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

我們目前專案裡PC下,不帶透明通道的選的RGB24,帶透明通道選的RGBA32。

安卓選用的ETC2_RGBA8壓縮格式,安卓4.3以下系統不支援。一些不帶透明通道如戰鬥大背景圖等選用ETC_RGB4壓縮格式,另外還一些不帶透明通的圖示等選用ETC2_RGB4壓縮格式。

蘋果選用的ASTC_RGBA(6*6),需要注意的是要A8處理器的才支援,iPhone5s、iPad mini2、ipadAir不支援。

03 ASTC裡2D block footprints and bit rates


遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

以上是block4X4-12X12之間的每畫素的bit rate值。選用的Block越大壓縮越大。

04 一些壓縮格式記憶體參考比對


遊戲包體太大,記憶體不足?Unity貼圖壓縮注意這幾點

上面ETC_RGB4、ETC2_RGB4壓縮佔記憶體大小一樣,但對於不帶透明通道的貼圖ETC格式畫質較好ETC2畫質中。可解釋我們戰鬥大背景用的ETC壓縮格式,圖示等選用的ETC2。

那麼一張512*512帶透明通道貼圖,它們可怎麼估算?

在蘋果ASTC_RGBA(6*6)格式下約佔多大記憶體?

(512*512*3.56/8)/1024=114KB

(1024*1024*3.56/8)/1024=455.7KB(有偏差,上面展示456.9KB?)

在安卓ETC2_RGBA8壓縮格式下佔多大記憶體?

(512*512*(8/8))/1024=256KB

(1024*1024*(8/8))/1024=1024KB

假如某戰鬥裡的角色按2張1024*1024貼圖,一場3V3戰鬥最多按24個角色算,技能等除外,在蘋果ASTC_RGBA(6*6)格式下佔多大記憶體?

24*2*((1024*1024*3.56/8)/1024/1024)=21.4MB

在安卓ETC2_RGBA8壓縮格式下佔多大記憶體?

24*2*((1024*1024*(8/8))/1024/1024)=48MB

參考資料:

1、維基百科:
https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC
https://en.wikipedia.org/wiki/Adaptive_Scalable_Texture_Compression
https://zh.wikipedia.org/wiki/Apple_A8
2、簡書——【Unity】貼圖壓縮淺析,作者:黑可樂
https://www.jianshu.com/p/512d068dcddd

作者:vian
來源:騰訊GWB遊戲無界
原地址:https://mp.weixin.qq.com/s/jXLfXqtUHpkZfZ1popwHZA

相關文章