当前位置: > 3dmax模型制作 > Maya教程 >

Maya中的"装备"Rigging介绍 - 第6部分 - 腿
栏目分类:Maya教程   发布日期:2019年05月09日 08:59:21   浏览次数:


Maya中的"装备"Rigging介绍 - 第6部分 - 腿

Jahirul Amin带着我们在Maya中设置腿的动画

教程资产

单击此处下载本教程附带的资产

介绍

在本教程中,我们将开始为腿创建装备。这个过程与武器的过程非常相似。我们将确保动画师可以在FK和IK模式之间切换,并添加额外的关节以减少扭曲时的任何糖果包装效果。

腿链的创建将采用一种比你过去可能看到的稍微不那么传统的方法,但这是有原因的。通常,我会创建一个5关节链(臀部,膝盖,脚踝,球和脚趾),然后添加控件,IK手柄等以使事物移动。然而,我发现,当我向内和向外旋转脚踝(旋后和旋前)时,我需要使用多个轴来保持脚部植入地面。这是由于踝关节朝向球窝关节的方向。为了解决这个问题,我打算将腿部分成两条链(腿链和脚链),然后在脚踝处添加一个额外的关节,将定向于世界。然后脚踝链将成为这个额外关节的父级,额外的关节将成为腿链的末端,所以一切都正常。通过添加额外的关节而不是改变原始踝关节的方向,如果我们愿意,我们仍然可以使用关节的长度来创建有弹性的肢体,因为父关节仍将瞄准其子关节。

 

创建腿关节

在侧视图中,进入Skeleton> Joint Tool并创建一个从臀部区域到膝盖然后在脚踝处结束的3关节链。为膝盖添加轻微弯曲,因为这将使IK更容易计算腿部应如何弯曲。然后在前视图中,将根关节定位到左腿几何体中。现在,选择了根关节,进入Skeleton> Orient Joint Tool。将Primary Axis设置为Y,将Secondary Axis设置为X,将Secondary Axis World Orientation设置为X(+)。要使关节链正确地坐在腿上,请使用关节东方和平移Y(关节长度)属性的组合。将关节​​从根重命名为tip:l_upperLeg_jnt,l_lowerLeg_jnt和l_legEnd_jnt。

接下来,我们将添加将处理脚踝扭曲的关节。在侧视图中,使用关节工具在脚踝处创建单个关节。我按下键盘上的V键以激活Snap to Points,因此它恰好位于腿链的末端。通过增加“通道盒”中的“半径”使该单个关节变大,然后重命名关节l_ankleTwist_jnt。

 腿关节的破裂

腿关节的破裂

现在回到侧视图中,这样我们就可以创建脚的关节。再次,使用关节工具创建一个3关节链,从脚踝开始(再次按住V键以捕捉到相同的位置),然后是脚的球,最后是脚趾的末端。我把关节放在脚的球上非常接近地面,因为我发现在变形过程中我得到了更令人愉悦的结果。我也在创建链中的最终关节时按住Shift键,因为这将创建一个直的关节。将关节​​从根重命名为tip:l_ankle_jnt,l_ball_jnt和l_toeEnd_jnt。选择l_ankle_jnt后,转到Skeleton> Orient Joint Tool。应该事先设置设置,所以只需点击Apply即可。

现在l_ankleTwist_jnt下的父l_ankle_jnt。然后选择l_ankleTwist_jnt并使用“属性编辑器”(Attribute Editor)中的“关节定向”(Joint Orient)(使用Y通道)将关节链正确放置在脚中。最后,l_legEnd_jnt下的父l_ankleTwist_jnt。

 腿的最终层次结构

腿的最终层次结构

扭曲接头和低分辨率网格

要创建扭转关节,我们将再次使用Joint Splitter脚本。首先,选择l_upperLeg_jnt并按Ctrl + D复制它。隐藏原始关节链(Ctrl + H)并从新创建的链中删除以下关节:l_ankleTwist_jnt,l_ankle_jnt,l_ball_jnt和l_toeEnd_jnt。然后随机重命名其余的关节,这样当我们使用脚本时它们不会与我们原来的关节链发生冲突。

