Unity 贴图压缩学习笔记

前言

Unity中,贴图会占用大量的空间与内存。所以贴图压缩就成了必要流程。贴图的大小极大程度决定了包体大小,内存占用以及资源的加载速度。UGUI中提供了Packing Tag将图片打包成图集,在减少内存和资源占用大小的同时也能减少DrawCall。那么剩下的就是针对各个平台来选择合适的压缩方式了。

常用压缩

ETC:ETC压缩是一种早期开发的有损纹理压缩技术。可对24-bit RGB进行6倍压缩,但是不支持带有Alpha通道的图像压缩(需OpenGL ES 2.0同时图像的长宽是4的倍数)。
ETC2:ETC2拓展了ETC1,提供了更高质量的RGB和RGBA,单通道(R11)和双通道(RG11)数据的压缩(需OpenGL ES 3.0同时图像的长宽是4的倍数)。
ASTC:ASTC中ARM研发的一种较新的贴图压缩格式,从IOS9(A8架构,现在都iOS12了)开始支持ASTC压缩格式 ,相对于PVRTC2/4而言,ASTC(4X4)的压缩比会增加到0.25,不过显示效果也会好很多,而且不要求图片长宽相等。
Unity中ASTC压缩率:
Unity 贴图压缩学习笔记_第1张图片
不同压缩格式压缩对比
Unity 贴图压缩学习笔记_第2张图片
Unity 贴图压缩学习笔记_第3张图片
压缩格式:
Unity 贴图压缩学习笔记_第4张图片
点击放大图片
Unity 贴图压缩学习笔记_第5张图片

压缩大小

公式:
像素大小 = 16-bytes / 分块宽高 * 8-bit;
压缩率 = 原始像素大小(32-bit) / 像素块大小;
图像大小 = 原始图片大小 / 压缩率;
假设一张4MB的10241024原始图片:
Unity 贴图压缩学习笔记_第6张图片
以RGBA32压缩格式带透明通道,内存占用情况:
2048
2048的贴图占(204820484)/1024/1024 = 16MB
10241024的贴图占(102410244)/1024/1024 = 4MB
以上RGB24压缩格式带透明通道,内存占用情况:
1024
1024的贴图占(102410243)/1024/1024 = 3MB
5121024的贴图占(5121024*3)/1024/1024 = 1.5MB

平台支持格式

DXT: Nvidia Tegra提供。
PVRTC,ASTC:iOS.
ETC:Android原生,OPENGL2.0.
ETC :Android原生,OPENGL3.0.
所有设备对RGB 16/RGBA16/RGB24/RGBA32等支持都非常好,但是这些格式为非压缩格式。对内存消耗和渲染消耗较大。

问题:为何png在硬盘大小为几十KB,在Unity显示却变大, 因为Unity显示的大小为实际运行时占用内存的大小,而Png为一种压缩显示格式。

Unity默认压缩格式说明
Unity图片设置选项说明

你可能感兴趣的:(Unity学习笔记)