unity贴图压缩浅析

发表于2019-10-15
评论0 6.8k浏览

1.在unity下,为降低DC,通常都会做打包图集处理。我们基本用的一种是TexturePacker,还有就是使用UGUI下,unity用的设置Packing Tag自带的图集打包。那么,这些图集到底占多大内存?都有哪些压缩方式呢?

接下来看一组Texture的预览(PC platform):

UTdK39ZPiKL1NCOnc27B.png

以上RGBA32压缩格式带透明通道,内存占用情况:

2048*2048的贴图占(2048*2048*4)/1024/1024 = 16MB

1024*1024的贴图占(1024*1024*4)/1024/1024 = 4MB

以上RGB24压缩格式带透明通道,内存占用情况:

1024*1024的贴图占(1024*1024*3)/1024/1024 = 3MB

512*1024的贴图占(512*1024*3)/1024/1024 = 1.5MB

为啥要做贴图压缩呢?最基本就是包体与内存占用两方面。

 

2.压缩格式

如上面提到的RGBA32和RGB24

YBEol8iyH8YJggmrRdTN.png

压缩格式描述平台支持

在编包的时候我们可根据安卓或苹果平台去设置相应压缩格式。

0?wx_fmt=png

另外各种压缩格式列表可见

0?wx_fmt=png

下面这张表我觉得总结的比较好,感兴趣的可以了解参考下:

0?wx_fmt=png

我们目前项目里PC下,不带透明通道的选的RGB24,带透明通道选的RGBA32。

安卓选用的ETC2_RGBA8压缩格式,安卓4.3以下系统不支持。一些不带透明通道如战斗大背景图等选用ETC_RGB4压缩格式,另外还一些不带透明通的图标等选用ETC2_RGB4压缩格式。

苹果选用的ASTC_RGBA(6*6),需要注意的是要A8处理器的才支持,iPhone5s、iPad mini2、ipadAir不支持。

 

3.ASTC里2D block footprints and bit rates

0?wx_fmt=png

以上是block4X4 - 12X12之间的每像素的bit rate值。选用的Block越大压缩越大。

 

4.一些压缩格式内存参考比对

bZegCsSSMh9SPAGWZs0S.png
YOoAo5tJOUX3x4eRZSyx.png

上面ETC_RGB4、ETC2_RGB4压缩占内存大小一样,但对于不带透明通道的贴图ETC格式画质较好ETC2画质中。可解释我们战斗大背景用的ETC压缩格式,图标等选用的ETC2。

那么一张512*512带透明通道贴图,它们可怎么估算?

在苹果ASTC_RGBA(6*6)格式下约占多大内存?

(512*512*3.56/8)/1024 = 114KB

(1024*1024*3.56/8)/1024 = 455.7KB(有偏差,上面展示456.9KB?)

在安卓ETC2_RGBA8压缩格式下占多大内存?

(512*512*(8/8))/1024 = 256KB

(1024*1024*(8/8))/1024 = 1024KB

假如某战斗里的角色按2张1024*1024贴图,一场3V3战斗最多按24个角色算,技能等除外,在苹果ASTC_RGBA(6*6)格式下占多大内存?

24*2*((1024*1024*3.56/8)/1024/1024) = 21.4MB

在安卓ETC2_RGBA8压缩格式下占多大内存?

24*2*((1024*1024*(8/8))/1024/1024) = 48MB

 

5.参考资料

https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC

https://en.wikipedia.org/wiki/Adaptive_Scalable_Texture_Compression

https://zh.wikipedia.org/wiki/Apple_A8

https://www.jianshu.com/p/512d068dcddd

  • 允许他人重新传播作品,但他人重新传播时必须在所使用作品的正文开头的显著位置,注明用户的姓名、来源及其采用的知识共享协议,并与该作品在磨坊上的原发地址建立链接
  • 可对作品重新编排、修改、节选或者以作品为基础进行创作和发布
  • 不可将作品进行商业性使用
  • 需在以作品基础上创作的演绎作品上适用相同类型的知识共享许可条款

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: