顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2013年3月7日 星期四

Unity3D輸出之圖檔壓縮格式(行動平台)

要對圖檔壓縮進行優化時,須先了解各圖檔之規格,Unity Manual中有提到各平台可支援的各種圖檔格式,請參考在本文結尾的參考文章中的[1]以及Wiki中的資訊。

iOS:
PVRCT
  貼圖尺寸須為二的冪次方之正方貼圖
Android:
RGB Compressed ETC 4 bits (ETC1)
 (Ericsson Texture Compression, supported by all OpenGL ES 2.0 GPUs)
 4bits / pixel,無Alpha,Android 2.2(Froyo)以上支援
RGBA 16bit
 有Alpha,容量是ETC的四倍(請看參考[1])。

若要減少Alpha對資源的佔用,有一些技巧可以解決(請看參考[3][4])。
 方法1,將Alpha Channel抽出,與Color Map連接拼成一張貼圖。
  優點:一張貼圖、Shader改動較小。
  缺點:貼圖只能二方連續(one direction wrap),提高shader效能消耗
 方法2,將Alpha Channel抽出,單獨存成一個檔案,再從shader進行結合。
  優點:貼圖可四方連續,運用上靈活性較高。
  缺點:shader需要額外多出一個sampler。
當硬體不支援輸出之壓縮格式時,Unity會將資源以RGBA的方式做Decompress,如此會提高渲染時間、記憶體消耗和Decompress時間(增加讀取階段的時間)。

下表是檔案容量對照(含MipMaps)

尺寸 ETC 4bits RGBA 16bit RGBA 32bit
2048
2.7 mb
10.7 mb
21.3mb
1024 682.8
2.7 mb
5.3mb
512 170.8 682.7
1.3mb
256 42.8 170.7 341.3
128 10.7 42.8 85.3
64 2.7 10.7 21.3


參考文章:
[1]http://docs.unity3d.com/Documentation/Manual/Textures.html
[2]http://docs.unity3d.com/Documentation/Manual/android-GettingStarted.html
[3]http://forum.unity3d.com/threads/73998-DXT-or-PVRTC
[4]http://malideveloper.arm.com/develop-for-mali/sample-code/etcv1-texture-compression-and-alpha-channels/
http://gamedev.stackexchange.com/questions/44134/unity-android-truecolor-texture-performance-hit-and-alternatives-for-truecolor
http://stackoverflow.com/questions/9148795/android-opengl-texture-compression

http://zh.wikipedia.org/wiki/RGB
http://en.wikipedia.org/wiki/Ericsson_Texture_Compression
http://en.wikipedia.org/wiki/PVRTC