unity 纹理压缩 内存优化

1.界面打开慢可分为首次打开慢和再次打开慢,首次打开慢一般是由于需要加载过多的UI资源。而再次打开慢就是程序不合理造成的了。首次界面打开加载的资源(如:贴图)会被缓存在内存中,这样再次打开界面由于内存中已经有了资源(如:贴图)所以会更快。作为界面优化,我们应当尽可能地让首次打开得更快—>优化贴图的内存大小 能加载加载速度 减少内存占用,所以正确的纹理设置 十分关键  

 2.概念、方案:
  (1)颜色通道:RGB代表基本三原(基)色通道 A代表透明通道 RGBA32–每个通道占8bit RGBA16–每个通道占4bit 

  (2)图片类型:.jpg–有损压缩不透明 .png–无损压缩有透明 

  (3)图片导入unity 由于GPU不识别图片格式(.png/.jpg) 导致无法直接解压 Unity3D引擎对纹理的处理是智能的 unity导入后不论你是.png/.hpg 都会被设置纹理格式 在不同手机GPU上若某个设置的纹理格式不被识别 unity会自动转换为RGBA32纹理格式—>这样导致贴图是无损无压缩 内存占用是最大的 所以必须设置正确的纹理格式 

  (4)纹理压缩格式的内存计算方式:
    menory=width * height*每像素对应的字节大小
    例如:以一张1024X1024的贴图为例 ---->1byte=8bit
     RGBA32 Bit:表示每个像素占用32bit 4byte,内存大小 = 1024 X 1024 X 4 = 4M
     RGBA16 Bit:表示每个像素占用16bit 2byte,内存大小 = 1024 X 1024 X 2= 2M
     RGB ETC1 4Bit: 表示每个像素占用4bit 0.5byte,内存大小 = 1024 X 1024 X 0.5= 0.5M
     RGBA ETC2 8Bit: 表示每个像素占用8bit 1byte,内存大小 = 1024 X 1024 X 1= 1M
     RGBA PVRTC 4Bit: 表示每个像素占用4bit 0.5byte,内存大小 = 1024 X 1024 X 0.5= 0.5M
     RGBA ASTC 4X4 block : 表示每个像素占用8bit 1byte,内存大小 = 1024 X 1024 X 1= 1M
     RGBA ASTC 8X8 block : 表示每个像素占用8bit 0.25byte,内存大小 = 1024 X 1024 X 0.25= 0.25M
     ASTC–特殊计算 1block–16byte 4X4=1block -->1像素=1byte 8X8=1block --> 1像素=0.25(16/64)byte 

  (5)图片尺寸:
    ETC1(不支持透明通道)、ETC2(支持透明通道)以及ASTC 4X4 要求图片宽和高可以不相等但是必须被4整除
    PVRTC压缩格式要求图片的宽高必须相等并且是2的整数次幂,例如512X512,如果是512X1024那么就无法压缩了 

  (6)硬件限制:
    ETC2只支持OpenGL ES 3.0以上的Android手机(大概2013年以后的手机都支持,不用使用ETC1-不用通道分离)
    ASTC只支持苹果A8以后的设备,iPhone 6 及以上的手机(大概2014年以后的手机都支持) 

  (7)Android 支持OpGL3.0使用RGBAEtc2.0 8 bits(支持透明通道)
    对于没有透明通道的Texture 使用 RGBEtc2 (ASTC大量手机不支持 2016年之后的安卓手机基本支持这种压缩格式) 

  (8)IOS平台使用ASTC6*6 (不支持苹果5,iphone6以后都支持 支持透明通道)压缩率比PVRT4 bit 好 硬件限制弱 

  (9)对于背景图 必须是2的N次幂 这样才能压缩

猜你喜欢

转载自blog.csdn.net/baidu_39447417/article/details/100643454