在脚本编辑器中,将Joint Splitter脚本加载到MEL选项卡中并执行它以显示GUI。从我们的复制关节链中选择根关节,然后单击Joint Splitter工具上的Select Start Joint。将Jnt数量设置为3并点击Split Joint。然后选择小腿关节并再次执行相同操作。我们现在想要摆脱不必要的关节。首先选择链的末端关节并将其删除。然后从关节链的末尾选择第三个关节并取消它的父项(Shift + P)。我们现在应该有2个独立的联合链。对于大腿关节链,选择结束关节并将其删除。然后选择关节链中的第二个关节,并按Shift + P取消它的父项。您应该只剩下一个关节,您可以选择和删除它。

 使用Joint Splitter工具完成该操作,拆分关节

使用Joint Splitter工具完成该操作,拆分关节

现在选择所有剩余的关节并按Shift + P使它们全部独立。从上到下重命名它们,如下所示:l_upperLegTwistA_jnt,l_upperLegTwistB_jnt,l_upperLegTwistC_jnt,l_lowerLegTwistA_jnt,l_lowerLegTwistB_jnt和l_lowerLegTwistC_jnt。现在选择大腿扭转关节并将它们放在l_upperLeg_jnt下。然后选择小腿扭转关节并将它们放在l_lowerLeg_jnt下。

接下来要做的是切割几何体并将相关网格物体放到相关的接头上。我这样做是通过复制主网格,删除所有不必要的多边形,然后使用网格>提取工具来分割网格。获得所有单个部分后,选择所有部分,然后转到编辑>按类型删除>历史记录。最后,将几何的相关部分表示为相关联合。请记住也要适当地重命名几何体。

 扭转接头在相关接头下方为父级

扭转接头在相关接头下方为父级

添加IK和FK关节并创建FK控件

选择l_upperLeg_jnt并按Ctrl + D复制它。在“大纲视图”(Outliner)中打开新创建的关节链的层次结构,并删除所有扭曲关节和骑行所带来的几何体。现在选择新链的根关节,然后转到“修改”>“搜索和替换名称”。弹出窗口时,在“搜索空间”中键入_jnt,在“替换为空格”中键入_FK_jnt。然后从l_upperLeg_FK_jnt的末尾取1。现在复制l_upperLeg_FK_jnt并使用“搜索和替换名称”工具将_FK_jnt重命名为_IK_jnt。

 复制原始腿链以创建FK和IK集

复制原始腿链以创建FK和IK集

暂时隐藏原始关节链和IK关节链,以便我们可以创建FK控件。打开脚本编辑器并将createControls.py脚本加载到Python选项卡中。选择l_upperLeg_FK_jnt,l_lowerLeg_FK_jnt,l_ankleTwist_FK_jnt,l_ball_FK_jnt,然后执行脚本。现在来纠正控制层次结构。l_ankleTwist_FK_ctrl下的第一个父亲l_ball_FK_ctrl_offset。然后在l_lowerLeg_FK_ctrl_offset下面显示父l_ankleTwist_FK_ctrl_offset。l_upperLeg_FK_ctrl下的下一个父l_lowerLeg_FK__ctrl_offset。最后,在hip_FK_ctrl下的父l_upperLeg_FK_ctrl_offset。如果需要,重塑控件以使其更容易选择。请记住通过按F8在组件模式下执行此操作。

 使用createControls.py脚本创建FK控件

使用createControls.py脚本创建FK控件

IK腿控制第1部分

现在隐藏FK关节链和控件,然后通过在“大纲视图”(Outliner)中选择它并按Shift + H来取消隐藏IK关节链。现在让我们添加将驱动腿部和脚部的IK控制柄。Go Skeleton> IK Handle Tool(选项)并将Current solver设置为Rotate-Plane Solver。然后在“大纲视图”(Outliner)中,单击l_upperLeg_IK_jnt,然后单击l_legEnd_IK_jnt。将新创建的IK控制柄重命名为l_leg_IK。现在转到Skeleton> IK Handle Tool(选项)并将Current solver设置为Single-Chain Solver。然后在“大纲视图”中,首先单击l_ankleTwist_IK_jnt,然后单击l_ball_IK_jnt。在视频中,我首先在l_ankle_IK_jnt和l_ball_IK_jnt之间创建IK控制柄,但稍后会更正此问题。将此IK控制柄重命名为l_ball_IK。然后在l_ball_IK_jnt和l_toeEnd_IK_jnt之间创建另一个单链IK,将其重命名为l_toe_IK。

