1. 程式人生 > >Unity3D–Texture圖片空間和記憶體佔用分析

Unity3D–Texture圖片空間和記憶體佔用分析

Texture圖片空間和記憶體佔用分析。由於U3D並沒有很好的詮釋對於圖片的處理方式,所以很多人一直對於圖集的大小和記憶體的佔用情況都不瞭解。在此對於U3D的圖片問題做一個實際資料的分析。此前的專案都會存在這樣或者那樣的打包後包大小與記憶體佔用情況的問題,所以這次所以徹徹底底得分析下U3D對於Texture的處理方式。程式裡的記憶體優化請參考《Unity3d優化之路》。減少U3D包大小請參考《unity3d之如何將包大小減少到極致》

我打包多種型別的專案,空專案和10張放在Resources資料夾中的圖為比較案例。以下是比較資料。

IPHONE:

1.空專案—-空間佔用量42.3MB—-IPA大小10MB

2.10張1200*520無壓縮Texure 單張圖佔用量2.8MB—-空間佔用量70.2MB—-IPA大小22.9MB

3.10張1200*520壓縮成1024*1024PVRTC4 單張圖佔用量0.5MB—-空間佔用量47.3MB—-IPA大小13.2MB

4. 10張1024*1024無壓縮Texture 單張圖佔用量4MB—-空間佔用量82.3MB—-IPA大小14.6MB

5.10張1024*1024壓縮為PVRTC4格式 單張圖佔用量0.5MB—-空間佔用量47.3MB—-IPA大小11.6MB

宗上資料總結:

一、2的N次方大小的圖片會得到引擎更大的支援,包括壓縮比率,記憶體消耗,打包壓縮大小,而且支援的力度非常大。

二、減小圖片的佔用大小和記憶體方式有:圖片大小變化(Maxsize),色彩位數變化(16位,32位),壓縮(PVRC)。

三、U3D對於圖片的格式是自己生成的,而並不是你給他什麼格式,他就用什麼格式,一張1024*1024圖在無壓縮格式下,它會被U3D以無壓縮檔案形式存放,也就是說U3D裡的Texture Preview裡顯示的佔用大小**MB不只是記憶體佔用大小,還是空間佔用大小。如下圖所示:

U3D的內部機制為自動生成圖片型別來替換我們給的圖片,在圖片的壓縮方式上需要進行謹慎的選擇。

壓縮格式在U3D的Component Reference裡有介紹我就不再詳細介紹,只介紹幾個重點的:

RGBA32格式為無壓縮最保真格式,但也是最浪費記憶體和空間的格式。Automatic Turecolor和它一個意思。

RGBA16格式為無壓縮16位格式,比32位節省一半的空間和記憶體。Automatic 16bits和它一個意思。

RGBA Compressed PVRTC 4bits格式為PVRTC圖片格式,它相當於把圖片更改了壓縮方式新生成了一個圖片來替換原來的我們給的圖片格式(比如我們給的是PNG格式)。

注意:U3D所有圖片的壓縮格式都會以另一種方式來儲存,不會以你給的方式來儲存,只有你指定了某種格式,它才會轉成你要的格式。而且壓縮格式在Android裡並不一定有效,因為Android的機型多,GPU的渲染方式也不一樣,有的是Nvidia,有的是PowerVR,最最好的在安卓機子上啟用RGBA16方式,因為這個是適應所有機型的,並且比32位佔用量少一半,但也需要因專案而異,只是推薦使用的格式,可以多用。