设定和检索 HIKCharacterState 中的数据

概述中所述,HIKCharacterState 存储角色骨架中每个节点的平移、旋转和缩放。这些值一起定义该角色的姿势或站姿,其每个关节的位置和方向。通常,在以下情况中需要直接将数据设置为 HIKCharacterState

此外,HumanIK 解算器生成的所有角色姿势存储在 HIKCharacterState 中。无论您是否使用 HumanIK 执行重定目标或反向运动学,您始终需要从 HIKCharacterState 检索生成的动画数据。

全局空间和规格化空间

在内部,HumanIK 在规格化空间中运行,其中角色化姿势中包含的旋转和缩放偏移将从每个 HIKCharacterState 中存储的值中移除。在 HIKCharacterState 中为节点在全局空间中设置旋转或缩放值,将在新值存储于 HIKCharacterState 之前移除角色的默认 T 形站姿中包含的任何旋转和缩放偏移。同样,在 HIKCharacterState 中为节点在全局空间中检索旋转或缩放值时,HumanIK 在将 HIKCharacterState 中存储的规格化值返回给您之前,在内部将角色的默认 T 形站姿中包含的偏移重新应用于这些规格化值。

在全局空间中设置和检索节点数据的另一种方法是,直接在 HumanIK 为每个 HIKCharacterState 内部维护的规格化空间中运行。在这种情况下,为节点设置旋转和缩放值时,HumanIK 会将值直接存储在 HIKCharacterState 中,而无需移除角色的默认 T 形站姿中包含的所有偏移。同样,在这种情况下检索旋转和缩放值时,将返回存储在 HIKCharacterState 中的规格化值,而无需重新应用默认 T 形站姿中包含的所有偏移。对于不包含角色默认 T 形站姿中的任何旋转或缩放偏移的节点,通过在规格化空间中运行,您可以避免移除和重新应用旋转和缩放偏移的开销,这可以提高性能。

设置和检索规格化空间值的函数用其名称中的术语 Normalized 表示,如 HIKGetNodeNormalizedStateTQSfv()。有关可用于在规格化空间中设置和检索数据的函数的详细信息,请参见以下各部分。