【简介】
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 骨架则用来设置各种姿势,进行动画关键帧的制作。此时,原骨架作为输入骨骼来使用,不应再对它进