Unity打包后的图片大小仅与分辨率和导入设置有关,与原始图片大小无关。 例如,jpg 就是有损压缩。 压缩源文件只会使最终结果变得模糊,对打包后的大小没有任何帮助。
2. DXT 压缩 1. DXT 是PC 上常用的压缩算法,质量较低。 2. 压缩算法介绍
DXT压缩将图像分割成4*4的小块。 每个块采用两种极端颜色,其余颜色进行插值。 有四个颜色值00、01、10和11。
压缩后单色为16位,即RGB565,
不支持透明通道。 原始图像是RGB24,16格,需要24*16=384位。
压缩后,两个16位颜色+16次插值,16*2+2*16=64位,压缩比1/6
3.DXT3和DXT5压缩
基于DXT1,支持透明图像,另外使用64位数据保存透明通道值,压缩比为1/3。
DXT3压缩:每个像素使用4位来存储alpha值,透明度值比较粗糙。
DXT5压缩:透明通道也是单独插值unity 图片压缩格式,有两个8位极值,每个像素采用3位插值,8*2+3*16=64位
4、缺点
详细信息将丢失,例如:
三、ETC压缩 1、ETC是Android平台上常见的压缩格式,质量较低。
ETC:不支持透明通道。 图片的宽度和高度必须是2的整数次方。
ETC2:是ETC的扩展,支持透明通道,图像宽高只需为4的倍数
2. 压缩算法介绍
图像还被分成4*4的小块进行压缩。 每个块被分为两半,用1位来指示是水平分割还是垂直分割。
取2种颜色,两半各一种,分为单独模式或差分模式,用1位来表示取色模式。
单独模式:取两种RGB444颜色,适用于两侧色差较大的情况
差分模式:取RGB555+RGB333的颜色创作人,其中第二块的颜色为偏移值,适合两侧色差不大的情况,精度较高。
压缩时会生成全局映射表,两个子块中的每一个都需要3位来确定使用哪一行数据。
对于每个像素,使用 2 位数据来指示使用该行的哪个修饰符,减去偏移值。 例如,对于表中(0, 0)网格中的-8,偏移值为(-8,-8,-8)。 将偏移值与子块颜色相加即可得到当前像素的颜色。
压缩前:16*24=384位
压缩后:1+1+24+3*2+2*16=64位,压缩比1/6
4. ASTC压缩 1. ASTC是Android和IOS平台下的高质量压缩方法。 支持Android 5.0和iPhone 6及以上机型 2. 压缩算法介绍
它也是按块压缩的,块为 128 位。 块大小非常灵活,包括4*4、6*6、8*8、12*12等尺寸。 支持 LDR、HDR、2D 和 3D 纹理。 每个块也有端点对。 端点对不一定是 RGBA。 你也可以只使用部分通道,比如RG通道,这样可以更好地压缩法线贴图。
BISE算法:比如有5个数字,值为0、1、2。正常存储需要2*5=10位。 但实际上只有3^5=243
在ASTC压缩过程中,每个部分的长度不是固定的。
BlockMode:平面数量、权重范围、权重网格大小
Part:分区数
ConfigData、MoreConfigData:每个端点对的端点模式
对于块内颜色分布比较复杂的情况,分析块内颜色的分布情况,进行分区硬件设备,并分别存储其对应的端点。 在获取块内像素值时,首先定位分区,然后计算分区内的颜色。
为块中的每个像素存储插值权重,但权重的数量可以少于像素。 对于较大的块,例如12x12,只能存储4x6的权重网格。 解码时,权重网格双线性放大到块的大小。
3.块大小选择(块越大,压缩质量越差,但图片越小)
(1)法线贴图:尽量选择4*4unity 图片压缩格式,避免丢失过多数据
(2)细节纹理:选择4*4或6*6,否则细节会丢失
(3)一般纹理:选择6*6或8*8
(4)没关系,但是图片尺寸很大:可以考虑8*8、10*10、12*12,否则包裹会太大