疑难解答

如果使用 HumanIK 时您的角色未按预期表现(例如,如果角色采用不正常或不可能的姿势),以下一系列步骤可能会帮助您确定问题并找到相应的解决方案。

步骤 1. 验证许可证

每次创建 HIKCharacter 时,都必须提供运行时许可证密钥,以便在 HumanIK 为您返回指向新创建的 HIKCharacter 对象的指针之前进行内部验证。如果此许可证密钥未正确设置,或者如果为您提供的密钥已过期(通常是在超出预确定的评估期限时),HumanIK 反向运动学和重定目标解算器将为您的角色生成随机的、不可能的位置。

如果在 HumanIK 解算器以前提供良好结果的情况下突然出现 HumanIK 问题,且每次调用 HumanIK 解算器时都会出现类似结果,则已过期的许可证可能是问题所在。

您必须确保已正确按照设置 HumanIK 许可证密钥下的说明进行操作。如果您的运行时许可证密钥已过期,请与 Autodesk 支持部门联系并为项目请求新的许可证密钥。请参见支持

步骤 2. 使用“详细”库

在 Windows 平台上,HumanIK 库提供了一种“详细”配置,使您可以记录角色化和解算过程中遇到的错误和警告,并可以访问 HumanIK 调用栈(如果需要)。

在开发过程中链接到此版本的库并定期监视警告和错误的输出可帮助诊断 HumanIK 解算器生成的姿势中显示的问题。有关详细信息,请参见记录调试消息

步骤 3. 对无法创建角色进行故障排除

如果调用 HIKCharacterCreate()HIKCharacterCreateInPlace() 后返回空指针,则很可能是运行时许可证密钥出现问题或者角色定义中设置的节点出现问题。

要确定问题的原因,可将 HIKCharacterDefinition 传递到 hikvalidation.h 中定义的验证函数:HIKValidateRequiredBone()HIKValidateSpine()HIKValidateNeck()。如果其中任一函数返回 false,请检查其生成的错误字符串以确定问题的原因。

或者,如果使用 HumanIK 库的详细版本,则可以调用 HIKValidateHierarchy(),从而按顺序调用以上函数并将其生成的任何错误写入日志。

如果上述验证函数指示无法找到角色定义问题,则运行时许可证密钥可能已过期。如果是这样,请与 Autodesk 支持部门联系并为项目请求新的许可证密钥。请参见支持

步骤 4. 对无法角色化进行故障排除

如果调用 HIKCharacterizeGeometry() 后返回 false,则很可能是为角色设置的 T 形站姿出现问题。

要确定问题的原因,可将 HIKCharacter 传递到 hikvalidation.h 中定义的验证函数:HIKValidateHipsXAxis()HIKValidateArmsXAxis()HIKValidateSpineYAxis()HIKValidateBonePosition()。如果其中任一函数返回 false,请检查其生成的错误字符串以确定问题的原因。

或者,如果使用 HumanIK 库的详细版本,则可以调用 HIKValidateGeometry(),从而按顺序调用以上函数并将其生成的任何错误写入日志。

步骤 5. 验证数据流

使用 HumanIK 一定会涉及动画数据在游戏引擎和 HumanIK 之间的双向流动。每次调用 HumanIK 解算器为角色创建新的姿势时,通常必须从游戏引擎检索角色骨架中关节的位置和方向,并将该信息以 HumanIK 理解的格式存储于 HIKCharacterState 中。同样,必须从 HIKCharacterState 检索 HumanIK 解算器生成的姿势,并将该信息传输回游戏引擎。

完成后,此双向数据流对于使用 HumanIK 的过程将变为透明,但首次进行设置可能会具有挑战性。有关 HumanIK 中提供的用于在 HIKCharacterStateHIKEffectorSetState 中设置和检索动画数据的各种不同函数的详细信息,请参见设定和检索动画数据

尽力验证您的游戏引擎在与 HumanIK 交换角色姿势时是否正确转换数据。一种检查问题的可能方法为:

  1. 使用一个角色的平移和方向设置 HIKCharacterState 的节点。
  2. 在调用一个 HumanIK 解算器之前,立即检索节点数据并将其重新应用于游戏引擎中的角色。

您应该会看到与发送时完全相同的姿势。如果您未从游戏引擎看到与开始时完全相同的姿势,则在 HIKCharacterState 中设置数据的方式出现问题和/或从 HIKCharacterState 检索数据的方式出现问题。

步骤 6. 验证角色特性

如果角色的默认站姿正常,且数据流稳定地在游戏引擎和 HumanIK 之间传输所有动画数据,则问题的原因可能是在角色的 HIKPropertySetState 中为一个或多个角色特性设置了意外值。

尝试使用新创建的包含所有特性的默认值的 HIKPropertySetState 重复有问题的操作。如果这可以解决存在的问题,则尝试逐个添加回之前设置的所有特性值,直到找到导致意外行为的特性设置。

步骤 7. 与 Autodesk 支持部门联系

如果上述所有步骤都无法更正问题,且您的角色仍显示意外行为,则可向 Autodesk 支持部门的工程师寻求帮助。

为迅速解决问题,建议您尽快提供有关问题及其背景的尽可能多的信息,以帮助指定的工程师了解情况并确定解决问题的途径。例如,以下信息项可能非常有用:

有关联系信息,请参见支持