IK 解算器

 
 
 

IK 解算器是 IK 控制柄后面的数学算法。IK 解算器计算由 IK 控制柄控制的一个关节链中所有关节的旋转。IK 控制柄对关节链的效果,取决于 IK 控制柄所使用的 IK 解算器类型。默认情况下,Maya 在启动时加载下列 IK 解算器:

除了默认解算器,还可以创建下列解算器:

如果要对拥有两和四关节之间的关节链设定姿势和设置动画,应使用单链或旋转平面 IK。如果要对更长的关节链设定姿势和设置动画,应使用 IK 样条线。如果要对游戏所使用的简单三关节 IK 链设定姿势和设置动画,应使用双骨骼 IK。

默认情况下,所创建的每个 IK 控制柄都可以使用相同类型的 IK 解算器,并且还可以共享相同的 IK 解算器节点。例如,所有 IK 控制柄还可以使用单链 IK 连接到同一 ikSCsolver 节点。因此,如果编辑共享 IK 解算器节点的属性,则连接到节点的所有 IK 控制柄都会受到影响。如果要微调仅针对某个 IK 控制柄的 IK 解算器,同时不要影响到其他 IK 控制柄,可以使用 createNode MEL 命令为 IK 控制柄创建其他 IK 解算器。

IK 解算器计算

移动 IK 控制柄时,解算器执行适当的计算以便在其 IK 链中相应移动和旋转所有关节。首先,解算器查找 IK 控制柄的位置(“平移 X”(Translate X)“平移 Y”(Translate Y)“平移 Z”(Translate Z)属性)和方向(“旋转 X”(Rotate X)“旋转 Y”(Rotate Y)“旋转 Z”(Rotate Z)属性)。其次,解算器计算如何将末端效应器的位置和方向尽可能地向靠近 IK 控制柄的位置和方向移动。若要执行该操作,解算器计算如何最好地在 IK 控制柄的关节链中旋转关节。最后,解算器旋转关节链中的所有关节,使末端效应器到达 IK 控制柄的位置和方向。

单链解算器

单链 IK 控制柄使用单链解算器来计算 IK 链中所有关节的旋转。另外,可以使用单链解算器直接计算关节链的整个方向。

单链 IK 控制柄和旋转平面 IK 控制柄之间的区别

单链 IK 控制柄和旋转平面 IK 控制柄之间的区别在于,单链 IK 控制柄的末端效应器尝试到达其 IK 控制柄的位置和方向,而旋转旋转平面 IK 控制柄的末端效应器仅尝试到达其 IK 控制柄的位置。由于旋转平面 IK 控制柄的末端效应器仅尝试到达其控制柄的位置,因此产生的关节旋转更具有可预测性。对于旋转平面 IK 控制柄,其整个关节链的方向受扭曲圆盘操纵器控制。有关详细信息,请参见扭曲圆盘旋转平面解算器

注意

如果关节链翻转,请使用旋转平面解算器,而不是单链解算器。旋转平面解算器引入极向量来控制 IK 链的翻转,有时会结合单链解算器使用。

单链 IK 控制柄组件

请参见常规 IK 控制柄组件

旋转平面解算器

旋转平面 IK 控制柄使用旋转平面解算器来计算其 IK 链中所有关节的旋转,但不会计算关节链的整体方向。相反,旋转平面 IK 控制柄可以通过极向量和扭曲圆盘直接控制关节链的方向,而不是通过 IK 解算器计算方向。单链解算器和旋转平面解算器之间的区别就在于此。请参见单链 IK 控制柄和旋转平面 IK 控制柄之间的区别

旋转平面解算器非常适用于对要保持在同一平面上的关节链设定姿势(例如手臂和腿)。例如,由旋转平面 IK 控制柄驱动的手臂的肩部、肘部和腕部关节都保持在与肘部旋转相同的平面内。该平面本身可以通过极向量从肩部关节进行旋转。请参见极向量扭曲圆盘

旋转平面 IK 控制柄组件

扭曲圆盘

扭曲圆盘是一种操纵器,可以用来扭曲或旋转关节链。扭曲圆盘位于 IK 链的末关节处。

