Unity-图片压缩格式

怎么了

20210331出版本,第一次出 iOS 包,QA 过来说登陆界面的 UI 图片都有锯齿,Android
包不会。


怎么办

检查登陆界面的图片资源设置,都是用的 RGBA PVRTC4 打的图集 ,于是改下压缩格式试了下,真就好了。问了老大,带透明图压缩成 RGBA PVRTC4 确实是会这样。于是把带透明像素的图用 RGBA32,其他的用 RGB PVRTC4。


总结

为何要纹理压缩
  1. GPU 可以直接读取,无需再解压。
  2. 减少内存消耗。
  3. 减少图片体积。
常用方案

Android :ETC1 ,因为不带a通道,所以对于有透明像素的图片,需要再拆出一张 ETC1 用来存放a通道。
iOS :RGBA PVRTC 4bits。

大小的计算

8 bits(位) = 1 bytes(字节,B)
1024 bytes = 1 KB
1024 KB = 1 MB
假如有一张 1024x1024 的纹理,用的 RGBA32,1像素占用4个字节,总共占用 1024 x 1024=1 MB,1M x 4 = 4M;假如是512x512,则为 256x1024=256 KB,256KB x 4 = 1M。其实就是 4M x 1/4 啦。

特殊的地方
  1. PVRTC 要求尺寸为2的N次幂,要正方形
  2. ETC1 要求尺寸为2的N次幂,宽高可不同
  3. ASTC 是更优的压缩格式,但是对设配有要求,需要舍弃老设备。

参考

【纹理优化(二)】纹理压缩格式
游戏图片纹理压缩相关总结
你所需要了解的几种纹理压缩格式原理
Unity 带 Alpha 图片手机包失真
Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题