撰写了文章 更新于 2019-02-16 14:15:00
如何通过MAYA与UE4制作一段武侠角色游戏动画(二)
两端固定的飘带骨骼链是一件比较麻烦的事情,在前两天请教了白老师,他回复邮件的原文如下。
首先你的问题很好,两端固定的飘带绑定形式,在游戏动画领域,据我所知没有非常完善的解决方案。换句话说你也是触碰到了绑定问题的某个极限,恭喜一下
就这个问题我谈谈自己的看法
如果按照常规的骨骼架设思路,将骨骼链从 A 一直延伸到 B
则近 A 端的骨骼移动时,势必影响作为子物体的近 B 端的骨骼,造成 B 端骨骼移位而无法固定的结果
而具体到 SpringMagic 工具,计算是根据骨骼层级关系由上自下进行的,所以也不能避免这个问题
你可能会想到用某些约束功能来固定住 B 点骨骼的位置,然而这样会造成 B 点骨骼和其他骨骼远离,产生模型拉扯的结果
如果把所有骨骼都固定,那也就失去了飘带的运动效果了
由此人们想到一些妥协的办法,比如
自 AB 两端各自延伸出一条骨骼连,在中间汇合,并从 C 点延伸出一根辅助骨骼,也与它们汇合,AB骨骼链都用 spineIK 驱动,然后两根曲线的 CV 点权重在 AC 和 BC之间分配,这样 C 骨骼的移动会带动曲线,进而带动飘带骨骼链,如果为了避免运动时曲线长度改变而造成骨骼脱节,可以做一个简单的表达式让骨骼长度能和曲线长度匹配
这种做法的利弊:
优点是绑定简单,骨骼数量也不多,可以在 C 骨骼上应用 SpringMagic 来实现一定程度的自动计算效果,并且动画效果不好还可以手工调整 C 骨骼来修正
缺点是飘带细节不足,因为动画都由 C 来控制,相当于只有两端和中间三个控制点,因此如果要做细致的波浪飘动,这种方法是不行的,而且也无法实现碰撞
另一种方式是
由 C 点出发,以扇形分布到飘带上各段,而飘带上的骨骼互相之间是平级独立的。此时选中飘带骨骼用 SpringMagic 进行计算,并且靠近 AB 端的骨骼用较小的摆动值而靠近中间的用较大的摆动值,便可获得两端相对固定而中间相对飘摆的效果。但注意,骨骼链得至少 2 段,不能直接由 C 到飘带,因为飘带工具要求所计算的骨骼不能是末端骨骼
这种方法的利弊:
优点是可以保留细节,扇形骨骼越多,细节越多,因此用在长飘带上效果会比上面的方法好,并且可以碰撞
缺点是骨骼数量较多,而且只能用 SpringMagic 计算,如果想手工修改动画效果,会非常繁琐。而且整体运动幅度受限,不能很随意的飘摆
根据邮件内容我进行了一下实验,下图为实验结果

接下来进行来实战。
这次的实战对象是角色手臂上的臂绳,采用了第一种的骨骼架设方案

下面6个控制点蒙皮给中间的控制用骨骼链C,两端的顶控制点打成簇之后P给对应关节即可
摆动还是比较自然的,连接处将权重刷到手臂骨骼上就可以。
接下来把他们全都打包到root后整体导出到UE4,嗯,仿佛已经能看到成功画面了,但结果...

袖子部分应该是权重问题,但是手环部分理应不会出现这种情况才对。于是进行了一番实验。

最后发现原来是臂环部分的骨骼并没有自动进行动画烘焙。选择全部骨骼链,执行动画→关键帧→动画烘焙,即可解决问题。

如果想恢复IK控制的话保持骨骼正确位置将IKhandle的IK混合再开启即可。

结果已经比较正常了,还剩一些丢失权重的顶点(不知为何在MAYA里看不出来),大致找一下位置给刷回来即可

OK,今天先这样。




