以可视化方式角色化 HIKCharacter

虽然您可以通过调用 HumanIK API 中提供的函数,在运行时代码中以专门的方式成功创建 HumanIK 角色化,但让您组织中的美工人员、动画师或技术设计师在可视化设计工具中创建角色化通常更简单。可为美工人员提供即时反馈,以便美工人员对角色应用 IK 或重定动画目标以测试角色化,并根据测试结果轻松调整角色化。当美工人员对角色化感到满意后,他或她即可将其导出到文件,您可以在运行时将该文件加载到游戏中。

可视化角色化选项

美工人员可以使用以下任意可视化工具创建 HumanIK 角色化文件。

MotionBuilder

MotionBuilder 和 HumanIK 由相同的核心技术开发而来,并继续共享骨架映射到内置生物力学模型的许多相同要求。在 MotionBuilder 中创建的任何有效两足动物或四足动物的角色化在 HumanIK API 中应该同样有效。但是,要将 MotionBuilder 角色化导出到可以使用 HumanIK API 加载的文件中,您必须首先构建和安装用于您的 MotionBuilder 版本的 HumanIK 插件。

请参见MotionBuilder HumanIK 解算器插件

Maya 2012 或更高版本

自 2012 版本开始,Maya 包含的一些工具可用于创建角色骨架的 HumanIK 角色化、使用 HumanIK 控制装备设置角色动画,以及将角色化导出到可用于 HumanIK SDK 的二进制文件中。

HumanIK 角色化工具

如果您的组织所使用的 MotionBuilder 或 Maya 不是支持的版本,您也仍可使用 HumanIK SDK 提供的角色化工具可视化地创建 HumanIK 角色化。

角色化工具以下列形式提供:

  • Maya 2011 的插件。
  • Softimage 2011 的插件。
  • 可根据 FBX 文件内容创建角色化的独立版本。

这些版本的角色化工具包含在 Windows 平台的 HumanIK 程序包中,位于 tools 目录的子目录下。每个版本都附带一个文档,介绍其安装和使用。也可以从角色化工具界面内打开此文档。

美术师可以使用最适合您的管线的那个版本。

步骤 1. 在可视化工具中创建和保存角色化

简单地说,美工人员必须:

  1. 设置角色骨架使其处于默认 T 形站姿,如默认 T 形站姿中所示。

    请注意四足动物角色的特殊要求:如果您计划使用 HumanIK 创建四足动物角色,请阅读为四足动物使用 HumanIK 中的重要信息。

  2. 创建角色的骨骼与 HumanIK 可辨识的节点之间的映射。

    完成这一步的方式会略有不同,取决于您所用的工具以及所安装的工具版本;请参见有关工具的文档。所有工具均使用类似于下图的可视界面:

    您必须将角色骨架中的骨骼映射到该体形视图显示的各种节点上。成功映射到骨骼后,每个节点表示将变为绿色。

    角色化工具会自动验证角色中性站姿的几何体,并报告任何检测到的错误或警告。

  3. 测试角色化。

    • 在 MotionBuilder 中或在 Maya 2012 或更高版本中:您可以为角色创建新的控制装备,并通过移动角色的效应器至不同位置以及更改效应器的到达和拉动值进行结果测试。您还可以设置新角色,作为针对不同角色录制的动画的目标。
    • 在角色化工具中:在角色化工具窗口的 Test 选项卡上,您可以查看将各种动画重定目标到新角色化骨骼(不建模或蒙皮)的结果。随工具提供了一些基本示例动画演示,您也可以添加自己的动画演示。

  4. 将新的角色化保存或导出为文件。您将使用此文件中的数据在 HumanIK 初始化代码中创建新的、完全角色化的 HIKCharacter 对象。这将以不同又相似的方式完成,具体取决于您使用的工具。

    • 在 MotionBuilder 中:在“Properties”窗口中,针对角色打开 HumanIK 插件,然后单击 Save HIK Character 按钮。将角色化保存为二进制 .hik 文件。
    • 在 Maya 中或在角色化工具中:您创建角色化的窗口或其主下拉菜单提供了一个控件,可用于将角色定义保存或导出为二进制 .hikc 文件。美工人员可以选择以小端字节序或大端字节序来保存此文件,以适合在运行时使用的目标平台。如果此文件的字节存储顺序与运行时使用的平台的字节存储顺序不匹配,则 HumanIK 将自动交换数据的字节顺序。

      该文件可能会伴随一个 XML 文件,用于指示美工人员或装配师已映射到每个 HumanIK 节点的角色骨架中的骨骼名称。当您写入用于在运行时在 FK 动画系统和 HIKCharacterState 之间转换动画数据的代码时,可以使用该文件中的信息。请参见反向运动学解算重定目标解算

