在较低细节层次上解算

通过 HumanIK 反向运动学和重定目标解算器,您可以借助能够进一步提高动画真实效果的可配置设置,精确地对角色移动进行细粒度控制。但是,有时候没有必要靠牺牲一定的性能来获取较高的细节层次 (LoD)。

例如,如果游戏的某个区域或某段包含大量角色,最好接受每个角色移动的真实感中存在细微的不准确性,以减少每个计算中消耗的资源。同样,如果角色离玩家或观众很远,细微的不准确性很难察觉到;在这些情景下,HumanIK 可能没有必要提供最高的细节层次。

HumanIK 提供了反向运动学和重定目标解算器的低 LoD 实现,从而实现更快的性能和更低的 CPU 要求。

反向运动学

要使用低细节层次的反向运动学解算器,请调用 HIKSolveForEffectorSetLowLOD() 函数,而不是反向运动学解算中介绍的 HIKSolveForEffectorSet() 函数。HIKSolveForEffectorSetLowLOD() 函数需要的参数与 HIKSolveForEffectorSet() 函数需要的参数完全相同。

低细节层次解算器有以下限制:

重定目标

要使用低细节层次重定目标解算器,请调用 HIKSolveForCharacterLowLOD() 函数,而不是重定目标解算中介绍的 HIKSolveForCharacter() 函数。HIKSolveForCharacterLowLOD() 函数需要的参数与 HIKSolveForCharacter() 函数需要的参数完全相同。

低细节层次重定目标解算器执行的实际重定目标操作与普通重定目标解算器执行的操作相同。但是,低细节层次重定目标解算器会调用低细节层次反向运动学解算器以生成目标角色的最终位置,从而提高 IK 过程的速度。

最大化性能

使用等同的设置,低细节层次 IK 和重定目标解算器的运行速度应比其常见对等解算器快达 10 倍。但是,对解算参数的一些简单更改(如下详述)可以进一步改进 CPU 性能。

请注意,下面列出的某些方法可能会在计算所花费的 CPU 时间和最终效果的精度之间实现更好的折衷。

肢体解算

低细节层次解算器使用的约 30% 的 CPU 时间用于解算肢体。您可以通过为部分或全部角色肢体取消激活解算来降低该值。您可以为每个肢体部分或全部取消激活解算。

  • 要为某一肢体全部取消激活解算,请从为 HIKEffectorSetState 设置的解算步骤中排除该肢体的解算步骤。有关详细信息,请参见解算所选身体部位
  • 要为某一肢体部分取消激活解算,您可以使用 HIKSetTranslationActive()HIKSetRotationActive() 函数,在 Effector Set State 中将肢体的到达平移或到达旋转值设置为 0.0f。在使用低细节层次解算器时,将到达旋转值设置为 0.0f 通常是个好方法。

脊椎解算

低细节层次解算器使用的约 13% 的 CPU 时间用于解算脊椎。在很多情况下,这对最终姿势的影响非常小。您可以安全地取消激活脊椎解算,而不会显著影响最终效果。

要取消激活脊椎解算,请从为 HIKEffectorSetState 设置的解算步骤中排除其解算步骤。有关详细信息,请参见解算所选身体部位

拉动精度

低细节层次解算器使用的约 20% 的 CPU 时间用于简化拉动算法。通过降低 HIKPullIterationCount 角色特性的值,可以显著减少该时间。该特性值设置得越低,执行的迭代次数就越少。这样可降低 CPU 消耗,但可能会导致最终效果不精确。

有关详细信息,请参见特定于重定目标的特性