1.减少骨骼。所有优化都受限于骨骼数,骨骼数太多的话,即使其他优化都做的很到位,也还是会占用很大空间。但是过少的骨骼会限制美术效果,一个人形角色最少也要19根骨骼(MAX中最少21根,但是有时脚趾骨骼不需要,那么脚趾骨骼不参与蒙皮,不要导出即可19根)。骨骼数的多少是从原画阶段就要考虑的,原画设定很多裙摆、飘带、头发的话,骨骼数必然会增多。笼统来说一个有手指、头发、少量装备的角色,骨骼数会在40-50根左右。
2.减少关键帧。在骨骼数相同的情况下,减少动画长度和关键帧密度也会降低动画占用空间。每多一个关键帧,都会多出动画信息。而如果关键帧数量相同,动画时间更长的,也会占用更多空间,这里涉及到unity存储动画的三种曲线方式Constant,Dense和Stream。通常动画是stream曲线,这种曲线越长信息越多。不过说到底,关键帧的多少和动画时间的长短,对整体动画文件影响比较小,只要美术同学在制作过程中有这个意识,不要制造无用信息即可。
3.不要让动画满帧导出。这里包括烘焙、塌陷以及各种飘带解算插件生成的满帧。参照第二条可知满帧的话会导致文件变大,插件生成的满帧手动删除即可,烘焙导出的的话,可以打开曲线过滤选项,或者干脆不要使用需要烘焙的连接方式。
4.删除无用曲线。如bone骨骼的缩放曲线通常是不做动画的,那么就可以将缩放曲线删除掉。这里要注意的是,如果要删除一个角色的A骨骼缩放曲线,一定是所有动画里都没有A骨骼的缩放动画,否则在切换动画的时候,有可能会出现,删除了曲线的动画,会继承没删除曲线动画的动态。
5.transform值只保留小数点后四位。这是个需要程序写个工具来实现的。小数点后四位是个常用值,实际是保留三位还是五位可根据具体情况而定。而且每次操作之后一定要对比下动画的变化,没有明显误差才可以使用。
6.动画压缩optimal(最佳压缩)与keyframe reduction(帧压缩)。帧压缩是通过计算两帧之间的差值,如差值小于设置好的阈值(error参数),则删除帧。帧压缩使用的是stream曲线,两帧之间以曲线链接,每个节点有可以调整的切线,比较像贝塞尔曲线,stream曲线是unity存储动画占用空间最大、动画表现力最好的存储方式。最佳压缩,在帧压缩基础上,转化两点间的stream曲线Dense曲线,Dense曲线两帧之间以直线相连,Dense曲线的存储占用小于stream曲线,画面表现也次于stream曲线。并且选择哪条stream曲线转换为Dense曲线是unity黑箱完成的,无法控制。还有一种Constant曲线,就是从初始帧到结束帧完全是一条平直的线段,占用空间最小没有动画。
7. Legacy、Generic、Humanoid三种动画模式。测试结果显示,其他条件相同下Humanoid 占用内存要小于Legacy 和Generic,其原理是,humanoid模式下,动画只记录旋转信息,而不记录位移和缩放信息。
小结,一般来说大部分项目中,动画资源占比并不大,通常只需要设置好动画压缩、截取transform值即可。因为unity的动画压缩会做类似2、3、4节提到的操作,虽没有手动的彻底,但是快捷方便性价比很高。而在格斗、动作以及舞蹈类游戏动画资源在美术资源里占比比较大,需要用比较多的精力去优化,除了上面介绍的方法之外,还有些项目用MotionBuilder或者自研的unity工具,去修改fbx文件。大幅提高性能的优化通常都伴随着画面品质的降低,性能优化和画面表现是天平的两端,多花点时间培养美术同学的优化意识,要比花时间培养程序同学的审美来的实在,赶紧把这篇内容转给你的美术同事吧!返回搜狐,查看更多
责任编辑: