将关节映射到 HumanIK 节点和效应器

HumanIK 反向运动学和重定目标解算器根据 HIKCharacters 的移动能力计算它们的姿势,这一定程度上由它们骨架的结构定义。对于两足动物和四足动物,角色的节点需要按某种特定的排列进行连接:例如,右肩是右肘的父节点,而右肘相应地是右腕的父节点。HumanIK 生物力学模型配备了有关这些节点的移动方法的知识;当解算器需要移动一个或多个节点以满足 HIKEffectorSetState 或源动画的要求时,会使用此内置知识来构建新的姿势。

不过,为了使此过程控制您自己的一个角色,需要将角色骨架中的每个关节映射到 HumanIK 可以理解的节点之一。每个节点都有一个唯一的描述性 ID,在 HIKNodeId 枚举中列出。以下部分描述了相关准则,用于理解此枚举的命名约定以及为角色关节选择合适的节点。

必需节点和常用节点

下图显示了最常使用的节点的唯一 ID。

必需节点

HumanIK 需要在它控制的每个角色中存在最少的一组特定节点。这些必需节点在上方的图中以红色类型和星形表示。

脊椎和颈部

HumanIK 最多可支持 9 个其他脊椎节点(Spine1NodeIdSpine9NodeId)以及 10 个颈部节点(NeckNodeId 以及 Neck1NodeIdNeck9NodeId)。自下而上对这些节点进行编号,越靠近髋部,编号就越小,越靠近头部,编号就越大。

定义脊椎或颈部节点时不能跳过编号。例如,如果不映射 Spine1NodeIdSpine2NodeId,则不能将骨骼映射到 Spine3NodeId

手和脚

手和脚在 HumanIK 中几乎完全等效;每只脚和每只手均可包含相同类型的关节,只是它们的父子关系稍有不同。可以单独定义每个角色的脚和手,这可使每个角色具有很大的复杂性。例如,一个海盗角色可以有一只脚踝以下没有任何关节的木制假腿、一只仅趾跟有一个关节、但关节连接和脚趾不完整的穿靴的脚、一只关节完整的手和一只缺少几根手指的残疾手。

下图显示了手的完整节点层次:

下图显示了脚的完整节点层次:

手指和脚趾

HumanIK 允许为每只手和每只脚最多角色化六个手指:人类骨架的五个手指(称为拇指、食指、中指、无名指和小指)以及额外的第六个手指或脚趾。

每个手指和每个脚趾均是关节链,可以包含多个 HumanIK 节点。上图显示了可以为所有手指和脚趾角色化的所有节点。上图中,只有拇指和额外手指中的节点以全称命名;但是,其余手指和脚趾中的关节遵循相同的命名约定。有关完整列表,请参见 HIKNodeId 枚举。

  • 每个手指和每个脚趾最多可以包含四个主要关节,标识为 A、B、C 和 D,如上图所示。定义这些手指或脚趾节点时不能跳过字母。例如,如果没有 LeftIndexANodeIdLeftIndexBNodeId 节点,则不能有 LeftIndexCNodeId 节点。
  • 为达到特殊效果,每个手指和每个脚趾在手指或脚趾的根部还提供了其他附加手内侧关节(例如,上方手图中的 LeftPinkyInNodeId)。这些节点完全是可选的,可以忽略。

表示手指和脚趾的关节链连接角色骨骼的其他部分,如下所示:

  • 手上的拇指始终直接连接到腕部节点。
  • 脚上的额外脚趾始终直接连接到踝部节点。
  • 其他所有手指和脚趾连接到可选的手节点或脚节点,如果该节点已角色化(即上图中的 LeftHandNodeIdLeftFootNodeId)。如果可选手或脚节点未角色化,则这些手指和脚趾将改为直接连接到腕部或踝部节点(即上图中的 LeftWristNodeIdLeftAnkleNodeId)。

角色化角色的手指和脚趾时,通常建议将每个角色的手指尖或脚趾尖映射到节点。这尤其适用于在具有不同数量的手指或手指关节的角色之间重定目标动画。这是因为每个手指的效应器确定了最后一个角色化节点在该关节链中的位置。如果最后一个角色化节点位于手指尖,则可以使用效应器来控制角色指尖的位置。请参见效应器放置

