本部分介绍了使用 HumanIK 所涉及的一些关键对象和概念。
从根本上来说,HumanIK 作用于角色。希望由 HumanIK 解算器完全或部分控制的每个角色必须由 HIKCharacter 对象表示。此 HIKCharacter 是特定于 HumanIK 的两足动物或四足动物形式的表示,可与 HumanIK 生物力学模型配合使用。
每个 HIKCharacter 都包含一组关节,称为节点。HumanIK 支持的每个节点预定义为对应于人体形状骨骼的特定部分。例如,一个节点表示左手臂的肘部,另一个节点表示左手臂的腕部,还有一个表示拇指的第一个关节等。
HumanIK 支持超过 170 个不同的预定义关节类型,在 HIKNodeId 枚举中列出。这些节点 ID 中的 15 个是必需的:每个 HIKCharacter 必须至少包含这些必需的节点。此外,根据游戏角色骨架中的关节和希望 HumanIK 解算器达到的精确度,可以选择使用 HIKCharacter 中的其他可选节点。有关可帮助您确定哪个 HumanIK 节点最正确地表示游戏角色骨架中的每个关节的详细信息,请参见将关节映射到 HumanIK 节点和效应器。
在每个具有一组相同关节的角色中,这些关节并非位于相同的位置。例如,较高角色的腿部和手臂可能比较短角色的腿部和手臂长,女性角色的髋部可能比男性角色的髋部更宽等。
每个 HIKCharacter 维护一组有关每个角色以中性的 T 形站姿站立时其关节位置的信息。例如:
有关详细信息,请参见默认 T 形站姿。
为角色设置此默认几何图形的过程称为“角色化”。这种角色化可以通过编程方式完成,方法是调用 HumanIK API 中提供的函数,从而为每个角色的节点设置相应的平移和方向。或者,可以从可视内容创建工具(如 Maya 或 Softimage)中导出角色化。初始化 中介绍了有关此过程的更多内容。
HIKCharacter 中的每个节点在给定的时间均具有一定的位置和旋转。组合在一起时,这些位置和旋转为角色定义完整的站姿或姿势。HIKCharacterState 对象为 HIKCharacter 的每个节点存储单个位置值和旋转值,因此可为该角色存储一个姿势。
HumanIK 解算器使用这些 HIKCharacterState 作为输入和输出:
效应器为角色身体的不同部位定义所需的位置和旋转。它们用于称为 HIKEffectorSetState 的集,每个集在给定的时间为角色的肢体定义一组连贯的目标点。
HIKEffectorSetState 不为角色骨架中的每个单个节点包含单独的效应器。相反,它们包含一组表示两足动物或四足动物的语义元素的效应器。例如,左手上每个手指的末端有单个效应器,左腕有一个效应器,左肘有一个效应器。但是,角色手部可以使用许多不同的骨架配置,每个手指中可以具有不同数目的节点,可以具有手内侧节点,手臂中可以具有滚动节点等。根据角色的几何图形,反向运动学解算器将效应器表示的所需平移和方向映射到骨架的相关部分。
例如,如果将左食指尖的效应器移向角色的腕部,则反向运动学解算器将尝试将手指效应器放在所需位置,并在需要时移动手中的其他节点。如果食指具有多个节点,则会导致手指弯曲。
HumanIK 反向运动学解算器平衡 HIKEffectorSetState 中您提供的所有效应器的需求,做到“最佳拟合”,即,使尽可能多的角色肢体符合其对应效应器指示的位置和旋转。
HIKEffectorSetState 中的每个效应器均可处于活动或非活动状态,并且可以对解算器实施其他特殊约束,如 Reach、Pull 和 Resist。请参见Reach、Pull和Resist。有关 HumanIK 生物力学模型可以识别的效应器的列表,请参见 HIKEffectorId 枚举。
HIKPropertySetState 包含一组用于配置反向运动学和重定目标过程的参数。每次使用反向运动学或重定目标解算器时,必须提供 HIKPropertySetState;但是,您可以对参数的默认值进行任意多的自定义。
HIKPropertySetState 不取决于角色的设置方式;所有 HIKPropertySetState 均包含相同的参数列表。您可以使用相同的 HIKPropertySetState 来解算具有不同骨架结构和几何图形的角色,当然前提是希望解算器针对这两个角色采取相同的行为方式。
有关可以在每个 HIKPropertySetState 中配置的特性的详细信息,请参见角色特性。