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