Unity 2017.3 中的Crunch纹理压缩库

发表于2017-11-17
评论0 1.73w浏览
Crunch是一种有损纹理压缩格式,通常用于DXT纹理压缩。Crunch压缩可以减小纹理大小、节省磁盘空间、加快下载速度。原始版本的Crunch压缩库由Richard Geldreich开发。Unity从5.3开始支持Crunch纹理压缩格式,我们在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版并试用更新版压缩库。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引