HumanIK 提供了用于设置和检索动画数据的两种高级方法供您选择,如下所述。
HumanIK 提供了各种不同的函数,用于设置和检索 HIKCharacterState 中单个节点或 HIKEffectorSetState 中单个效应器的平移、方向和缩放。要设置或检索多个不同节点或效应器的数据,可以循环访问每个所需的节点或效应器,为每个节点或每个效应器调用一次这些函数中的一个。
此方法在概念上是很简单的,尤其适合于设置或检索少量节点或效应器的数据。例如,如果要写入用于将目标点指定给单个肢体的 IK 控制器,您可以使用其中一个函数来设置相应效应器的平移。但是,如果需要设置或检索许多节点或效应器的数据(例如,在检索 HIKCharacterState 中包含的解算结果以将姿势应用回游戏引擎角色时),使用此方法不如使用如下所述数据集方法有效。
您可以通过使用数据集和附带的数据描述一次同步多个节点的状态,而不是使用单个函数调用来设置和检索 HIKCharacterState 中每个节点或 HIKEffectorSetState 中每个效应器的数据。
此方法通常比使用上述迭代方法快得多,并且还有减少所需函数调用数量的优点。但是,此方法的确需要某些更高级的设置和内存管理才能启动并运行。
在一个数据集中,每个节点或效应器的信息按顺序包含在离散的数据块中。第一个数据块包含一个节点或效应器的所有相关数据,下一个数据块包含下一个节点或效应器的相同数据,依此类推。每个数据块的构造方式必须完全相同:数据块中每种数据类型的偏移以及数据块的总大小(或步幅)对所有节点或效应器都必须完全相同。例如,如果某个节点的平移数据在一个数据块中位于 32 个字节的偏移处,则它在其他所有数据块中也必须位于相同的偏移处。数据块中的所有偏移都必须按 16 字节对齐。
必须随每个数据集提供一个数据描述。数据描述是一种结构,用于定义数据集的内存布局,即,定义节点或效应器的顺序(哪些数据块适用于哪些节点 ID 或效应器 ID)、每个数据块中平移、旋转和缩放数据的偏移,以及数据的步幅(每个数据块的总大小)。
必须用于数据描述的结构取决于您是在 HIKCharacterState 中还是在 HIKEffectorSetState 中设置和检索数据,以及是使用变换矩阵还是单独的平移、方向和缩放值来表示动画数据。