開始進行許久未動的工作,將游戲打包資源縮小,有鑒於之前老早寫好了 buildinfo

打包出來呢,大概主要以 texture2D 為主,如下:

【按類型統計】

類型 數量 總大小
UnityEngine.Texture2D 3037 10.97 GB
UnityEngine.AudioClip 474 193.13 MB
UnityEngine.TextAsset 1445 47.55 MB
UnityEngine.Font 9 16.01 MB
UnityEngine.Sprite 5219 12.34 MB

Asset Type Summary

Type Count Total Size %
UnityEngine.Texture2D 3003 10.57 GB 97.4%
UnityEngine.AudioClip 474 193.12 MB 1.7%
UnityEngine.TextAsset 1436 46.6 MB 0.4%

其實也挺正常的,不過還是有縮減的空間,項目是打包 exe 的,所以就采用了 BC7 壓縮,如下設定:

56015-502o2wjepty.png

這邊呢厘清幾個信息點,之前已經沒仔細去探討的

1、為什麼圖檔明明 13.9MB → 64MB?

PNG 是壓縮格式,存的是壓縮後的資料。
Unity 匯入後會解壓成 原始像素資料 存入 VRAM,方便 GPU 直接讀取:
4096 × 4096 × 4 bytes (RGBA8) = 67,108,864 bytes ≈ 64 MB
GPU 不能直接讀 PNG,它需要每個像素都展開成原始值,所以一定會比檔案大很多。

2、改成 BC7 預期大小?

BC7 的壓縮率是 固定 4:1(每像素從 4 bytes → 1 byte):
4096 × 4096 × 1 byte = 16,777,216 bytes ≈ 16 MB
從 64MB → 約 16MB,節省 75%。

3、BC7 的優缺點

說明
畫質最佳 同類 Block Compression 中畫質最高,幾乎無損
支援 Alpha 完整支援 RGBA,適合有透明的貼圖
節省 VRAM 比 RGBA8 少 75%
GPU 原生解壓 讀取速度快,不增加運行負擔
壓縮時間慢 Build/Import 時 CPU 壓縮耗時較長
僅限 PC/Console 手機平台(Android/iOS)不支援,需改用 ASTC
有損壓縮 極細緻漸層或法線圖仍可能有輕微瑕疵

後面就不複雜了,無非就是套用 BC7 或是設定規則套用,我在這邊做了幾個不一定的條件設定

  1. 使用工具根據項目跟 condition 做 BC7 處理
  2. 加入 TextureImporter 但不開啓

主要必須思考這件事決定權不在程式身上,所以必須將功能設計的通透點(就是可擴展性+嘗試性)
也不復雜就是篩選幾個目錄,跟不同條件,可以看看

40217-812dbpf1099.png


套用后的畫面我就不貼上來了,我自己是看不太出來區別,容量大概少了25%吧,從 10G 降低到 7.8G

02223-kkje370lead.png

73411-j5f9onxo2ue.png

咋看之下覺得還可以,但想到美術進行了無效圖檔的刪除,這個容量少的比例似乎有點微妙;查看了下,目前 BC7 處理的檔案數量大概為 21%,也難怪實際節省的比例并沒有想象的大,不過也算是有效果就是

游戲運行也能看出來實際減少的部分

這是原版
78024-1732k8bpchz.png

這是 BC7 版本
78578-e4j53s0wpo7.png

無標籤

新增評論