步骤 2. 从导出的文件加载或创建 HIKCharacter

使用美工人员创建的二进制文件中的数据在游戏运行时创建 HumanIK 角色的过程,因创建的文件类型不同而略有不同。

如下所述加载了角色化后,HIKCharacter 即可供使用。继续执行在初始化中列出的步骤,以设置您的角色所需的其他 HumanIK 对象。

.hik 文件(来自 MotionBuilder)

调用 HIKLoadCharacter() 函数,利用 .hik 文件中包含的数据创建新的 HIKCharacter。此函数需要以下参数:

  • 包含您角色的 .hik 文件的路径和文件名。
  • Autodesk, Inc. 提供给您的许可证密钥(在您使用的是评估版本的 HumanIK 的情况下)。如果如设置 HumanIK 许可证密钥所述已在源代码文件中包含 autodeskmwkey.h 文件,则可使用预定义的值 AutodeskCustomerString。如果您使用的是完全许可版本的 HumanIK,则可以传递空值。

  • 指向将调用以为 HIKCharacter 分配内存的回调函数的指针。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理

例如:

HIKCharacter * MyChar = HIKLoadCharacter(
                                   "C:\data\hero.hik",
                                   AutodeskCustomerString,
                                   &malloc);

或者,您可以使用下一部分所述的过程,从二进制文件内容中读取角色数据。

.hikc 文件(来自 Maya 或角色化工具)或 .hik 文件(来自 MotionBuilder)

  1. 利用您在项目中使用的任何文件管理界面,将为角色创建的 .hikc 文件加载到内存中。
  2. 创建 HIKCharacterDefinition 类的新对象。例如:

  3. 调用 HIKReadFromStream() 函数,利用 .hikc 文件中包含的数据创建新的 HIKCharacter。此函数需要以下参数:

    • 指向您创建的上述 HIKCharacterDefinition 对象的指针。该对象将更新以指示新角色使用的节点,以及哪些节点具有自由度和父偏移。
    • 指向从已导出文件读取的内容的内存位置的指针。

    • 文件流的大小(以字节计)。

    • 指向将调用以为 HIKCharacter 分配内存的回调函数的指针。可以指定标准 malloc 函数,或满足与 malloc 相同的类型定义的任何自定义内存分配方法。请参见 HumanIK 对象和内存管理

    • 指向将调用以取消分配内存的回调函数的指针。可以指定标准 free 函数,或满足与 free 相同的类型定义的任何自定义内存取消分配方法。请参见 HumanIK 对象和内存管理

    • Autodesk, Inc. 提供给您的许可证密钥(在您使用的是评估版本的 HumanIK 的情况下)。如果如设置 HumanIK 许可证密钥所述已在源代码文件中包含 autodeskmwkey.h 文件,则可使用预定义的值 AutodeskCustomerString。如果您使用的是完全许可版本的 HumanIK,则可以传递空值。

    例如:

    HIKCharacter * MyChar = HIKReadFromStream(
                                       def,
                                       stream, 
                                       streamSize,
                                       &malloc,
                                       &free,
                                       AutodeskCustomerString, 
                                       );
  4. 关闭在步骤 1 中打开的文件流。