|
前期回顾:
遇到的问题:
游戏动作师使用Unity3D遇到过的所有问题
使用Unity3D遇到过的所有问题及解决方法(续)
今天这篇算是住院系列的番外篇 讲资源压缩的专题内容
Unity中,动画资源的压缩,我之前写过一次。
但是前两天有个小伙伴W同学找我聊了下资源压缩的问题,他们程序叫他用的方法简直是资源压缩界的泥石流……我详细的聊了一下这个方法,并动手测试了一下。然后我的表情是……
好,等下再讲这个故事。我们先来复习一下我之前已经说过的动画压缩方式。
由于Fbx导出采样原则(即我们通常所说的满帧导出)所致,通常一段动画导出后的容量都会比较大,常见的压缩方式只有一种,即使用unity自带的动画压缩。这里再额外介绍两种非常规的压缩方法以应不时之需。
Unity自带的动画压缩 选项有三种分别是关闭压缩 减少关键帧减少关键帧并压缩文件。 1.关闭即为不进行压缩保持导出时的状态。2.减少关键帧 即unity会检查相邻两帧之间移动旋转缩放的阈值,当这个值小于规定数值时就删掉其中一帧。3.减少关键帧并压缩文件 除了2中所描述的内容还会降动画文件进行打包压缩,使其减少占用硬盘容量,但对内存容量并无影响。
Rotationerror、Position error、Scale error三个值是上文“减少关键帧”内容中所提到的阈值,这个值越大被删除的帧就越多,动画文件相对就越小,同时动画质量相对也就越差。
当动画压缩过于严重时,一些动作幅度较小的动画将会严重失真,如待机动画在压缩严重时腿部将无法站立于地面,而是随着质心摇摆。产生此类问题,只需将该动画的压缩阈值略作调整即可,如果遇特殊情况调整阈值无效可尝试后面的方法。
Max中导出时进行压缩 在max的导出面板也有减少关键帧的选项,其工作原理也与unity相同,只是max作为专业的动画制作软件,他的阈值允许的精度更高可以到小数点后面很多位。而且作为美术软件相信他对动画关键帧的删减也更专业。但缺点也很明显,他不能实时预览。当我们设定一个阈值之后,没有办法实时查看压缩后的效果,难保压缩后的文件没有错误,不适用于处理大量的文件。当unity无法处理某个动画时可以用max尝试。
编辑fbx动画 这种是非常规的办法了,我也是听人说没试过。方法是 在max中导出fbx之后,使用可以编辑fbx的软件(如mortionbuilder),对动画进行删帧。(具体操作1.用mortion builder 2012-204任意版本修改FBX文件并直接打开,帧率设置成12.5,2.然后在animation工具栏下选择勾选Plot on frame,选择12.5帧,Filters to apply 选项选 Unroll,然后点击右下角的Plot就可以了减帧了。不过有时候还要自己手动调整下,毕竟会有掉帧的现象。)这个办法的好处显而易见,由于是动画师手工删除,既能保证动画的质量又能保证压缩到最小。缺点也很明显,工作量大浪费时间,如果不是非常重要的角色出现解决不了的问题,不建议使用这种方式。
所以,W同学用的方式是这样的,导出动画文件FBX,然后将动画分段重命名:
然后将动画拷贝出来单独放在一个文件夹。
到此为止,这些操作都是可行的,而且提取出动画文件,在打包时只打包提取的这部分过滤掉FBX也是能够起到压缩作用的。但是下一步故事开始了……程序要求他们对拷贝出来的动画进行删帧……是的,我们都知道unity是不支持对fbx下的动画进行修改的,但是一旦动画被剥离fbx,unity就会认为这是可编辑的。这个方案看起来很美,它既能像上面提到的mortion builder 这种软件一样手动删除帧,又不需要你有额外的学习成本。但是,如果事情真的这么完美W同学就不会来找到我了。先看图:
这里分别是fbx文件、拷贝出的动画文件、删帧修改后的动画文件。你没看错,删帧之后,文件变大了。这里涉及到一个unity说不上是不是bug的bug,如果对fbx下剥离出来的动画文件进行任何修改,这个文件都会变大三倍左右。因为删了帧文件变大,所以说这是bug,但是本身修改fbx的动画是违规的,所以这也算不得bug……
所以结论就是,这个方案不可行……
|
|