由於有很多人都問過我壓縮格式的問題,今天飛哥又從新提醒了一次。整理一下發個貼,以供你們查閱和討論。html
各類紋理格式,你們參照下U3D MANUAL裏面的具體描述介紹,這是官方的東西。但我以爲有一部內容是錯的,例如佔用內存大小。測試
http://docs.unity3d.com/Manual/class-TextureImporter.htmlspa
基本知識點:3d
DXT格式是Nvidia Tegra提供的,ETC是安卓原生支持的,OPNEGL2.0都支持。ETC2只有OPENGL3.0支持,PVRTC是Imagination PowerVR提供的,ATC是Qualcomm Snapdragon提供的。通常來講,IOS只支持PVRTC的壓縮格式。一旦相應的貼圖格式不兼容的時候,U3D會自動將其轉換成RGB(A)格式。最好的兼容是針對GPU進行打包,例如針對小米的都用ATC格式,但通常開發作不到太細化的選擇。全部設備對RGB 16BITS/ARGB 16BITS/RGB A16BITS/RGB 24BITS/ARGB 32BITS等支持都很好,只是這些格式算是非壓縮格式,對內存消耗和渲染消耗很是不友好。htm
關於壓縮後的在儲存上的大小,假設高清(ARGB32)大小爲1,那麼大概數據以下:遊戲
RGB PVRTC 4BITS:0.25圖片
ARGB PVRTC 4BITS:0.25內存
RGB PVRTC 2BITS:0.13開發
ARGB PVRTC 2BITS:0.13it
RGBA ETC2 4BITS:0.25
RGBA ETC2 8BITS:0.25
RGB + 1-bit ALPHA ETC2 8BITS:0.2
DXT1 :0.3
DXT5 : 0.6
ARGB 16BITS:0.33
RGB 16BITS:0.5
RGB 24BITS:0.85
ARGB 32BITS:1
固然每一個都是根據圖片不同而不同的,以上只是大體數據並不是準確數據。
測試方法:單獨爲改成這樣貼圖格式的文件打成ASSETBUNDLE看大小。
對此抱有比較大疑問的是ARGB 16 和RGB 16,感受可能這裏U3D的BUNDLE有BUG。
內存中的大小,假設高清(ARGB32)大小爲1,那麼大概數據以下:
RGB PVRTC 2BITS:0.0625
ARGB PVRTC 2BITS:0.0625
RGB PVRTC 4BITS:0.125
ARGB PVRTC 4BITS:0.125
RGBA ETC2 4BITS:0.125
RGBA ETC2 8BITS:0.25
RGB + 1-bit ALPHA ETC2 8BITS:0.125
DXT1 :0.125
DXT5 : 0.25
ARGB 16BITS:0.5
RGB 16BITS:0.5
RGB 24BITS:0.8
ARGB 32BITS:1
建議以下:
通常來講3D遊戲咱們壓縮貼圖的時候會把貼圖分爲UI貼圖和場景模型貼圖來考慮,主要是由於有多重採樣的緣故。3D遊戲通常來講都是受攝像機遠近大小改變而採起不一樣的採樣大小,假設不設置多重紋理採樣的話,在遠處會有很是多的白色噪點。
2D遊戲的話,全部都不須要勾選多重採樣,具備3D性質的貼圖,咱們都須要勾選上GENERATE MIP MAPS,這樣會使貼圖大小增長25%這樣。
正方貼圖與非正方貼圖也要區分。非正方貼圖只有16位的壓縮(至關於真彩色減半),因此最好遊戲中都是正方的貼圖。如下是我的選擇貼圖壓縮格式遵循的一些規則,你們能夠參考下,如有問題能夠一塊兒交流一下。
正方貼圖:
IOS下:
a.普通不透明:RGB PVRTC 4BITS
b.普通透明:RGBA PVRTC 4BITS
Android下:
a.普通不透明:RGB ETC 4BITS
b.普通透明:
由於沒有通用最兼容的格式,因此通常狀況是用RGBA 16BIT或有針對性的選擇DXT5/ATC8 BITS/ETC2 8BITS。若是有技術支持,能夠採用RGB ETC 4BITS加一張ALPHA 8的貼圖來實現透明效果。
非正方貼圖:
通常採用16位壓縮,16位會帶來顏色損失,但若是原本美術就是按16BITS畫的話,就不會損失,日本好些手遊都是按16BITS來畫的。這樣的遊戲通常少漸變豔度高比較容易看出來。
a.不透明貼圖: RGB 16BITS
d.透明貼圖:RGBA 16BITS
高清不壓縮貼圖:
RGBA 32BIT
另外:
對於不重要的貼圖,模糊度低的貼圖,建議不只要採起像素壓縮,還要直接壓縮其大小。如光照貼圖壓到512或256。如背景本來1024的圖直接壓到256。玩家不注意到就能夠了。