Unity 贴图压缩方法和对比

在手机平台,贴图必定需要压缩,如果不压缩,没多少手机可以坑得住内存,除非你对贴图的精度需求很高,需要牺牲对低端设备的适配,贴图压缩是一个常用和必要的内存优化手段。

以下是常用的一些贴图压缩对比图


我们在压缩的时候,通常会把贴图分为透明和不透明类型,对于不透明的贴图,则没有通道图,可以直接用RBG16、RGB PVRTC4、ETC来压缩。

对透明的贴图,我们需要分离出两张图,一个是颜色图(包含RGB通道)一个是通道图(定义alpha)

这样分离的原因在于,可以达到更好的压缩质量,而又不至于占用内存太大

比如,颜色图用RGB PVRTC4,通道图也用RGB PVRTC4,这样一张256KB的图可以压缩到64KB

上图列出的是在IOS的平台下的压缩方法,IOS平台的GPU型号统一,所以以上的贴图压缩格式,适合任何IOS平台。对于Android平台下也差不多,只是PVRTC 4换成了ETC,例如:通道图和颜色图都是RGB ETC 压缩。只是不确定所有Android平台都支持RBG16,这个还没做过测试,理论上是都支持的

对于一些精度要求低的贴图,例如场景中的花花草草,甚至可以用RGBA PVRTC2来压缩。比RGBA PVRTC 4还要少一半。

对于UI贴图,优先推荐使用RGB16 + 通道图的压缩方式,因为这对精度上是无损的(就是不会模糊),但会产生色偏。就是一些颜色值发现了变化(PVRTC/ETC这些压缩算法也不能百分百还原颜色值,但不会像RGB16一样发生大片的颜色的丢失)。发送变化的原因在于,RGB16其实就是RGB565,在每个通道的最低3位的信息都被丢弃。所以颜色上会有大面积的偏差,特别是对于渐变类型的纹理,RGB16适合没有渐变或颜色明快的纹理。这个问题可以在前期定美术风格的时候,就考虑进去。但大多数情况下,这些损失是可以接受的,如果不能接受,用PVRTC4来压缩或者原图

总结

IOS平台:对于UI,优先使用RGB16+RGB PVRTC4,次选RGB PVRTC4+RGB PVRTC4。

对于场景,根据精度要求使用RGB PVRTC4+RGB PVRTC4或RGBA PVRTC4,如果精度要求更低,可考虑PVRTC2

Android平台:如果想全平台通用,压缩方式没什么可选择的,对于UI和场景,最通用的方式是RGB ETC4+RGB ETC4

压缩质量:仅比较RGB这三个通道的质量,RGBA32 > RBG16 > RGBA16 > RGB PVRTC4/ETC4 > RGB PVRTC2

版权声明:本文为CSDN博主「Coding十三」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_19929447/article/details/51803028

推荐阅读