要为IK支腿创建控件,请选择l_arm_IK_ctrl_offset并将其复制(Ctrl + D)。然后通过按Shift + P取消父级。使用“搜索和替换名称”工具搜索_arm并使用_leg替换。还要删除偏移节点末尾的1。要正确定位控件,请在l_leg_IK下设置父l_leg_IK_ctrl_offset,然后将通道盒中的转换值清零。一旦到位,仍然选择l_leg_IK_ctrl_offset,按住Shift + P从l_leg_IK取消父级。现在将l_leg_IK_ctrl下的所有三个IK控制柄设为父级。最后,选择l_leg_IK_ctrl后,在Channel Box中,转到Edit> Edit Attribute并将elbowTwist重命名为kneeTwist,将armTwist重命名为legTwist。

 IK支腿控制到位,IK控制柄位于下方

IK支腿控制到位,IK控制柄位于下方


IK腿控制第2部分

现在我们需要添加额外的IK腿链以允许小腿的扭曲,就像我们对IK手臂所做的那样。首先选择l_upperLeg_IK_jnt并按Ctrl + D复制它。选择复制的关节链的根关节,然后转到“修改”>“搜索和替换名称”。将搜索设置为_IK并将替换为Drive_IK。再次移除根关节末端的1。

现在将原始IK关节链约束到驱动程序集。首先,按此顺序选择l_upperLegDrive_IK_jnt,l_upperLeg_IK_jnt并进入Constrain> Orient(选项)。确保将Constraint轴设置为All并单击Apply。现在,按此顺序选择l_lowerLegDrive_IK_jnt,l_lowerLeg_IK_jnt并进入Constrain> Orient(选项)。这次,将Constraint轴设置为仅X和Z. 然后按此顺序选择l_ankleTwistDrive_IK_jnt,l_ankleTwist_IK_jnt并转到Constrain> Orient(选项)。重新打开全部约束轴并点击应用。最后,按此顺序选择l_ballDrive_IK_jnt,l_ball_IK_jnt并转到Constrain> Orient,保持设置相同。

现在,为每条腿选择小腿关节,并一次选择一个,在“属性编辑器”中将“旋转顺序”设置为YZX。

 将原始IK腿链约束到一组驱动器关节,并确保不约束小腿上的旋转Y属性

将原始IK腿链约束到一组驱动器关节,并确保不约束小腿上的旋转Y属性

FK IK切换

现在我们将创建约束以使用FK或IK腿链驱动主腿链。按此顺序选择l_upperLeg_FK_jnt,l_upperLeg_IK_jnt,l_upperLeg_jnt并转到Constrain> Orient(选项)。确保将Constrain轴设置为All并单击Apply。然后按此顺序选择l_lowerLeg_FK_jnt,l_ lowerLeg _IK_jnt,l_ lowerLeg _jnt并转到Constrain> Orient。按此顺序,选择l_ankleTwist_FK_jnt,l_ankleTwist_IK_jnt,l_ankleTwist_jnt,然后再次应用orient约束。最后,按此顺序选择l_ball_FK_jnt,l_ball_IK_jnt,l_ball_jnt和GO Constrain> Orient。

现在原始的腿链遵循FK和IK关节,让我们使用SDK在两种模式之间进行。选择我们刚创建的4个orientConstraint节点(您将在l_upperLeg_jnt,l_lowerLeg_jnt,l_ankleTwist_jnt和l_ball_jnt下找到它们)并转到Animate> Set Driven Key> Set。这应该将约束节点加载到Driven窗口中。现在选择fkIkSwitch_ctrl并点击Load Driver。在fkIkSwitch上将L Leg属性设置为0(FK模式)。然后在SDK窗口的Driven部分中选择l_upperLeg_jnt_OrientConstraint1节点。在“通道盒”中,将L上腿FK Jnt W0设置为1,将L上腿IK Jnt W1设置为0.对其余3个约束节点执行相同操作。将所有FK W0设置为1并将IK W1节点设置为0后,在SDK工具的右上角窗口中突出显示L Leg,并在SDK工具的左下角窗口中突出显示权重属性。然后,在SDK窗口中单击Key。现在,只需在fkIkSwitch_ctrl上将L Leg属性设置为1,在所有约束节点上将所有W0设置为0并将W1设置为1并再次按下Key。

 使用Set Driven Key工具设置FK IK切换

使用Set Driven Key工具设置FK IK切换

将腿固定在臀部

