Character Studio中的IK混合运算
Character Studio中的IK混合运算
作者 钱麟
动画制作中你会经常让角色拿东西,如挥舞一把剑或拿起一个东西,但这也经常是动画师最头疼的问题之一,这是我们没有很好地理解IK与其混合功能(Blend)的原因,现在我们用一个角色喝水的动作为例深入学习这一知识。
首先我们先来看一些基础的概念,首先是IK,它是反向动力学(Inverse Kinematics)的简称,它的反意词是正向动力学FK(Forward
Kinematics),一个FK链的最好例子就是机械臂,要让作为链的最后一级的机械手抓到物体,就要从最高层级的那一段一点一点转下来,也就是说只能是父级物体影响子级物体(在《火星人》系列书中有这么个经典的例子,大家可以去查阅);而IK则恰恰相反,它的子级物体将影响父物体,子物体一动,整个链会做出相应的变动。这样的一个子物体由于可以牵动整条链,因此可以称做是一个IK目标。
在Character Studio中,混合功能(Blend)提供了在FK与IK之间转化的计算方法,如果我们把IK目标看成是一块磁铁的话,blend就是让你控制它的吸引力的,如果值为0的话IK目标就没有作用,也就是说是这条链是FK链,如果把值继续上调,那它的吸引力也就越来越大,也就变成了IK链。
在这个例子,我们先重温一下有关的参数,然后进行实例的制作,记住我们的目标是让角色拿起杯子喝水。
在建立好Biped后,我们进入motion面板,先进入编辑Biped模式,把面板往下拉,在Key Info展卷栏下有一段叫Kinematics的参数,如图(可能被藏了起来,用下面一个小加号可以打开这些参数):

别看这里只有四个操作,但是功能却是非常强大的,我们先来重温一下它们:
IK Blend:调节IK链中IK目标的吸引力的强度,值为0时链为FK链,最大值为1,即IK目标拥有最强的吸引力,这个概念上面刚说过。
Body:缺省时是打开的,可以确保四肢(双手和双脚)的运动是基于身体的坐标进行的。
Object:缺省时是关闭的,打开时可以使Biped的四肢是基于世界坐标系或指定物体坐标系进行的,基于世界坐标系时,当blend=1时,可以在Free
From模式下方便地使双脚锁于地上。如果要选取特定物体的坐标系的话,就用下面的箭头,方法是先选中Biped的一只手(或脚),再按这个箭头按钮,然后在场景中点击选择物体,这样手(或脚)以及与身体所组成的IK链就会跟着那个物体动了。
我们还会用到的是key framing展卷栏中的锚(anchor),就是那四个代表手和脚的图标,用它们可以把手和脚锁定在某个位置上,不让它们动。特别是在锁脚方面是动画师常用的操作,锁手(脚)有一套固定的工作程式:
1)将手脚的位置放好,选中要锁的手或脚;
2)按key framing展卷栏中的相应的锚(anchor)的图标;
3)设置关键帧(用key framing展卷栏中的Set Key按钮),在弹出的对话框中按Yes,同意进入自由编辑模式(Free
Form);
4)在Kinematics rollout展卷栏中将blend设置为1,将下面的坐标模式选为object,让它基于世界坐标系动画;
5)如果你要在n帧内不让脚动,将时间滑块移到第n帧,再设置一个关键帧。
好,现在我们来看看我们要做的动画,一个角色先以最标准的姿势坐在桌子前,双手放在桌上,面前放着个杯子,如图。

我们在制作前最好自己先拿自己做一下实验,看看完成这一个动作需要多少时间,需要多少帧。同时也看一下还需要什么动画次动作,如果你拿自己做实验的话,你一定会发现这个动作不仅是手的运动,整个人,特别是头部,还有后仰的动作,这些都是我们在制作中要考虑进去的。说到这里Character
Studio还支持motion capture,如果能有钱买得起的话,我就不需要再写下去了……
第一步我们是先要让角色的手拿住杯子,先把角色的Biped按上面的图调整为坐姿,这个需要读者慢慢地做,急不得,调整完后,由于角色的四肢中只有右手是需要动画的,因此我们把另外三个手(脚)锁掉,分别选中左手和两个脚,一个一个地按key
framing展卷栏中的锚(anchor)(就是手和脚的图标),调整完后各自记录一下关键帧(用key framing展卷栏中的Set
Key按钮)。
我们刚才拿自己做了实验,右手从放在桌子上到拿住杯子约需半秒钟的时间,如果我们用NTSC制来做动画的话,我们就设置这个动作的长度为15帧(NTSC制为30帧/秒)。
打开Animation按钮,把时间滑块拨动到第15帧,将右手水平移动到杯子上并旋转手掌,使其拿住杯子,不过这样的动画是很僵硬的,不自然,因为手在做这样一个动作的时候运动轨迹是一条曲线,而不是一条直线(如图所示)。我们在motion面板打开path
visible按钮(如下图),这样你可以清楚地看到手的运动轨迹。我们可以做一下相应的调整,在第十帧处把手的位置向上提一下,设置一下关键帧,让它的运动轨迹是一条曲线。
 
还有一点就是要让手指抓住杯子,这个如果要一根根做的话我想没多少人能忍受得了,在Character
Studio里这很容易办到,在General展卷栏里,有个工具叫做Bend Links Mode(弯曲连接模式),还记得吗?是专门用来设置脊椎或手指弯曲的,我们把它打开,再选择右手的所有手指(建议用名称选择),只要用旋转工具一转,就能使它们都自然弯曲,直到它们捏住了杯子,当然比如大拇指这样的个别手指可能还是要单独调整一下的,这时别忘了Animation按钮必须是打开的,时间滑块在第15帧,如果关了的话就再去设置一下关键帧。

抓住杯子后第一个步骤就完了,下面我们来看第二个步骤,把杯子拿起来喝水。这时我们就要用到IK目标了,前面说了那么多,我想现在不用说大家也知道杯子就是IK目标,把手搭在这个目标上,目标到哪儿,手以及手臂所组成的IK链就会做出相应的动作,这样动画的目标就只集中在杯子上了。
开启IK反向动力学,方法是在Key Info展卷栏里把blend设置为1。接下来是设置IK目标,选择下面的object模式,再用下面的小箭头在场景中选择杯子物体(一个cylinder)。这时千万别忘了记录关键帧!

确保打开Animation按钮,我们再把时间滑块移动到30帧,你可以画这样一条曲线,然后让杯子沿曲线移动(如图,用path控制器,具体方法请参阅有关max控制器的材料),当然还要配合杯子的旋转。其实你如果喜欢一个个关键帧做的话也可以,因为没有几个关键帧,还不需要在Track
View里调整时间,似乎更方便一些,同样照着这张图我想只要是有一点点max基础的人都会做,我也就不再写下去了。最后别忘了次动作,即头朝后仰的动作,选择头、脖子以及胸部的一些块,打开Bend
Links Mode按钮,用旋转工具给它们做个仰头的动画,很简单的。
  
最后留给大家一个思考题,刚才我们用的是混合功能中的IK,现在我们把blend值设置为0,让它变成FK,我们再试着做把杯子放下来的动画,虽然这步骤比较多,也没这个必要用FK来做,不过我想这对于练习FK还是很有好处的,大家可以参阅机械臂的FK原理去自己研究一下。
|