Unity 2017.3 中的Crunch纹理压缩库
以Crunch格式压缩的纹理首先解压到DXT格式,然后在运行时上传到GPU。Crunch压缩的纹理不仅节省磁盘空间,还具有更快的解压速度。这让Crunch压缩格式在分发纹理非常高效。不过Crunch压缩纹理需要很长的时间进行压缩,这也是该压缩格式的主要缺点。对于大型项目来说,在编辑器中把项目中的所有纹理压缩成Crunch格式可能需要花上几个小时。
Unity 2017.3引入的更新版Crunch压缩库可以将DXT纹理压缩速度提高2.5倍,同时提升了10%的压缩比。更重要的是,更新后的压缩库能够压缩ETC_RGB4纹理和ETC2_RGBA8纹理,意味着可以在iOS和Android设备上使用Crunch压缩。这可以帮助开发者减少移动游戏的构建大小,满足App Store下载大小限制,让应用内容面向更广泛的受众群体。在Android、iOS和tvOS平台如果需要使用Crunch压缩,开发者可以在检视窗口为纹理选择RGB Crunched ETC或RGBA Crunched ETC2格式。如果在默认标签页勾选了“Use Crunch Compression”,Android平台的所有纹理都会默认使用ETC Crunch压缩。
Crunch压缩库未来还会进一步改进。原始版本相比,最新版压缩DXT纹理的速度提升了5倍,压缩ETC纹理的速度提升了1.3倍。最新版Crunch压缩库可在GitHub资源库进行下载。
大小及性能对比
我们用两个Asset Store资源商店中的Unity项目《Adam Character Pack: Adam, Guard, Lu》和《Adam Exterior Environment》进行了压缩性能测试。测试在Windows编辑器中运行,CPU采用i7-4790, 3.6GHz,使用默认Crunch质量设置。
使用DXT编码对纹理进行Crunch压缩
在使用更新版压缩库时,DXT纹理的压缩速度和压缩比都有了显著提升。同时更新版压缩库完全保留了原始版的压缩质量,两个库生成的压缩纹理在解压后是完全相同的。
使用DXT编码对项目《Adam Character Pack:Adam, Guard, Lu》中的纹理进行Crunch压缩,93个未压缩的DXT格式纹理,总大小652.7MB。
使用DXT编码对项目《Adam Exterior Environment》中的纹理进行Crunch压缩,227个未压缩的DXT格式纹理,总大小717.8MB 。
使用ETC编码对纹理进行Crunch压缩
ETC_RGB4纹理和ETC2_RGBA8纹理的Crunch压缩与DXT纹理类似,只是纹理被解压为ETC或ETC2格式,并在运行时上传到GPU。ETC格式和DXT格式有很多共同点,因此我们对原始算法的修改可以同时用于这两种格式的压缩。ETC编码Crunch压缩的默认质量参数在设置后,提供和 DXT Crunch压缩大致相同的平均Luma PSNR。
下表是使用ETC和ETC2编码对纹理进行Crunch压缩的性能测试结果。
质量对比
下图是使用默认质量设置进行Crunch压缩的纹理示例。图片采用Crunch压缩,选择DXT纹理格式或ETC纹理格式。
本文资源
Unity中的Crunch压缩库:
https://github.com/Unity-Technologies/crunch/tree/unity
Unity 2017.3 Beta版:
https://unity3d.com/unity/beta
小结
现在可以下载Unity 2017.3 Beta版并试用更新版压缩库。