Unity里使用BC7 RDO压缩

今天玩了下机械恋心Demo,发现开发组有些4K背景贴图还在使用BC1。在群里水了会,问了为啥没用BC7(毕竟现在DX11已经是标配了)——开发组是处于包体大小的考虑,Unity官方的crunch压缩只支持了ETC和DXT。

像UE的话收购oodle之后就集成BC7 RDO了,开箱即用非常省心。不过抱着折腾的心态,我快速试了手在不破坏Unity资源管线+没有Unity源代码的情况下是否也能用起来。

想起来之前在Richard Geldreich大佬博客上看到过bc7enc_rdo,co一份跑起来

bc7enc.exe bg.png -z5.0

输出了容器为dds的图,扔进Unity就能用;同时复制了两张原图,分别设置为Normal Quality+Crunch Compression(BC1)和High Quality(BC7)作为对比

到这一步可以看到Unity压的BC7和bc7enc压的BC7大小都是8M(废话,毕竟都是block based),而Crunch过的BC1就只有0.7M。

接下来就是RDO的magic time——用Addressables随便打个bundle出来看看,可以看到BC7 RDO的压缩率非常不错。

总之,快速摸了下整个路子走通是没问题的。当然最理想的情况还是Unity原生支持BC7的RDO处理;在没有源代码且引擎没有暴露相关资产处理接口的情况下,也可以考虑外部处理后直接导入DDS资源。
虽然这样做的最大问题在于出多平台包会有点麻烦,但是PC项目完全可以考虑,毕竟之前实测下来包体大小可以立砍一大刀+不被美术同学发现。