本文章作者网虫虫原创,如有转载请注明出处。
之前也一直关注纹理压缩,也看过大部分文章,但对包体占用和内存占用比较详细的介绍和对比是比较少的。
于是我用了一下午时间,专门对比了常用的压缩格式。
GooglePlay纹理格式分布
纹理格式介绍
RGBA32
RGBA32占用内存是最大的,一般用于还原原始品质,所以对显卡带宽压力也会比较大。一般不会选择该格式
1 2 3 |
2048*2048的贴图占(2048*2048*4)/1024/1024=16MB 1024*1024的贴图占(1024*1024*4)/1024/1024=4MB |
ETC2
ETC2是OPENGL3.0后支持的,大概2013年后的设备都会支持
RGBA ETC2 Compressed 8bits下
1 2 3 |
2048*2048的贴图占(2048*2048*8.00)/8/1024/1024/=4.0MB 1024*1024的贴图占(1024*1024*8.00)/8/1024/1024/=1.0MB |
ASTC
英伟达官方介绍:https://developer.nvidia.com/astc-texture-compression-for-game-assets
ASTC在iPhone6(A8芯片)以及之后的设备都支持
Unity对ASTC介绍(2016年之后的安卓手机基本支持)
https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
1024x1024贴图占用内存
不同block之间压缩比
1 2 3 4 5 |
2048*2048的贴图4x4占(2048*2048*8.00)/8/1024/1024/=4.0MB 2048*2048的贴图6x6占(2048*2048*3.56)/8/1024/1024/=1.8MB 2048*2048的贴图8x8占(2048*2048*2.00)/8/1024/1024/=1.0MB |
测试
没有专门测试iOS的PVRTC格式,是因为PVRTC强制要求宽高相等,且为2的整次幂。因为PVRTC对大部分纹理尺寸限制过高,不太适用项目的批量设置,而且压缩比对于ASTC来说并没有太多优势。
RGBA(带透明通道图)
测试使用的是SpriteAtlas图集,因为游戏中图集占比一般都是最大的,不过带A通道图,测试结果也是一样的。
所有格式的压缩质量均选择Best的情况下
占用对比
效果对比
大图对比
效果结果
第一:RGBA 32 bit,这个毋庸置疑,没有压缩肯定效果好
第二:RGB(A) Compressed ASTC 4x4 block,效果比RGBA 32 bit稍微差点,但比另外三个强太多了
第三:RGBA Compressed ETC2 8bits,效果比前两个差点,但也能说得过去
第四:RGBA Crunched ETC2,效果比前一个差的多
第五:RGB(A) Compressed ASTC 8x8 block,效果跟前一个差不多。Crunched ETC2比ASTC 8x8强点,比ASTC 6x6要差的
RGB(不带透明通道)
测试使用的是1080*1920的背景图
所有格式的压缩质量均选择Best的情况下
占用对比
效果对比
大图太大就不上传了,而且RGB大图仔细看好久也没看出太大差别,可能跟选择的图有关。效果基本可以参照RGBA结果
结论
兼顾内存、质量、兼容性来说可以采用下面策略
优先内存、包体,对质量、兼容性要求不高可以考虑
优先兼容性、包体,对内存、质量要求不高可以考虑
以上大部分为自己实测分析结果,如有出入请联系作者修改。希望对你们能有借鉴作用~
- 本文固定链接: http://www.u3d8.com/?p=2490
- 转载请注明: 网虫虫 在 u3d8.com 发表过