我没有直接在髋关节下养育腿链,而是希望将它们分开。这样,如果我需要重新设计钻机的任何部分,我可以这样做,而不会打扰其他地区。因此,我们将坚持使用约束将所有内容组合在一起。按此顺序选择,l_upperLeg_FK_jnt,l_upperLeg_IK_jnt,l_upperLeg_jnt并转到Constrain> Point。现在选择新创建的pointConstraint节点(这将存在于l_upperLeg_jnt下)并转到Animate> Set Driven Key> Set以加载到SDK工具的Driven部分。选择fkIkSwitch_ctrl并单击Load Driver。在pointConstraint节点上将fkIkSwitch_ctrl上的L Leg属性设置为0(FK模式),将L上腿FK jnt W0设置为1并将L上腿IK jnt W0设置为0。在SDK工具中,在右上方窗口中突出显示L _Leg,在右下方窗口中突出显示两个权重属性。然后点击SDK工具上的Key。然后将fkIkStwitch_ctrl上的L Leg属性的值设置为1,并反转pointConstraint节点上的权重值。再次在SDK工具上点击密钥。

 使用Set Driven Key工具控制pointConstraint节点

使用Set Driven Key工具控制pointConstraint节点

现在,按此顺序选择l_upperLegDrive_IK_jnt,l_upperLeg_IK_jnt并转到Constrain> Point。我们现在需要一个控件,用于将IK腿连接到臀部。选择l_elbow_ctrl_offset,按Ctrl + D复制它,然后按Shift + P从其当前位置取消父级。使用“搜索和替换名称”工具将_elbow重命名为_hip_IK。选择l_hip_IK_ctrl_offset并将其作为l_upperLeg_IK_jnt下的父项。将l_hip_IK_ctrl_offset的转换和旋转值归零并旋转,然后取消它的父项(Shift + P)。在组件模式(F8)中,编辑其形状和位置以使其更容易选择。现在,按此顺序,选择l_hip_IK_ctrl,l_upperLegDrive_IK_jnt并转到Constrain> Point。然后,只需选择l_hip_IK_ctrl_offset并在hip_FK_ctrl下将其设为父级。如果您愿意,可以隐藏l_hip_IK_ctrl。

让我们接下来关注FK腿。按此顺序选择,l_upperLeg_FK_ctrl,l_upperLeg_FK_jnt并进入Constrain> Point。任务完成。

 添加了l_hip_IK_ctrl; 用于将IK腿连接到臀部控制器

添加了l_hip_IK_ctrl; 用于将IK腿连接到臀部控制器

添加扭曲接头

为了创造腿部扭曲,我们将创建与手臂相同的表达方式。通过转到Windows>动画编辑器打开表达式编辑器并创建以下表达式:

l_upperLegTwistA_jnt.rotateY = l_lowerLeg_jnt.rotateY * .25; 
l_upperLegTwistB_jnt.rotateY = l_lowerLeg_jnt.rotateY *。5; 
l_upperLegTwistC_jnt.rotateY = l_lowerLeg_jnt.rotateY * .75; 

l_lowerLegTwistA_jnt.rotateY = l_ankleTwist_jnt.rotateY * .25 * -1; 
l_lowerLegTwistB_jnt.rotateY = l_ankleTwist_jnt.rotateY *。5 * -1; 
l_lowerLegTwistC_jnt.rotateY = l_ankleTwist_jnt.rotateY * .75 * -1;

单击“创建”,然后重命名表达式l_legTwist_expr。* -1将确保小腿的扭曲不会朝错误的方向行进。选择l_lowerLeg_FK_ctrl并将旋转顺序设置为YZX,以减少任何有趣的业务,因为我们扭曲了小腿。现在让我们将膝盖扭曲为IK控件。打开连接编辑器(窗口>常规编辑器>连接编辑器)并将l_leg_IK_ctrl加载到左侧。现在将l_lowerLeg_IK_jnt加载到右侧并将kneeTwist(左侧)连接到rotateY(右侧)。

 使用表达式编辑器驱动腿部扭曲关节

使用表达式编辑器驱动腿部扭曲关节

清理腿部装备

现在有点做家务。选择腿的所有关节链和l_leg_IK_ctrl_offset。按Ctrl + G将它们组合在一起,然后将该组重命名为l_leg_rig_grp。打开l_leg_rig_grp,选择那里的所有关节链,然后按Ctrl + G对它们进行分组。重命名该组l_leg_jnt_grp。最后要做的是使用Drawing Overrides对控件进行颜色编码。您现在需要做的就是将关节镜像并为右侧创建装备。
 

 两条腿到位并且轮廓仪清理干净

两条腿到位并且轮廓仪清理干净

     
游戏模型设计 3dmax模型制作 次世代模型 游戏模型百科 游戏模型贴图