平移极向量通常会使 IK 链指向错误方向。在移动极向量以防止翻转后,可以使用扭曲盘来重新定向平面。若要查看扭曲圆盘的图像,请参见旋转平面解算器

关节链平面

关节链平面是一个平面,它包含了关节链中所有关节并通过轴来设定姿势。关节链平面围绕控制柄向量旋转。操纵极向量时,关节链平面将围绕控制柄向量旋转。若要查看关节链平面的图像的详细信息,请参见旋转平面解算器

参照平面

要使关节链平面旋转和扭曲关节链,必须相对于某些其他平面旋转平面以便测量扭曲的角度。关节链平面进行相对旋转的平面是参照平面。若要查看参照平面的图像,请参见旋转平面解算器

极向量

极向量是一种操纵器,用于更改 IK 链的方向。此外,极向量还用于控制翻转

由于移动极向量可以更改参照平面的方向,因此移动极向量还可以直接更改关节链的方向,正如操纵扭曲盘可以更改关节链的方向一样。这是因为已将关节链的方向或扭曲角度,定义为参照平面和关节链平面之间方向的差异。若要查看极向量的图像,请参见旋转平面解算器

警告

定位 IK 控制柄时,如果控制柄向量和极向量互相交叉或指向完全相反的方向,则关节链可能突然翻转。可以通过移动极向量避免此翻转,以使控制柄向量不与之相交或指向其相反方向。

旋转圆盘

旋转圆盘是一种指示器,用于显示扭曲盘旋转 IK 链的程度。旋转圆盘位于 IK 链的始关节处。若要查看旋转圆盘的图像,请参见旋转平面解算器

参照平面指示器

参照平面指示器是旋转盘上的绿色点,可以通过移动来反映极向量的移动。

扭曲指示器

扭曲指示器是参照平面指示器和旋转盘上的关节链平面指示器之间的绿色曲线。扭曲指示器可显示关节链相对于参照平面的方向。

关节链平面指示器

关节链平面指示器可显示关节链平面相对于参照平面的方向。关节链平面指示器出现在旋转圆盘中。

样条线 IK 解算器

IK 样条线控制柄可以使用 NURBS 曲线来对关节链设定姿势。操纵曲线时,控制柄的样条线 IK 解算器会相应地旋转关节链中的关节。可以使用 IK 样条线来对诸如尾巴、触角或蛇等长而弯曲的关节链设定姿势及设置动画。

请参见使用样条线 IK 控制柄的提示

IK 样条线控制柄组件

扭曲圆盘

请参见扭曲圆盘

滚动圆盘

滚动圆盘是一种操纵器,用于滚动或旋转整个 IK 样条线关节链。滚动圆盘总是在 IK 样条线控制柄的起始关节处。滚动圆盘类似于旋转圆盘和极向量。请参见常规 IK 控制柄组件

高级 IK 样条线控件

使用 IK 样条线扭曲控件属性,可以将链中关节的局部旋转约束到固定世界空间向量。此向量是 IK NURBS 样条曲线的方向。例如,可以使用高级样条线 IK 扭曲控件来固定蛇的角色、两足动物角色的脊椎或螺旋弹簧的运动。此外,要沿着链微调扭曲,可以向带有“扭曲值”属性的关节添加其他扭曲。

在应用其他扭曲之前,通过将关节上方向轴与固定世界空间向量对齐,可以获得比以前更理想、更稳定的结果。

请参见使用高级样条线 IK 扭曲控件添加高级扭曲控件属性

注意

只有当 IK 控制柄使用 ikSplineSolver 时,“高级扭曲控件”属性才相关。

带有 IK 样条的 IK 控制柄可以使用 NURBS 曲线对关节链设定姿势。操纵 IK 样条曲线时,可以移动和旋转 IK 链中的所有关节。操纵 NURBS 样条曲线的简单方法是为每个曲线 CV 创建簇变形器。请参见编辑曲线 > 选择 > 簇曲线(Edit Curves > Selection > Cluster Curve)(位于手册中的“建模 NURBS”部分)

IK 样条线控制柄非常适用于对拥有长关节链的对象设定姿势或设置动画,例如尾巴、触角、脖子、脊椎和相似物体。

起始关节翻转