手节点和脚节点

可选手节点和脚节点,分别为 LeftHandNodeIdRightHandNodeIdLeftFootNodeIdRightFootNodeId,可在角色的手指和脚趾的根部提供关节。该节点在以下情况中使用最频繁:每个脚趾或手指不需要完整的关节连接,但弯曲手或脚可增加真实感。例如,就穿有闭合鞋的角色而言,即使没有为各个脚趾定义任何节点,通过脚节点,脚同样可以在趾根处弯曲,如下所示。

特殊节点

除上面讨论的节点以外,HumanIK 还支持以下节点以达到特殊效果。

锁骨和额外锁骨节点

角色的骨架可以在身体的左右两侧包含其他锁骨骨骼,由 LeftCollarExtraNodeIdRightCollarExtraNodeId 节点定义。这些附加锁骨骨骼可以帮助模拟手臂抬起时人类肩膀的移动。

额外锁骨骨骼节点(如果已启用)位于锁骨骨骼节点和肩膀节点之间,即 LeftCollarExtraNodeId 位于 LeftCollarNodeIdLeftShoulderNodeId 之间,RightCollarExtraNodeId 位于 RightCollarNodeIdRightShoulderNodeId 之间。

默认情况下,HumanIK 在锁骨节点和额外锁骨节点之间均匀展开锁骨旋转。例如,当角色抬起左臂时,一半旋转应用于 LeftCollarNodeId,另一半应用于 LeftCollarExtraNodeId。但是,可以通过设置 HIKExtraCollarRatioId 特性的值来控制锁骨节点和额外锁骨节点之间的混合比例。请参见常规特性

滚动节点

HumanIK 支持为角色的肩部、肘部、髋部和膝部使用滚动节点。每个滚动节点通常位于其关联父节点和骨骼中下一个节点之间的中心附近。例如,左肩的滚动节点位于左肩和左肘的中间,左肘的滚动节点位于肘部和腕部的中间。HumanIK 解算器将滚动旋转应用于具有关联滚动节点的节点时,可将该滚动旋转的百分比应用于滚动节点。此过程称为滚动提取。

滚动提取模拟两足动物和四足动物的手臂和腿围绕其轴旋转的实际方式。通过从更合适的位置继续沿着肢体方向控制蒙皮变形,可大大提高为蒙皮角色创建的动画的真实感。

默认情况下,不会为任何滚动节点激活滚动提取。要启用滚动提取,必须为每个滚动节点激活一个角色特性,并将该特性的值设置为表示应该应用于滚动节点而不是应用于父节点的滚动旋转的百分比。

有关详细信息,请参见使用滚动提取

参照节点

参照节点 ReferenceNodeId 旨在用作角色的整体平移、旋转和缩放的可选存储库。可将其视为角色髋部的抽象父对象。

在大多数情况下,无需使用参照节点。它主要适用于以下情况:

  • 在启用 HIKForceActorSpaceId 特性的情况下执行重定目标时。在这种情况下,修改目标角色的 HIKCharacterState 中的参照节点的状态是更改目标角色的平移、旋转和缩放的唯一方法。通常在调用重定目标解算器之前使用 HIKSetNodeStatefv()HIKSetNodeStateTQSfv() 函数完成此修改。
  • 当模型的髋部具有可定义角色的平移、旋转和缩放的父对象时,可以方便地使用参照节点将数据从该父对象同步到 HumanIK

髋部平移

髋部平移节点 HipsTranslationId 用作角色髋部平移的独立存储库。如果已为角色启用了该节点,并且 HumanIK 解算器需要偏移角色髋部的平移,则结果平移将存储回髋部平移节点,而不是存储在 HipsNodeId 节点中。

默认情况下,即使已启用 HipsTranslationId,仍会将髋部的旋转存储在 HipsNodeId 节点中。但是,通过将角色的 HIKHipsTranslationModeId 特性的值设置为 1,可以配置 HumanIK 以将髋部的旋转存储在 HipsTranslationId 节点中。在这种情况下,平移和旋转均不会应用于 HipsNodeId 节点。

也可以使用 HipsTranslationId 节点将源角色的轨迹重定目标为目标角色。有关详细信息,请参见将动画轨迹重定目标