用过UNITY的朋友们都应该知道,unity为了在运行时提升装载资源的速度,采用了单独的图片压缩方式。而并不是我们平时所接触的JPG、PNP等。
简单来说,UNITY资源最后打包出来的图片基本上会大大超出我们原文件大小。简而言之,图片资源大小和以下几点相关
- 图片长宽大小
- 图片是否是2的幂次方
- 图片是否是正方形
- 图片的压缩格式
我们以IOS平台为例子,unity提供了 DXT(4位和8位)、16BIT、32BIT(true color)几种压缩格式。经过实测,不带alpha(透明通道)的图片,使用DXT压缩可以达到理想效果。但若图片带alpha,使用DXT压缩则会在透明边缘出现非常模糊的现象,图片基本不可用。
这时候我们需要采用16BIT或者32BIT的压缩存储方式,但显而易见,存储开销和运行游戏时的内存开销将大大增加。
另外,unity提供的16色压缩算法还很“独特”的对颜色进行了“分层”,效果效果那是非常的渐变分明。。
(以下图片来自dither4444:https://github.com/keijiro/unity-dither4444)
下图是转了16色的,在很多游戏场景里基本不可用。
下面我们的神器dither4444出场了,
这个是使用dither4444处理成16色的图片,能看得出来差别在哪吗?
其实原理很好理解,使用点阵的疏密来替代颜色的变化(在90年代的PC游戏里经常使用的效果)
这样我们能以损失较小图片品质的情况下,大大降低我们的资源大小。所以我们在不得已需要使用非DXT压缩格式时,可以考虑使用本工具对图片进行压缩。
附代码(以下代码是我改过dither4444的,将自动对指定目录的导入图片进行16BIT转换)