在移动或旋转 IK 样条曲线或其 CV 时,或者沿其曲线滑动关节链时,有时可能会翻转 IK 样条线关节链的起始关节。翻转是样条线 IK 解算器计算的正常结果。

当关节方向从其旋转值 0 超过 90 度,便会发生关节翻转。如果关节的“旋转 X”(Rotate X)值、“旋转 Y”(Rotate Y)值和“旋转 Z”(Rotate Z)值相对于其父关节的旋转值为 0,则其旋转值为 0。当关节旋转接近 180 度时,翻转最为显著。

在起始关节大致接近其静止位置之后,可以通过移动每个关节来防止起始关节翻转。请参见防止在样条线 IK 链中翻转

当沿其曲线设置关节链动画时,也可能会发生多余的起始关节翻转,例如当蛇沿运动路径滑动时。

如果已正确定位关节且仍发生关节翻转,则应将起始关节附加到其他关节或变换节点。请参见自动创建根轴自动将曲线结成父子关系

双骨骼解算器

双骨骼 IK 解算器是旋转平面 IK 解算器的一个子集。因此,带有双骨骼 IK 解算器的 IK 控制柄使用与旋转平面 IK 控制柄相同的方式来解算其关节链的旋转。请参见旋转平面解算器旋转平面 IK 控制柄组件

双骨骼 IK 控制柄非常适用于对包含三关节(双骨骼)的短关节链设定姿态和设置动画。如果尝试对拥有双骨骼 IK 控制柄的关节链设定姿势和设置动画,则双骨骼解算器将只解算起始关节和倒数第二个关节的旋转,并将忽略关节链中的所有其他关节。

双骨骼解算器非常适用于对要保持在同一平面上的关节链设定姿势(例如手臂和腿)。例如,由旋转平面 IK 控制柄驱动的手臂的肩部、肘部和腕部关节都保持在与肘部旋转相同的平面内。该平面本身可以通过极向量从肩部关节进行旋转。请参见极向量

双骨骼解算器是 Maya 中最快的 IK 解算器。这使得双骨骼 IK 控制柄非常适合于在游戏开发环境中设置角色。Maya 包含双骨骼 IK 解算器插件的源代码,使得游戏开发商能在游戏引擎中复制此功能的精确行为,或修改代码以创建自己的自定义 IK 解算器。

IK 双骨骼解算器插件源代码

在 devkit 的 ik2Bsolver 目录中提供了双骨骼 IK 解算器的源代码。源代码提供了如何创建自己的 IK 解算器插件的示例。此外,通过提取核心算法,可以在游戏引擎中复制双骨骼 IK 解算器的精确行为。有关详细信息,请阅读 ik2Bsolver 目录中的自述文件。

多链解算器

多链解算器可以同时解算多个 IK 控制柄。可以使用多链 IK 控制柄来制作复杂运动的动画,例如章鱼角色的触角运动。

带有多链解算器的 IK 控制柄按照与单链 IK 控制柄相同的方式来管理其关节链中的关节。请参见单链解算器

注意

IK 控制柄的“优先级”(Priority)“权重”(Weight)属性仅应用于多链 IK 解算器。请参见帮助 > 节点和属性参考(Help > Node and Attribute Reference)中的 ikMCsolver

弹簧 IK 解算器

弹簧 IK 解算器 (ikSpringSolver) 对所有关节均产生比例旋转。这在对拥有许多关节的肢体(如昆虫的腿)设定姿势和设置动画时非常有用。

请观看:springIKinsect.mov

弹簧 IK 解算器通过对关节之间的角度应用偏差值,来保持这些角度与关节链成比例。这样可以确保所有关节之间的角度始终均匀分布。弹簧 IK 解算器类似于旋转平面 IK 解算器,因为它们的 IK 控制柄都拥有极向量。由于弹簧 IK 控制柄拥有极向量,因此如果弹簧 IK 关节链穿过其极向量将会发生翻转。

使用弹簧 IK 解算器的 IK 控制柄需要静止姿势。默认情况下,在创建弹簧 IK 控制柄时目标关节链的位置和方向都为静止姿势。静止姿势的弹簧 IK 关节链的第一和最后关节之间的距离,确定了关节链是弯曲还是延伸,并且影响了每个独立关节的移动。