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