人体关节层级关系
整个骨骼的搭建从身体脊椎的根关节开始。
脊椎根关节,是所有骨骼的根关节。
脊椎关节一直向上延伸,直到颈部关节的根关节,颈部关节继续向上延伸直到头部关节。颈部关节的根关节是整个头部关节的根关节。
最靠上的那节脊椎关节,与肩膀根关节相连,肩膀根关节是整条胳膊包括手臂的根关节。
胳膊关节与手腕根关节连接,手腕根关节是手的根关节(手腕关节只有一节),每根手指的根关节与手腕关节相连。
眼球关节、下颚关节和舌头关节 与头部关节相连,一般头部关节只有一节。
腿部根关节和脊椎根关节相连,最下面与脚部根关节相连。
具体的层级关系如下:
骨骼创建完成后在MAYA中的样子如下图:
脊椎关节的创建
脊椎关节以臀部为起点,延伸至颈部的下端。因为身体胸部以上的区域基本无法弯曲,因此这里的可以用一条长关节解决。如下图:
TIPS
创建关节,要从父级向子级创建,比如创建身体关节的时候,从根关节(下面)向末端关节(上面)进行创建。
脊椎和颈部关节采用单关节蒙皮方案,这样可以获得较好的默认蒙皮效果,并且可以让这些脊椎关节在位移时获得较好的效果。
所以分别在这些关节的旁边创建一个关节节点,然后将关节节点P给对应的关节,最后将这些关节节点的位移属性设置为0,让它们与脊椎关节节点重合,并将这些关节的显示缩放调大一点,方便后面选取。
眼睛关节创建
以眼睛模型的中心为起点创建关节,按住SHIFT键,向前方创建水平关节,延伸到眼睛前方一小段距离。
TIPS
按住SHIFT可以水平或垂直创建关节。
将眼睛关节的起点精确调整到眼球模型的中心点处。如果眼球的模型难以观察其中心点,可以自己创建一个和眼球大小近似的球体作为参照。
TIPS
按住ALT+方向键,可以以像素为单位精确移动所选对象。
创建完成后,将眼睛关节P给头部关节(具体参考上面的层级关系图表)。
手臂和腿部关节的创建
创建手臂和腿部关节的时候,应当先从根部直接到末端创建一个长关节,调整好关节的位置后,再使用关节插入工具,在手肘/膝盖的地方插入一个关节点。
这样可以确保手臂和腿的关节在同一个平面上,他们分别所处的平面是他们的旋转平面(就是胳膊肘和膝盖能转动的那个平面)。
手掌关节的创建
为了方便,手腕关节也可以用上面插入关节的方式创建,但因为手腕关节可以朝多个方向旋转,所以不是必须要和胳膊关节处于同一个平面。
手腕关节的末端大致在手掌的中心点处。
创建手指关节的时候,可以参考真实手指关节的长短和位置进行创建。需要注意的是,手指的根关节,要P给手腕关节的末端节点(而不是容易误以为的手腕关节),如下图所示:
如果将所选的关节P给另外一个关节的话,所选关节的起点节点会和父关节的起点节点连接,如果将所选关节P给另外一个关节的末端节点,那么所选关节的起点节点会和那个关节的末端节点连接。
这是因为,MAYA中,创建一个单独的关节,需要先在起点位置单击,再在末端位置单击,这使得看上去的一节关节其实是由两个关节构成的,起点处节点+延伸出去的部分,和末端节点。所以上面的操作中,所选关节在使用父对象命令后,成为了另外一个关节末端节点的子对象,并不是直接成为了(通常所说的)另外一个关节的子对象,两者的层级关系区别如下:
脚部关节的创建
脚部关节必须和腿部关节在同一个平面上。(推荐在上面创建腿部关节的时候,同时创建好脚部关节)
脚部的关节分为脚掌关节和脚趾关节,实际上脚趾关节的长度比脚趾的长度长一些,因为脚趾之后的一小块区域也是可以弯曲的(走路的时候比较明显)。
创建脚趾关节的时候,最需要注意的地方是脚尖,脚趾关节的末端一定不要贴着地面,或者刚好放在模型外边缘线上。而是要凸出来一点点,如下图:
翻转脚关节创建
翻转脚关节可以让走路和跑步动画的创建更加容易。其创建顺序(层级关系顺序)和脚部关节刚好相反。注意:翻转脚关节必须和脚部关节处于同一个平面。
第一步:在前视图中,确定第一个关节节点的位置
使用关节创建工具,在脚旁边点一下,然后使用点吸附,用鼠标中键调整节点位置,将节点吸附到脚趾末端节点上,如下图:
第二步:在侧视图中,调整第一个关节节点的位置
换到侧视图,用鼠标中键,调整节点位置,这里需要注意的是,和脚趾末端节点的位置一样,这个节点也应当突出模型边缘一段距离,并且不能直接贴到地面上(否则走路的时候会显得脚没有踩在地面上)。如下图:
第三步:切换到透视视图中,确定其他关节节点
在透视图中,使用点吸附,依次反向沿着脚部关节的节点创建,直到脚掌关节起点,如下图:
IK/FK控制器创建
IK/FK控制器的创建方法不用做更多介绍,主要解释层级问题:
除了腿和脚,其他位置都使用FK控制器。推荐使用 父子约束 创建控制器,而不是直接P给关节。
控制器NURBS线条创建后,应当删除它的历史,然后再进行下一步操作。
TIPS
按 “ATL+SHIFT+D” 快速删除所选对象的历史。
标准单个控制器的结构
控制器NURBS曲线本身,在拥有动画关键帧之前,应当保持所有属性均为默认(0或者1),而控制器的组在约束控制器到关节的时候具有了位移数值,控制器的内组也应当保持默认属性(方便后期设置属性驱动的关键帧动画)。
FK控制器的层级结构
已忽略 控制器的内组
最下面的腰部控制器应当设置为总控制器的子对象,而不是臀部控制器的子对象,这样当旋转臀部的时候腰就不会跟着转了,如下图:
眼睛控制器和嘴控制器最好将其移动出来,移动的时候,选择控制器的点,将移动工具的坐标切换为“对象”,然后就可以沿着关节轴的方向移动出来了,如下图:
创建手指FK控制器的时候,除了大拇指外,其他手指的根关节不需要创建控制器(因为那部分关节在真实世界中也是几乎不旋转的)。
所有手指的根控制器都要P给胳膊的末端关节节点,如下图:
创建IK控制器
腿部的IK控制器创建方式和之前昆虫的完全一样,使用 创建IK控制柄 工具,先选择腿部根关节起始节点然后在选择腿部关节末端节点。选中两个IK控制柄,将两个IK手柄P给翻转脚末端关节节点。
(可选)先解除IK控制器和IK控制柄的约束,然后将一侧的IK控制器的组(最好不要在内组设置,而在最外层组设置),它的X轴缩放设置为 -1 。可以实现,选中两侧IK控制器向一个方向拖动时,产生对称的效果(一个向左移动一个向右)。
创建两个定位器,将定位器吸附移动到腿部根关节的末端节点,然后向前移动一段距离,给他们创建IK控制器,删除这两个IK控制柄,选择IK控制器再加选腿部IK控制柄,创建极向量约束。
(可选)也可以像腿部IK控制器一样,给这两个极向量控制器也做对称处理,需要注意的事项完全相同。
翻转脚IK+FK绑定
暂时隐藏翻转脚关节,首先给脚掌关节和脚趾关节创建IK控制柄。 使用创建IK控制柄工具,先选择脚掌关节起始节点,再选择脚掌末端节点,重复工具,先选择脚掌末端节点,再选择脚趾末端节点。
显示翻转脚关节,将刚才创建的IK手柄,分别P给对应位置的翻转脚关节。如下图:
给三个翻转脚关节创建FK控制器,注意这里就和通常创建FK控制器的时候一样,不要给末端节点也创建控制器。根据骨骼的层级关系,依次将靠近末端的控制器的组P给靠近根部的控制器。编辑控制器的大小,并将陷入脚模型内部的控制器移动到外部。
最后,在腿部IK控制柄的位置创建两个没有约束关系的IK控制器,将翻转脚根关节的控制器的组P给这个IK控制器。
可以修改一下之前创建IK控制器的MEL代码来快速解决此问题,只需要删除代码中最后建立约束的那两行即可,修改后代码如下:
1 2 3 4 5 6 7 8 |
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`; } |
设定脚和手的驱动动画
手部驱动创建
选择手腕控制器,按CTRL+A切换到属性编辑器,使用属性编辑器面板菜单 属性 > 添加属性。
TIPS
CTRL+A可以快速切换出属性编辑器
需要设置 属性名称,属性最大值、最小值和默认值,其他保持默认即可。名称可以设置为 CloseHand,最大值10,最小值 -2,默认值 0,如下图:
确定后,将菜单列表调整为 动画,使用菜单 关键帧 > 受驱动关键帧 > 设定,打开设置窗口。选择 手腕控制器,点击“加载驱动者”,接着再重新选择手指所有FK控制器的内组(这里选择内组是因为内组上的位移旋转等数值均为0,方便调整),点击“加载受驱动项”。
现在可以先观察一下自己的手,先用力张开手指,再握拳,这里的驱动动画就是要实现 通过控制手腕控制器CloseHand属性的值来控制手的张开和握拳。
先在受驱动关键帧窗口中,选择手腕控制器,再选择右侧属性列表中的 CloseHand,将它的值调整为0(默认就是0),然后尝试旋转一下手指的控制器,看一下旋转属性在哪一个轴向上发生变化(本例中是在Z轴上产生变化),接着在受驱动关键帧窗口中,选择所有的手指,再选择右侧的 旋转Z 属性,确保此时这些控制器都在默认的状态(默认时其旋转属性应该都是0),点击 关键帧 按钮,可以发现 旋转Z 属性变红了,说明它已经有了关键帧动画。
接着这里要实现的是,当CloseHand属性为 -2 时,手张开,10 时,手握拳,因此,先将CloseHand的值调整为 -2 ,再调整所有手指的 旋转Z 属性,让手指呈现一个张开的状态,最后就和上面一样,在受驱动窗口中,选择CloseHand属性,再选择所有手指的旋转Z属性,点击关键帧。
最后将CloseHand的值设置为10,重复上面的步骤。完成后调整一下CloseHand的数值,测试一下看是否设置正确,没问题的话就可以关掉设置窗口了。
TIPS
在通道盒中,选中属性,在视图中按住鼠标中间左右拖动,可以调整属性的数值。.
脚部驱动创建
脚部驱动创建的方法和步骤与手部基本是一样的,这里简略说明:
在腿部的IK控制器上增加一个属性,名字可以叫 FootRoll,最大值10,最小值 -5,默认值0,驱动者就是这个IK控制器。
被驱动者是腿部的三个FK控制器的内组,如果之前没有创建他们的内组,可以选择一个控制器,直接CTRL+G打组,新的组会自动成为之前控制器组的子对象。
腿部要实现的动画效果如下:
(当数值为 -5 时,脚趾抬起,当数值为 10 时,脚后跟抬起,这主要是为了方便制作走路和跑步的动画)