Maya—FBIK系统研究和使用方法介绍
【简介】
FBIK——FullBodyIK:全身反向动力学系统,是maya7.0后新加入的骨骼系统。虽然它是motionBuilder骨骼系统的精简版,但功能依旧强大。新版本的Maya除了改进FBIK和Maya动画模块的结合,在外观上也有了一些变化(骨骼效应器的标记由原先的线框变成了实体小球)。
FBIK系统可快速的完成二足和四足骨架的绑定,且操作方便灵活。要使用FBIK系统,首先要了解它的几个特点:
1.FBIK是通过核对层级或骨骼名称进行解算器生成的。
2.骨骼的初始Pose应尽量是T造型(手臂骨骼应是平行于地面),朝向必须是Z轴正向,脚掌骨骼应和地面形成夹角而不是平放,膝盖间关节角度应小于180度。当然,四足角色的手臂骨骼和腿部是一样的。具体可参考Visor中的范例。
3.新的Maya版本中,为了规范骨骼层级的名称,已经去掉了传统层级的命名,直接采用FBIK的命名方式。而层级名称中,有两个比较特殊: LabelArm和LabelLeg。使用这两个名称,将会自动将所选骨骼的子级按顺序自动命名。例如对肩膀骨骼执行LabelArm,就会出现Shoulder,Elbow,Hand……直到最后一个子骨骼。
4.可以对FK骨架和反应器设置动画关键帧,但不应对原骨架设置。
5.FBIK系统中,IK和FK模式在于交互预览时区别不大,使用它们的不同在于动画关键帧之间的解算效果:IK是以直线计算效应器间的路线,而FK则是弧线。
6.FBIK系统中一个重要的功能就是Pin(固定)。Pin不是约束,你所看到的效果只是交互的过程,必须对反应器设置动画关键帧才能看到真正的动画效果。
7.FBIK效应器由于内置复杂连接,初始位置常常非零,在动画数值上的操作会比较棘手;在使用过程中,效应器偶尔会出现无法通过撤销操作而返回原位的情况,因此需要使用GoToStancePose功能。8.fbik效应器可增加多个辅助效应器和辅助轴心,实现灵活的关节控制。
【fbik的创建基础】
创建fbik系统,首先角色的关节或关节层级必须使用规范的命名。
fbik有四种关节:basejoints(基本关节),rolljoint(旋转关节),auxiliaryjoints(辅助关节),accessory and additional joints(附加关节)。基本关节是角色骨架中的主要关节,严格对应fbik的规定名称,如臀部,脊椎,头部,膝盖,脚踝,肩膀,手肘,手腕;
旋转关节主要用于辅助创建真实的关节扭曲运动,如肩膀和手肘之间的关节,手肘和手腕之间的关节,臀部和膝盖之间的关节,膝盖和脚踝之间的关节;辅助关节用于制作细小的关节分支效果,如脖子,肩膀领口处,手掌,手指,脚掌,脚趾;附加关节并不包含于fbik系统中,它们仅用于额外的运动,如辫子,尾巴用的关节链。基本关节是必须的,其他的关节可根据需要进行选择。
jointlabels(关节层级)并不是场景物体的名称,而是一个标签分类,用于识别效应器应当控制的关节效果;jointnames(关节名称)则是关节物体的实际名称。
"关节层级"和"关节名称"实际上并没有太大的联系,它们是在增加fbik effector(fbik效应器)时可选的识别方法:bylabel或者byname。"关节层级"在使用上较为简单方便,但无法使用更复杂的辅助关节,如"旋转关节"和部分"辅助关节";"关节名称"即可使用特定的fbik效应器,同时在蒙皮权重绘制时易于识别所选关节。不过通过bylabel的方式,建立basejoints(基本关节)加auxiliaryjoints(辅助关节)的组合足以应付多数情况。
以下图表是规范的关节层级和关节名称,以及系统识别它们后所生成的效应器名称。
#表示数字,如1,2,3,4……
此外,如collar(领口),chest(胸部),wrist(手腕),ankle(踝关节)等此类非标准名称,fbik不会对其进行识别,也就是不会增加相应的效应器来控制这些骨骼。
接着上文
相对于传统的骨骼绑定,fbik对于骨骼关节的朝向细节并没有严格的要求,因为它是通过特殊的fbik解算器来计算结果的,就像内核布料系统的内核节点一样。fbik系统是基于命名创建的,这里我选择较为实用的label方式进行。
1.创建角色骨架。在正交视图中创建符合角色动画需要的骨架,可以有两个选择:手动绘制或者从visor库中将fbik范例的骨架拖入场景后删除附带的fbik解算器。
2.显示关节标签。在此更正上篇内容中的小错误:jointlabel直译是"关节标签"的意思,不过为了更好的理解名称的结构,因此我习惯称它为关节层级,于是就忽略了它的字面意思。
显示关节标签有两种方法:displyanimationjointlabels;skeletonjointlabeling。不过 disply的功能只相当于jointlabeling菜单下的toggleselectedlabels,需要先选择关节。我直接执行 showalllabels显示所有关节标签。
3.添加关节标签。如果是手动创建的骨架,关节标签会显示为none,也就是没有;如果是fbik范例,关节名称和关节标签都已经具备。
(1)将addjointlabels菜单拖拽至一边,先选择骨架z轴正向的右边关节,添加labelright;
(2)选择手臂(腿部)的主关节,添加labelarm(labelleg),系统将会自动赋予每个子关节一个标签;
(3)如果不是按范例骨架那样的关节层级,出错的标签就需要手动添加,手臂和腿部的结构应该是(从高到低):collar(领口)-shoulder(肩膀)-elbow(手肘)-hand(手腕)-finger(手指);hip(臀部)-knee(膝盖)-foot(脚踝)-toe(脚趾)。
*labelfingerbase和labeltoebase比较特殊,可以理解为手掌和脚掌部位,五指(趾)的根部,在添加这两个标签时是不会显示后缀base的。
(4)脊椎的层级关系是:root(根部:盆骨)-spine(腰部脊椎)-spine(胸部脊椎)-none(胸腔)-neck(颈部)-head(头部)。
(5)为了在bindskin(蒙皮)后绘制权重时对关节的识别,此时可对右边的关节进行命名,格式可参考列表。当然,你也可以跳过这一步,只要你觉得后期操作没太大影响。
4.镜像关节。此时右边的关节已经包含了关节标签,为了省事,不用对左边的关节添加标签;如果创建了完整的骨架,此时应删除左边的手臂和腿部关节,选择右边关节,执行skeletonmirrorjoint(镜像关节)。
*注意:必须更改mirrorjoint的mirror across为yz。如果对关节进行了命名,也可同时在此对关节名称进行批量替换。关节名称的绑定方法可点击观看较早的资料介绍。
5.区分标签。镜像后的关节包含了关节标签信息,但它们保留的是右边的标识(r),因此要选择手臂和腿部的根关节,添加labelleft。
6.建立fbik系统。选择根关节(盆骨的三叉部位),执行skeletonfullbodyikaddfullbodyik(设置如下:by label;biped)。
7.fbik系统结构。fbik系统包含hiksolver(hik解算器),hikhandle(hik手柄),effector(fbik效应器)集合以及一套fk骨架,此外,系统还自动生成一个动画角色组。 hiksolver控制fbik的解算(类似刚体解算器,内核解算器这样的总开关),hikhandle驱动角色骨架中的关节行为,fbik效应器和fk 骨架则用来设置各种姿势,进行动画关键帧的制作。此时,原骨架作为输入骨骼来使用,不应再对它进行其他操作,包括动画关键帧。
8.皮肤绑定。选择原骨架的根关节,shift加选模型,执行 skinsmoothbind,使用maya2011最新增加的weightblended方式进行蒙皮。这种方式可同时对模型使用两套蒙皮权重,classiclinear(标准线性)是传统的蒙皮方式,计算每个关节对模型点的权重混合效果;而新加入的dualquaternion(双重四元),与关节权重无关,它的效果是保持模型的体积不变,用于关节扭曲的部位相当不错,如手肘,手指,膝盖。两种方法的混合使用,可减少权重绘制上的工作量。
【动画控制系统介绍】
fbik是fullbodyinversekinematics的简称。全身反向动力学,顾名思义,整个角色关节都是由反向动力学系统控制。
在制作动画前,了解fbik系统的元素作用很重要—这比动画调节优先。
【fk和ik】
先来认识fk和ik。
反向动力学ik(inversekinematics)与正向动力学fk(forwardkinematics)各有优缺点,通常需要结合使用。fk动画是按关节的父子级关系由高到低进行的,制作具有一定目标朝向的动画时难度很大,如伸手拿物品;
ik则以子级优先,先定目标,而后通过ik解算器来完成父级的关节动画。对于两足类(人物)角色而言,fk和ik在一些情况下需要相互切换。
ik是指向目标的动画,优点是动画精度和效率很高,但同样的,由于ik走的是直线,很多时候反而不能满足一些常规的动画效果。如人物随意的摆手时,手掌都是走弧线的,相对于ik,fk完成这类动画的速度更快。
通过物理学的杠杆原理,我们得到"力矩"这样的概念:当力矩相等,距离越长,力就越小。力矩也就相当于能量,那么结合实际可以看到这样有趣的现象:人们在闲散时,无意识的动作都是带有弧线的,因为这会降低力的消耗;当人们需要朝特定目标进行动作,为了最快的达到目的,因而都会使用更多的力来走最近路线。同样的支撑手臂,热烈的鼓掌和一记左勾拳,也是fk和ik动画的区别。当然,用杠杆原理来解释ik有些牵强,不过还是有那么些道理在里面的。
最后,我们可以根据实际情况归纳一下:fk适合制作角色闲时的细节动作,ik适合腿部以及具有目标倾向的手部动作。
附带提一下:采用euler欧拉旋转轴直接控制的fk骨骼动画(或者通过控制器控制骨骼),会发生万向节锁和万向节翻转的异常现象,因此骨骼的绑定不仅仅要解决fk和ik的切换问题,还要同时解决万向节旋转的动画问题。
【fbik的动画标记菜单】
选择fbik效应器,右键可弹出一个fbik系统专用的标记菜单,用于设置动画关键帧时的快捷操作(也可以使用系统提供的快捷键,如切换fk/ik:alt+1或2或3,但个人觉得右键菜单更实用)。
以下会多次提到fk关节,它是fbik系统隐藏的骨架,最终的动画效果通过它来完成,然后再传递给原骨架。注意不要将它和reachmode:fk(fk吸附模式)混淆,fk关节是骨架,而fk模式是动画的计算方式。
【reachmode:fk/ik模式的切换】
尽管名为fbik,但并不是没有fk,fbik系统的优点就是可随时进行fk和ik的切换(这也就是为什么fbik系统中包含一套名为fk的骨架)。不过fbik中的fk模式和传统的fk关节不太一样,fbik的fk只是对最终的动画效果而言,动画制作过程中,它使用的仍是方便的ik系统。
首先,要在交互操作过程中得到正确的角色运动效果,你必须选择reachmode为ik模式,并设置一个初始关键帧。
在设置动画过程中,fk和ik模式的切换是通过对效应器的属性reachtranslation(位移吸附)和reachrotation(旋转吸附)设置关键帧实现的(0至1表示fk到ik的融合程度),最终效果将直接包含在fk关节的动画过程中,对效应器的动画无影响。无论你选择哪个效应器,fk/ik模式对关节动画产生的影响必须是在设置动画关键帧之后才能看出来。
设置reachmode为simple模式时,动画效果和ik模式是一样的,但关键帧信息不会被写入fk/ik效果,常用于制作初始的pose关键帧-- 实际上就是效应器的reachtranslation和reachrotation不会被设置关键帧,可在动作细节调节时再手动设置。
【keymode关键帧模式】
reachmode控制的是fk关节的动画路线,而keymode控制的则是效应器(以及相关联的fk关节)的执行数量,关节的最终运动是二者计算的结果混合:通过hikhandle(角色 ik手柄)将效应器的动画转移到fk各个关节上,形成两套不同的关键帧动画。all表示所有效应器和fk关节将被设置关键帧;bodypart表示所选效应器的临近效应器和fk关节将被设置关键帧;selected表示只有所选效应器和相关联的fk关节将被设置关键帧。
最终,fbik系统包含两套动画曲线:效应器动画,隐藏的fk关节动画。原骨架不含动画信息,它是由隐藏的fk关节进行控制的。如果使用了角色组,效应器和fk关节的动画都会被归类到角色组元素中。
【effector效应器】
接着来研究effector效应器的使用技术要点。通常的角色绑定,都包含有复杂的控制器,对角色的每个部位进行不同的控制,fbik的效应器也就等同于这些控制器。由于经过一系列的解算,fbik效应器并不是那么容易理解的;不过仅通过少数效应器就能完成复杂的动画这点上,fbik也算是平易近人。
效应器初始数值不为0,但不能通过freezetransformations(冻结变形)命令来归零,否则会产生初始pose(姿势)的异常。
每个效应器的属性中都有reachtranslation和reachrotation这两个属性,它们控制着fk关节对效应器的吸附程度,也就是上面我所说的fk/ik模式的融合程度。
*fbik的效应器允许远离关节运动,当启用reachtranslation或 reachrotation,与效应器相关联的关节,会参考效应器的位移或旋转,进行小幅度吸附效应器的运动。当效应器运动范围较大时,reachtranslation很有用,可在一开始就开启;而reachrotation会出现一些异常翻转,此时要慎用该属性。
pin(固定)是效应器的另一个重要的功能,pintranslate和pinrotate分别是对效应器位移和旋转的固定,pinboth则是两者皆使用,unpin取消固定。它不是即时生效的约束,因为你通过其他效应器带动它产生的运动变化只出现在交互操作过程中,实际动画时该效应器不一定具备pin效果。pin一定要在下一个动画进行前设置(位置应在前一个关键帧),它的作用效果会立刻影响fk关节的最后位置;当通过pin完成动画效果后,再修改pin的状态是不影响动画效果的。所以,不需要对pin参数进行动画关键帧的设置,这样做没意义。
由于pin效果还和fk关节对效应器的吸附程度有关,因此pin通常是配合ik模式使用,因为fk模式时会出现关节滑动的现象--当然,你也可能刚好需要这样的效果。注意:使用pin时,最好对该效应器也设置关键帧,否则稍后的fk/ik切换会影响到前面fk关节的动画效果。
ik模式手部的完全固定效果:
fk模式手部的完全固定效果(出现滑位):
*较早版本的maya是通过圆球和方块来表示pin的状态,而现在使用的是英文字母表示:t表示固定位移,r表示固定旋转。