這算是Unity優化的一個基礎環節吧,沒有機會真正去接觸,還是要了解下。
圖片格式
- 不同格式的本質區別在于壓縮算法不一樣,結果圖片大小,還原度也各不相同。
- 常用圖片格式有Png,Jpg,Tga,Psd等。平時主要用Png,Jpg。
- Jpg是有損壓縮不透明,Png是無損壓縮有透明。
簡單紋理格式
- Png等圖片壓縮格式無法直接被GPU解碼,需要先解壓,便會造成消耗。
- 不論導入的圖片是什么格式,Unity都會將其轉換成紋理格式,便于GPU讀取。(應該算解壓成原始格式吧)
- 有RGB16,RGB24,RGBA16,RGB32等。
紋理壓縮格式(硬件壓縮格式 Hardware Accellerated Formats)
- 把紋理進一步壓縮(Texture Compression),不同于Png的那種壓縮,是針對GPU的壓縮格式。
- 不同的GPU能解析的壓縮格式也不同,所以可能沒法簡單的只用一種壓縮格式。并且如果發現GPU不支持當前壓縮格式,Unity就會將紋理轉換成RGB(A),首先是解壓過程的消耗,其次是內存中會保存兩個紋理。
- IOS所有設備支持PVRTC,Android所有設備支持ETC1,但是ETC1沒有透明通道。
- 有的壓縮格式要求文件的分辨率數值為2的次冪(ETC),有的還要求紋理是個正方形(PVRTC)。
-
PVRTC4分別有RGB模式,也有RGBA模式,所以是可以有透明通道的(下面的表格有處錯誤)。
幾種紋理格式對比
紋理壓縮格式的選擇
高清無壓縮 - RGBA32
- 等同于原圖了,效果最好,效率最差。
中清晰中壓縮 - RGBA16+Dithering/RGB16
- RGBA16在遇到漸變的時候表現很差,所以需要做抖動(Dithering)處理。
- RGB16不帶透明通道。
低清晰高壓縮 - ETC1+Alpha/PVRTC4
- 能直接被GPU使用,占用少,效率高。
- ETC1沒有透明通道,需要搭配一張透明貼圖。
- ETC和PVRTC都要求像素長寬都為2的次冪,PVRTC要求像素長寬一致。
總結
- 一般方案:ETC1+Alpha/PVRTC4 和 RGB16/RGBA16 搭配使用。
- 圖片分辨率數值最好為2的次冪(據說就算不是2次冪,最終到GPU中也需要拉伸為2次冪),最好是正方形(用于匹配壓縮格式)。