Unity 动画压缩及其优化

本文探讨了Unity游戏中的动画优化重要性,并提供了详细的优化思路和方法,包括降低存储精度、压缩关键帧、删减冗余关键帧,以及减少骨骼、裁剪不需要的曲线和调整存储精度等策略,有效减小游戏包体和内存占用。
摘要由CSDN通过智能技术生成

一:为什么要做动画优化

    动画文件在游戏包体和内存中占的比例仅次于贴图,优化好动画文件,就优化了一小半游戏内存。拿我们正在开发的游戏举例,优化后的包体和内存比优化前减少了一百多兆,大概优化掉了五分之一的内存。


二:优化思路

  

2.1:Unity引擎对导入的AnimationClip提供三种压缩格式,Off、Keyframe Reduction和Optimal。其中,Off表示不采用压缩处理;Keyframe Reduction表示使用关键帧进行处理,Optimal则表示Unity引擎会根据动画曲线的特点来自动选择一个最优的压缩方式,可能是关键帧压缩,也可能是Dense压缩;设置Animation.Compression:Animation.Compression默认选择的是Optimal。

2.2:AnimationPositionError默认0.2,AnimationRotationError默认0.1,AnimationScaleError大部分需要丢弃,所以默认就可以。具体值需要根据自己游戏调整,我们游戏由于战斗需要拉近镜头所以对动画精度要求较高,调的压缩值比较小。设置fbx动画导入格式,默认AnimationPositionError = 0.2,AnimationRotationError = 0.1,根据项目调整,表示应该减少多少相关曲线,值越低精度越高。
2.3:默认不开启Resample Curves选项:Unity官方给的建议是开启,但是开启会增大内存,所以在动画没有问题的情况下建议关闭该选项。


三:对AnimationClip资源的压缩

动画文件保存的大部分都是关键帧数据,unity中可以看到:

这里包含的信息很多,官方文档有一些介绍:https://docs.unity3d.com/Manual/class-Animator.html

结合文档,先说下曲线,从上面可以看到曲线有Pos,Quaternion,Euler,Scale,Muscles,Generic,PPtr,这里我们可以关注常用的Pos,Quaternion,Scale,代表着位置,旋转,缩放,Curves Total代表上面的所有曲线综合,计算方法:468 =48*3+48*4+44*3,Pos(x,y,z)3条曲线,Quaternion(x,y,z,w)4条曲线,Scale(x,y,z)3曲线。

然后再看看存储格式,Constant,Dense,Stream,Unity3种数据存储方式。

Constant代表基本不变的数据,哪些数据用这个存储方式?很典型的就是scale曲线,基本上都是1,Constant的内存占用很小,基本上只有关键帧值数据,不含有切线数据。

Dense格式存储,采用的是线性插值方式,不含有切线数据,少内存。一般是线性插值的曲线会采用这种方式;

Stream格式存储,采用的是曲线插值方式,含有切线,时间等全部数据,多内存。最高格式的存储,变化多样的曲线采用这种方式;

上面3种方式Unity会根据关键帧的数据情况来选择存储方式,基本原则就是增加Constant数据,减少Stream数据。


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值