这个教程的前置教程:
FK和IK的区别
FK是正向运动,通常通过旋转骨骼来进行运动。而IK是反向运动,通过控制骨骼端点的位置影响其他关节运动。
可以形象的理解为:FK就像芭比娃娃的运动方式,IK就像提线木偶的运动方式。
很多时候,FK和IK是共同使用来创建动画的。
第一步:创建角色总控制器
先创建一个NURBS圆形,菜单 创建>NURBS基本体>圆形。
缩放圆形,让圆形比角色的顶视图稍大,使用菜单 修改>冻结变换。(这里也可以用另外一种方法,就是通过缩放圆形的点调整大小,这样调整大小后无需执行这一步)
为这个圆形命名,名称为“角色名_Con”,意思是角色控制器。
完成后按“ALT+SHFTT+D”,删除圆形的历史。对应菜单 编辑>按类型删除>删除历史。如下图:
选中圆形,按“CTRL+G”给圆形打组,将组命名为“角色名_ConGrp”。
第二步:创建角色身体控制器
身体控制器可以控制整个身体的位移和旋转,因此身体控制器应当放在整个骨骼的根关节处。(在本例中就是创建的第一个关节节点)
创建一个定位器(在工具架的“装备”选项卡下,左边第一个按钮)。
选选择根关节,然后再选择定位器,使用菜单 约束>父对象 的控制面板,取消勾选“保持偏移”,然后点击“添加”。
此时可以发现,定位器吸附在了根关节上,这就是这个操作想达到的效果。
现在不需要这个父子约束了,所以在“大纲视图”下,展开定位器的层级,删除下面的“parentConstraint”节点。
还有另外一种操作方法是:创建定位器后,按住“V”键,将定位器移动到根关节的点上面,再冻结变换即可(按V是启用了“捕捉到点”功能)。
TIPS
约束>父对象 和 编辑>父对象 是有区别的。
编辑>父对象 是将两个物体的层级变成父子关系,在大纲视图中子物体会跑到父物体下面。而 约束>父对象 则是在两个物体之间建立父子关系,但不改变他们大纲层级关系。
除此之外,编辑>父对象 工具,后选择的物体会成为父对象,而 约束>父对象 工具,先选择的物体会成为父对象。
为定位器重命名为 “角色名_Loc”,再将定位器缩放到合适的大小。
注意:这里一定不能在变换节点上缩放,必须要在形状节点上缩放,在整个绑定过程中,所有控制器的缩放都是如此。
将根关节P给定位器,因为定位器真正的目的是要用来操控根关节,因此让定位器成为根关节的父对象。给定位器打组,命名为 “角色名_BoneGrp”。
有了定位器后,开始创建身体控制器。
第一步#创建控制器样条线
先创建一个立方体(最好关闭“交互式创建”,取消菜单 创建>多边形基本体>交互式创建 的勾即可),然后使用菜单 创建>曲线工具>CV曲线工具 的设置面板,重置工具后,设置“曲线次数”为“1线性”。
按“4”键进入线框显示,按住“V”键,用鼠标左键拖动,直到吸附到立方体的一个顶点上,然后依次连接立方体的其他顶点,创建一个由曲线构成的立方体,如面的演示:
TIPS
创建立方体的时候,点和点之间可以重叠,但不能缺少某条边。
创建完成后,通过缩放立方体的点来调整它的大小(按住右键,选择“编辑顶点”),删除作为模板的多边形立方体。为控制器打组,并为组和控制器都命名一下,分别为“角色名_LocConGrp”和“角色名_LocCon”。
第二步#创建身体控制器约束
先选择定位器,然后再选择身体控制器的组,使用菜单 约束>父对象(注意需要取消工具的“保持偏移”选项)。删除大纲视图里身体控制器层级下的约束节点。
先选择身体控制器,再选择定位器,使用菜单 约束>父对象(注意需要勾选“保持偏移”),即可完成。
在本例中,可以发现身体控制器现在不是水平的,并且其变换节点上有了数值,这样并不是很好,所以可以用另外一种方式:
先选择身体控制器,然后按住“V”键,移动身体控制器,让身体控制器的中心点吸附在定位器的中心点上面,再使用菜单 修改>冻结变换,最后用约束>父对象,将定位器变成身体控制器的子对象即可(注意此时一定要勾选“保持偏移”)。
创建完成的结果如图:
第三步#身体控制器和总控制器建立联系
先在大纲视图中选择身体控制器的组,然后再选择总控制器(不要选择 总控制器的组),按“P”键(要勾选“保持偏移”),完成。
测试一下,移动总控制器,所有东西都跟着一起动,移动身体控制器,所有身体部位跟着一起动,但总控制器不会一起动。
为了方便识别和美观,可以编辑一下身体控制器的形状(只能编辑顶点)和颜色,让它稍微贴合一下身体的形状,如下图:
TIPS
选择控制器,然后按“F8”,就可以非常容易的 框选控制器上的点了,对于任何NURBS对象,都可以按“F8”来排除框选点的时候其他东西的干扰。
更改颜色的一种方式是,在控制器的形状节点上,启用“绘制覆盖”,如下图:
第三步:创建头部FK控制器
这里头部需要使用FK控制器,并且头部控制器应该是身体控制器的子对象。
在侧视图中创建一个NURBS圆形。
TIPS
如果在透视图中创建,默认情况下,创建出来的圆形是平行于XZ平面的,此时进行后面的约束操作会发现圆形移动到头部关节后的方向不是希望的那样。
给这个圆形打组,并对圆形和组都重命名,命名的规则同上。
先选择头部关节(本例中头部只有一个关节),再选择头部控制器的组,使用 约束>父对象(取消“保持偏移”),此时可以发现头部控制器已经自动移动到了头部关节位置,如下图:
删除头部控制器的约束节点。
先选择头部控制器,再选择头部关节,使用 约束>父对象 (勾选“保持偏移”),先选择头部控制器的组,再选择身体控制器,按“P”(勾选“保持偏移”)。
最后调整一下头部控制器的形状、大小和颜色即可,结果如下图:
第四步:利用MEL程序创建触须和尾部的FK控制器
MEL是Maya Embedded Language(Maya内置语言)的缩写,在MAYA界面的右下角点击,即可打开脚本编辑器窗口。
将下面的代码粘贴到脚本编辑器中(注意是在MEL选项卡而不是Python)。
这些代码所做的,和上面创建身体控制器所做的步骤是一样的,先创建一个NURBS物体,打组,然后用父对象约束,定位到关节合适的位置,再删除约束,将关节作为NURBS物体的子对象进行又一次约束,最后重命名NURBS和它的组。
1 2 3 4 5 6 7 8 9 10 11 |
string $sel[]=`ls -sl`; for($i=0;$i<size($sel);$i++){ circle -ch 0 -o on -nr 1 0 0 -r 0.2 -n ($sel[$i]+"Con") ; group -n ($sel[$i]+"ConGrp") ; select -r ($sel[$i]); select -add ($sel[$i]+"ConGrp"); delete `parentConstraint`; select -r ($sel[$i]+"Con") ; select -add ($sel[$i]); parentConstraint; } |
选择每一个触须关节和尾部关节(包括其根关节和其他关节),注意不要选择位于末端的关节节点,那里不需要任何控制器,如下图:
在脚本编辑器中,点击,或者选中要运行的代码(本例中应该全选),点击
。结果如下图:
可以发现创建的控制器大小并不合适,可以一个个编辑他们的大小到合适状态。也可以分两次运行MEL程序,每次创建前修改程序创建的圆半径即可,下图红线标示的数字就是圆的半径,现在将之前的0.2改为0.3:
TIPS
有的时候会出现一种情况,就是明明选择了所有需要的关节,但执行完程序以后发现一些关节上并没有出现圆形控制器,这种问题为何出现我也不懂,但实际上是因为BUG导致部分圆形的半径几乎为0,此时可以在大纲视图中挨个点选各个控制器的组,找出那些失踪的圆形,将他们变换节点的缩放属性全部从1更改为2,然后冻结变换,这样他们就都被找回来了。
调整好以后,和 “第三步#身体控制器和总控制器建立联系” 一样,为这些控制器设置好正确的层级关系,如下图:
TIPS
在FK中,控制父级关节时,子关节肯定要跟着动,而控制子关节时父关节应当不动。因此,需要将子控制器的组设置为父控制器的子对象(将子控制器的组P给父控制器)。
尾部的控制器是一样的原理,因此再不做赘述。
FK控制器到此创建结束,结果如下:
第五步:创建腿部IK控制器
第一步#给腿部建立IK控制柄
在工具架的装备选项卡中,双击,先重置工具,然后将 “当前解算器” 更改为 “旋转平面解算器”。
点击腿部关节的根关节节点,再点击这条腿的末端关节节点,可以发现一条直线出现在两个节点之间,并且在末端出现了一个IK控制柄(ikHandle)。
按“G”键,重复使用工具,再对另一条腿做同样的事。以此对所有的腿进行设置,结果如下图:
上图中,白色的像小翅膀一样的东西是IK旋转平面的一个指示标志,不用管它就好。
然后在脚本编辑器中,点击加号,新建一个选项卡,选择 MEL。将下面的代码粘贴到新选项卡中:
1 2 3 4 5 6 7 8 9 10 11 |
string $sel[]=`ls -sl`; for($i=0;$i<size($sel);$i++){ curve -d 1 -p -0.5 0.5 0.5 -p -0.5 0.5 -0.5 -p -0.5 -0.5 -0.5 -p -0.5 -0.5 0.5 -p -0.5 0.5 0.5 -p 0.5 0.5 0.5 -p 0.5 -0.5 0.5 -p -0.5 -0.5 0.5 -p -0.5 -0.5 -0.5 -p 0.5 -0.5 -0.5 -p 0.5 -0.5 0.5 -p 0.5 0.5 0.5 -p 0.5 0.5 -0.5 -p 0.5 -0.5 -0.5 -p -0.5 -0.5 -0.5 -p -0.5 0.5 -0.5 -p 0.5 0.5 -0.5 -p 0.5 0.5 0.5 -p -0.5 0.5 0.5 -p -0.5 0.5 -0.5 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -n ($sel[$i]+"Con"); group -n ($sel[$i]+"ConGrp"); select -r ($sel[$i]); select -add ($sel[$i]+"ConGrp"); delete`parentConstraint`; select -r ($sel[$i]+"Con"); select -add ($sel[$i]); parentConstraint; } |
选中所有IK控制柄,然后执行程序,再选中所有创建出来的立方体缩放到合适的大小,最后冻结变换。
第二步#建立腿部IK极向量控制器
首先创建一个定位器,隐藏模型(保留骨骼可见),按住“V”,将定位器移动吸附到倒数第二个关节节点上,按“Ctrl+D”复制一个定位器,移动到另一条腿的这个位置,以此对所有的腿都做这件事。结果如下图:
选择刚才创建的所有的定位器,向上移动一小段合适的距离,再次执行刚才的MEL程序,删除所有定位器(定位器主要是用来给极向量控制器定位置的,选择控制器的立方体已经建好了,所以就可以删除这些定位器)。
TIPS
向上移动定位器的时候,确保是使用世界坐标进行移动的。
在同一条腿上,先选择 极向量控制器,再选择 腿部IK控制柄,使用菜单 约束>极向量,依次为所有的腿都使用这个操作,结果如下图:
选择所有 IK控制柄,在右侧面板中的 通道盒/层编辑器 中,将可见性设置为0(或者off),隐藏所有的IK控制柄。
第三步:建立腿部控制器和总控制器的联系
选择所有腿部控制器的组(包括IK控制器和极向量控制器 的组),将这些组打组,重命名为“角色名_LegConGrp”,选择这个新的组,再选择总控制器,按“P”。
修改一下这些控制器的颜色。移动身体控制器和总控制器,看看效果。
第六步:创建触角IK样条线控制器
使用菜单 骨架>创建IK样条线控制柄 的设置面板,重置工具,取消勾选,并将 “跨度数” 设置为 3
TIPS
自动将曲线结成父子关系 选中的话,会将样条线变成根关节的子对象。跨度数 控制着样条线的CV点数量(3+“设置数”个)。
和之前创建腿部IK控制柄一样,先点一下触角的根关节节点,然后再点一下触角的末端关节节点,对另外一个触角也进行此操作。此时在末端会出现IK样条线控制柄。
给IK样条线控制柄和2条曲线打组,命名为“角色名_NoMove”(意思是无法移动)。
选择两条曲线,按“CTRL+1” 孤立显示(再次按这个组合键可以退出孤立),按F8 ,按下图右侧橙色圆圈的范围选择点,再使用菜单 变形>簇。
以此选择橙色圆圈中的点,然后创建“簇”,结果如图:
选择一个簇,执行前面使用过的IK控制器创建程序,依次对所有簇做这件事。这里没有一次选择所有的簇再用程序,是因为会出BUG。
将控制器调整为合适的大小。将刚才创建的所有控制器的组,打组,命名为“角色名_ChuJiaoConGrp”。然后将这个组P给头部控制器(成为头部控制器的子对象)。
选择所有的簇,曲线 和 IK样条线控制柄,在右侧面板中,设置可见性为隐藏。
到此为止,这只虫子的绑定已经完成啦,在另外一篇文章中,将会说明一下如何进行扫尾工作(对场景的整理和测试等)。
成品看上去是这样的: