Unity骨骼动画压缩算法
Unity骨骼动画压缩算法
算法简介:
35行代码,帮你减少50%的动画文件大小!
该算法会将Unity里Animation文件的存储精度降低,从而达到压缩的目的。不过可以放心,该方法几乎是无损压缩。详细后面会有介绍。如果有部分动画文件因为压缩导致肉眼可以看出区别,可以对该文件单独处理,提高压缩精度或者不压缩。以我们项目为例,500多个动画,只有一个动画损失肉眼可辨。粗略测试得出结论,可以压缩骨骼动画文件50%的大小。
原理介绍:
该算法实际上只做了一件事,将存储骨骼位置信息的浮点数的精度降低,从而减少大量的近似为0的用科学计数法表示的数据。这些数据虽然都小到对动画效果毫无影响,但实际值又不一样,Unity在打包的时候为了保持其精度,不能压缩这类数据。处理前后的结果如下图所示。
快速上手:
一:将ToolAnimationCompress.cs脚本放到Editor目录下,如下图:
二:选择你要压缩的动画,或者选中所在文件夹。如下图:
三:点击CompressClip。如图:
四:控制台输出如下,表示压缩成功。
五:该工具也支持压缩FBX骨骼动画。如下图,选中待压缩的FBX动画文件。
六:点击CompressFBX开始压缩。
输出如下图表示压缩完成:
(注意,目前对3DMax导出的FBX动画文件支持完美,Maya导出的FBX文件有问题。因为格式不太一样,后续支持)
其他说明:
对动画文件做压缩,主要有以下几个方面:
1.减少关键帧数量。(Unity自身属性设置可以完成)
2.通道省略。(比如旋转通道,平移通道,缩放通道都可以选择性的删除。)
3.曲线差值退化。(一些匀速变化的通道,可以删除曲线插值相关的数据)
4.骨骼剔除。(比如手指骨骼数据,在多数动作下都是可以删除的)
5.精度压缩。(将小数点保留到后3位,而不是Unity自身的10位。)
以上各方法都可以取得一定的成效,比如骨骼剔除和通道省略在某些地方都可以
取得不错的效果(10%到30的压缩比),但操作成本较高,性价比低。所以该工具
最终只做了一件事——精度压缩。后面的测试也表明,仅此一项就能达到50%左右的
压缩比,并且此时再做其他操作(如通道删除)效果非常微弱。感兴趣的同学可以
自行分析和测试
PS: 建议分批压缩,逐模块压缩,及时测试看效果,可以及早的发现不合适的动画。
不建议几百个动画一起压。