貼圖壓縮格式

由於有很多人都問過我壓縮格式的問題,今天飛哥又從新提醒了一次。整理一下發個貼,以供你們查閱和討論。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。玩家不注意到就能夠了。

相關文章
相關標籤/搜索