unity texture 占用内存大小对比
打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例。以下是比较数据。
IPHONE:
1.空项目----空间占用量42.3MB----IPA大小10MB
2.10张1200*520无压缩Texure 单张图占用量2.8MB----空间占用量70.2MB----IPA大小22.9MB
3.10张1200520压缩成10241024PVRTC4 单张图占用量0.5MB----空间占用量47.3MB----IPA大小13.2MB
4.10张1024*1024无压缩Texture 单张图占用量4MB----空间占用量82.3MB----IPA大小14.6MB
5.10张1024*1024压缩为PVRTC4格式 单张图占用量0.5MB----空间占用量47.3MB----IPA大小11.6MB
宗上数据总结:
一、2的N次方大小的图片会得到引擎更大的支持,包括压缩比率,内存消耗,打包压缩大小,而且支持的力度非常大。
二、减小图片的占用大小和内存方式有:图片大小变化(Maxsize),色彩位数变化(16位,32位),压缩(PVRC)。
三、U3D对于图片的格式是自己生成的,而并不是你给他什么格式,他就用什么格式,一张10241024图在无压缩格式下,它会被U3D以无压缩文件形式存放,也就是说U3D里的Texture Preview里显示的占用大小*MB不只是内存占用大小,还是空间占用大小。
缩减贴图占用内存
注意,贴图资源占用内存大小不等于文件大小,而是与资源导入设置有关。同一个导入设置则只与资源宽高尺寸有关,与资源原始文件格式无关。在进行安装包大小瘦身时,已针对各种应用场景,有损或无损的缩减贴图资源大小。由于资源加载后占用内存大小与安装包打包前资源大小一致,所以安装包瘦身实际上也是在减少贴图资源占用内存大小。
举个例子:一张512x512贴图。
使用RGBA 32bit真彩,占用内存 = 4Bytes*512*512 = 1MB;
使用RGB ETC 4bit压缩,占用内存 = 0.5Bytes*512*512 = 128KB。
具体的压缩选型和操作细节,可参考菜鸟在线官网Unity3D游戏开发课程讲解。注意:某些压缩方式是无损的,某些是有损的,开发者应按需采用。
官方:https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
注意:在不支持ETC2的iOS和tvOS设备上,纹理在运行时未压缩到RGBA32。在不支持ETC2的Android平台上,纹理在运行时解压缩为Build Settings中ETC2 fallback指定的格式。
比如: ETC2 ARGB/RGB 4bit 使用图片不是4的倍数就会使用Build Settings中ETC2 fallback指定的格式。
出现结果如下图:
部分数据来源:移动端纹理压缩格式
https://www.cnblogs.com/zsb517/p/6297739.html
在分享一篇 :http://blog.sina.com.cn/s/blog_5b6cb9500102vi6i.html 此文详细分析了资源内存大小 和 不同情况下不同平台常用压缩 方式 注意 正方贴图和非正方贴图 这些前提条件
IOS
常用的PVRTC4,压缩之后的大小为:1024 * 1024 * 4 bit = 0.5MB
除了压缩内存,PVR可以直接被显卡读取,载入速度更快;缺点是PVR需要PowerVR芯片支持,目前iOS设备都能完美支持,Android支持尚少;此外,PVRTC4只支持方形贴图,非方形会被处理成方形,且长宽必须为2的幂。
https://blog.csdn.net/xufeng0991/article/details/51942289
压缩用途:
Unity官网对每个平台默认的纹理压缩格式以及使用建议给出了详细描述,需要注意的是:在不同移动GPU平台下选择GPU支持的压缩纹理,就可以在不需要CPU解压的情况下直接被GPU采样,节省CPU内存和带宽,也可以节省存储的体积。如果目标平台不支持设置的压缩格式,纹理将解压为RGBA32或者RGB24,浪费CPU时间和内存。
https://blog.csdn.net/taoqilin/article/details/82692759