|
1 前言
开发游戏的同学应该对IK不陌生,但是对于我这个菜鸡而言,看到FABRIK、Two Bone IK、Full Body IK 、CCD IK“这么多的IK”总是一头雾水,所以总结下~
本文为原理加应用,将介绍IK概念、IK算法、使用限制等原理,然后介绍“这么多的IK”在游戏开发(主要是UE4/UE5引擎)中的应用。(应用还不太完善,抽空会补演算过程图、应用图......还有,理论知识比较多,文章大都总结于Inverse Kinematics Techniques in Computer Graphics: A Survey这篇论文里的内容,主要是翻译这篇文章,篇幅较长....)
2 概念
正向运动学(Forward kinematics, FK):利用机器人运动学方程,根据关节的特定参数计算末端受动器(end effector)的位置。正向运动学要求用户为所有涉及的关节设置参数。
逆向运动学(Inverse kinematics, IK):流程与FK相反,利用机器人运动学方程来确定机械手的关节参数,使末端受动器移动到期望的位置。末端受动器可以是关节(如手和脚),也可以是内部关节(如手肘和膝盖),不一定位于末端。IK最早出现在机器人学技术中,现在在许多领域都有应用,比如:工程学、计算机图形学、电子游戏、CG动画。
关于末端受动器:机械手臂抓取末端受动器的位置、角色开门时手的位置、角色行走时脚的位置,这些可以称为末端受动器。
3 IK问题分析
IK可能有一个解、多个解或无解。
IK问题解决有两步比较重要:
- 一:分析目标是可达还是不可达。检查目标是否在可达范围内是很重要的,因为避免寻找不存在的解决方案,可以节省大量的处理时间。末端受动器能够到达的目标空间称为可达工作空间。
- 二:当存在解决方案且没有达到解决方案时,需要添加终止条件来避免在迭代过程中进入无限循环的情况。比如:限制迭代次数、当末端受动器在前一次迭代和当前迭代时的位置差小于指定的公差时终止IK解算器(IK solvers)的计算。
要令IK发挥最好的效果,开始时骨骼最好摆出接近目标的姿势。这样有助于算法专注最接近的解,并能在合理的时间内完成计算。可用解的数量取决于目标位置或运动链的自由度。目标不可达的IK问题被称为过度约束问题。当目标可达时,两个或多个链可能存在多个解决方案。这使得IK问题不受约束(或冗余)——它可能有无限多的解决方案来满足期望的目标。
举个栗子~:可达与不可达如下图所示: 、 、 分别为三个杆,红色区域为不可达区域,绿色区域为可达区域。
可达与不可达
4 IK求解算法
IK解算器主要分为四大类,分别是解析法(the Analytic family)、数值法(the Numerical family)、数据驱动法(Data-driven methods)和混合法(the Hybrid family of solvers)。
如何选取最合适的IK解算器呐?这取决于许多标准,包括给定的解决方案的平滑性以及选择该解决方案的计算成本。而且,IK解算器的效率和有效性通常是根据产生的运动的平滑度、可扩展性和产生的姿态所需的计算成本来衡量的。
接下来将分别介绍几类IK解算器:
4.1 解析法
图误
如上图所示: 、 为两个杆, 、 表示相对旋转角度( 为 joint base target, 为 base joint target),可以看到图中两个杆可以有两种方案到达target点。由数学知识可知,关节角的解可以是: 、
由上述的解分析可知,当在三维空间中,面临关节更多更复杂的情况时,求解会变得复杂。
还有,对于平滑运动,我们希望解θ是稳定的。以及,当末端受动器微微修改时,其他关节不会变化太大。
4.1.1 应用之TwoBoneIK
TwoBoneIK正如其名两个骨骼(不包括根骨骼),使用起来简单,应用也较多,比如:UE4.26的SolveBasicTwoBoneIK、FAnimNode_TwoBoneIK、Advanced Locomotion System V4插件。
由于三个点确定一个平面,所以需要增加一个控制点(也就是UE4中的PoleVector 极坐标点)来解三维空间内的旋转角度。但是,应该如何确定极坐标点呐?Zero大佬在虚幻引擎的TwoboneIK心得 -- Joint Target中有说,请移步查看~
4.2 数值法
数值族一般可以分为三类:雅可比矩阵法(Jacobian)、牛顿法(Newton)、启发式法(Heuristic)。
4.2.1 雅可比逆矩阵法
(大量翻译,逃ε=ε=ε=┏(゜ロ゜;)┛
介绍:雅可比矩阵方法通过反复改变一个完整链的构型,使得末端受动器的位置和方向在每一步都更接近于目标位置和方向,从而迭代地解决IK问题。雅可比矩阵的解是运动链实际运动的线性近似。
雅可比矩阵是整个链系统对角度参数θ的偏导数矩阵。雅可比矩阵方法通过反复改变一个完整链的构型,使得末端受动器的位置和方向在每一步都更接近于目标位置和方向,从而迭代地解决IK问题。如下图所示:
雅可比矩阵 可以描述为 值的函数: (i=1,...,k,j=1,...,n,k为末端受动器的个数,n为关节个数)。因此, 是一个带有向量元素的 矩阵。在实践中,它会转换成一个 的标量矩阵。可以用 来计算 的分量, 是指向第 个关节旋转轴的单位向量: ( 是关节的位置)。
现在,假设末端受动器i的目标位置为 ,然后我们试图找到使末端受动器的实际位置和目标位置之间的误差最小的 值:
为了做到这一点,我们在关节角上做一个小的改变 ,然后将末端受动器位置的随之改变近似为:
可以由 和 的当前值计算出来。由于我们正在寻找一个 的值,它尽可能接近误差 (误差项 应该被clamp,以避免收敛不稳定),我们可以估计 的变化为 。
然而, 可能既不是方阵也不可逆,除此之外,还可能存在奇异性问题。我们在这里注意到,当一个关节发生变化时,雅可比独立于其他关节来考虑每个关节的影响(这是一阶近似),它的所有子关节都被视为单刚体。随着时间的推移,人们提出了各种不同的方法来解决IK问题,其目的是避免奇异性问题,并提高解的收敛性和稳定性。一些方法更多的是通过适当定义的映射将任务空间与关节空间关联起来,来对奇异点附近ill-conditioned病态的逆微分运动映射进行局部修正,而另一些方法则是针对整体运动的平滑。接下来,我们总结这些技术。
PS:奇异性:从数学角度而言,奇异性是指函数的不连续或导数不存在,表现出奇异性的点。
4.2.1.1 雅可比矩阵转置(Jacobian transpose)
用转置代替逆。因此: 。对于一些合适的标量 可以计算为 ,其中 表示向量a,b的点积。
雅可比矩阵转置法在几何奇异点附近并不是定义不清的,但它需要多次迭代才能收敛。还有,可以通过确定雅可比矩阵的行是否为零来验证是否存在奇异性问题。还有,雅可比转置可能会有不稳定的运动,从而导致不良的姿态,尤其是在末端受动器位置与目标之间有显著差异的情况下更明显。此外,转置近似没有考虑关节变量的相对贡献,也不支持约束维度之间的严格优先级。还需要注意的是,由于直接运动学模型的非线性原因, 应该很小,否则,可能出现波动和不连续。
在《游戏编程精粹4》2.6 应用于反向运动的雅可比转置方法 中也提到了该方法。
4.2.1.2 雅可比矩阵伪逆(Jacobian pseudo-inverse)
雅可比矩阵的伪逆,也称为雅可比矩阵的Moore-Penrose逆,设 ,其中 为 矩阵,称为 的伪逆。伪逆的主要优点是它适用于所有的矩阵 ,即使是那些不是方阵或者不是满秩矩阵。伪逆具有这样的性质:矩阵 在 的零空间上进行投影。雅可比矩阵伪逆的计算方法: 。
当 不是满秩时,另一个估计伪逆的公式给出。一些作者已经使用零空间方法来帮助避免奇异构型。此外,使用雅可比矩阵伪逆可以来解决两足人类的运动问题。然而,雅可比矩阵伪逆也不是没有缺点;如:当链的位形接近奇异点时,伪逆方法会导致关节角度的变化非常大,而到目标的运动可能非常小,从而导致运动中的波动和不连续性。
4.2.1.2 阻尼最小平方(Damped least squares)
雅可比的另一种变化是阻尼最小二乘(DLS)方法,也被称为Levenberg-Marquardt算法。使用DLS可以让 稳定,避免伪逆方法存在的奇异性问题。DLS解可以表示为 ,其中 是一个非零阻尼常数。为了使上述式子数值稳定,阻尼常数必须谨慎选择。DLS比伪逆和转置方法更好。然而,它的优越性能取决于阻尼常数 。大的阻尼常数使得 解在奇异点附近表现良好,但同时也降低了收敛速度,降低了跟踪目标的精度,并产生波动。
4.2.1.3 奇异值分解(Singular value decomposition)
奇异点的存在使雅可比矩阵的反演过程相当复杂。为此,奇异值分解(SVD)被提出作为雅可比方法的另一种变体,它利用伪逆矩阵。SVD特别有用,因为它为矩阵的基本子空间提供了标准正交基。形式上, 的雅可比矩阵的奇异值分解 是式子 的因式分解, 是一个 酉正交矩阵, 是一个 的对角线上有非负实数的矩形对角矩阵, ( 的转置)是一个 酉正交矩阵。D矩阵 的对角项称为 的奇异值。注意, 可以是0,而 的秩等于使 = 0的 的最大值。雅可比伪逆可以用SVD表示为 。其中,伪逆 由 表示。
还有奇异值滤波(SVF)方法,该方法是对雅可比矩阵进行滤波的另一种方法,使其始终是满秩矩阵;新的替代伪逆具有lower-bounded奇异值,当奇异值远离0时趋于 。
4.2.1.4 阻尼最小二乘伪逆(Pseudo-inverse damped least squares)
伪逆DLS方法是DLS方法的扩展,在DLS方法下使用SVD。因此,它可以表示为 。
伪逆DLS方法在奇异点附近的表现与简单伪逆方法相似,但在奇异点附近的表现较为平滑。更具体地说,这两种方法的雅可比矩阵都由表达式 求逆。但在伪逆DLS情况下, ,而在简单的伪逆方法中, ,当 趋近于0时, 不稳定。
4.2.1.5 选择性阻尼最小二乘(Selectively damped least squares)
选择性SDLS方法是伪逆DLS方法的扩展。SDLS根据达到目标位置的难度,对雅可比矩阵奇异值分解的每个奇异向量分别调整阻尼因子。SDLS的阻尼常数不仅与多体关节的当前构型有关,还与末端受动器与目标位置的相对位置有关。SDLS需要更少的迭代来收敛,不需要特别的阻尼常数,并返回在缺乏波动方面的最佳结果。该方法的性能优于其他任何一种反雅可比矩阵方法,但其缺点是由于奇异值分解的计算,其计算成本较高(在所有雅可比矩阵方法中性能时间最慢)。
一个被用来计算拟人化机器人手的IK的扩展的SDLS方法被提出。通过只计算相关的最小奇异值和相应的向量来降低原方法的高昂代价,这是由于计算扩展雅可比矩阵的奇异值分解而产生的。并且为每个估计的奇异值关联一个特定的阻尼因子,并使用Cholesky分解计算关节角。
4.2.1.6 其他雅可比矩阵解决方案
方案如下所示:
- 使用Gauss-Seidel算法来解决角色IK问题:构造一个线性方程组形式的雅可比矩阵
,并利用Gauss-Seidel迭代法估计了未知的 ; ,其中加入阻尼值 以防止奇异性,使最终的方法更加稳定和鲁棒。
- 使用"半雅可比矩阵"替代完整的雅可比矩阵解,从而降低了应用IK时的计算成本。
- 扩展雅可比矩阵技术,在雅可比矩阵上增加了额外的行。
- 计算一阶雅可比矩阵,该矩阵将关节速度映射为任务空间速度,并将其反转,将误差映射为关节状态更新。
- 通过整合质量分布信息来控制关节的重心位置,从而扩大了IK的范围。
- 大多数数值方法可以通过适当实施特定约束的优先级来进一步加强。考虑到人的结构高度冗余,可能会导致多个任务之间的冲突,通用的多优先级DLS框架被提出,以避免任务之间的这种冲突。如:
- 基于雅可比伪逆的在线运动重定向(OMR)方法,使用两个级别的优先级来控制人形机器人的姿态,并处理多个末端受动器。
- 使用增强雅可比矩阵来解决具有优先级的IK问题(同样是两级),后来该方案在一种称为优先级IK (PIK)的方案中进行了扩展,以处理full-body操作。PIK允许将约束与优先级相关联,以便先强制重要属性。基于任务的雅可比矩阵及其零空间投影算子能够处理具有多优先级和高度冗余结构的运动学问题。然而,雅可比矩阵的简单逆没有考虑如:关节范围、速度和加速度限制等约束。
- feedback IK(FIK)方法,该方法从控制的角度解决IK问题,使所需速度和实际笛卡尔速度之间的差异最小化。在feedback循环中,通过控制灵敏度函数得到所需的关节参数。该算法作为一个滤波器,不需要矩阵操作(如逆)。奇异点的处理不需要阻尼因子,这使得它比基于伪逆的方法计算效率更高。作者还描述了如何应用操纵器约束,将关节和末端受动器加权为一组更可行的姿势。与其他基于雅可比矩阵的算法一样,它可以轻松地处理带有多个末端受动器的问题。
4.2.1.7 合并约束(Incorporating constraints)
在雅可比矩阵族方法中实现约束,以提高性能并增加重建位姿的真实感,并不简单。多年来已经为处理关节限制做出了一些努力。如:
- 将无约束解简单投影到可行位姿上的方法。然而,这并不能保证结果会接近一个最优的解决方案。
- 基于惩罚的增加移动限制的方法,缺点是这种方法通常会收敛到较差的结果。
- 其他一些在关节约束下控制运动链的常用方法有任务优先级法和雅可比矩阵的零空间投影法。
- 在机器人领域,SNS(零点空间饱和)和IKTC (带任务校正的IK)方法被提出。在使用最小范数解时,这些方法通常会放弃使用超出其运动边界的关节,将其重新引入到合适的零空间中。
合并约束的最简单方法是通过加权单个关节的运动来实现。使用 方程来预测在配置姿势时自由度变化的能力,其中W是一个权重向量,值介于0和1之间。最后通过修改update scheme加入一种迭代投影技术(称为projected Gauss–Seidel),从而引入关节限制;角度的边界限制是通过clamping强制执行的。
应用
UE4.26中FullBodyIK采用的是基于雅可比矩阵。FullBodyIk是基于ControlRig的一个插件。配置起来好多参数.......
4.2.2 牛顿法
使用基于Hessian矩阵计算或使用基于函数梯度值的近似Hessian方法计算。
特点:不会遇到求雅可比矩阵时的奇异性问题,但复杂、难以实现、高计算成本的每次迭代。计算机建模和动画工具常使用牛顿法解决非线性运动学方程。
这里不再详细介绍.....
4.2.3 启发式法
启发式算法子家族实现了解决IK问题的简单方法,而不使用复杂的方程和计算。这些算法通常由简单的操作组成,以一种迭代的方式,逐渐推出IK解决方案。启发式IK算法具有较低的计算成本,因此通常很快就能得到最终的姿态,并且非常适合于简单的问题,特别是对于非人体测量骨骼(如蜘蛛、昆虫)。它们的主要局限之一是,即使满足了所有的关节约束,它们也会产生非自然或生物力学上不可行的动作和手势。启发式解算器不考虑附近关节之间的时空修正,因为它们独立地处理每个关节的约束,而不考虑全局约束。下面的小节将介绍并讨论最流行的启发式IK解算器,以及克服当前局限性的方法。
4.2.3.1 Cyclic coordinate descent(循环坐标推演)
原理:一次转换一个关节变量来最小化位置和姿态误差。
个关节位置与末端受动器和目标对齐;从末端受动器开始,向内侧移动,对每个关节角进行变换,使链条的最后一根骨头更接近目标。设运动链由n个关节组成,其中 为根关节, 为末端受动器, 为目标位置。首先,求由目标位置、 和末端受动器定义的角 。然后,通过旋转 更新末端受动器的位置,使 设为零。类似地,求由目标位置、 和末端受动器定义的角度 ,并更新 和 位置使 为零。当所有关节都更新时,迭代就完成了。重复这一过程,直到末端受动器满意地接近目标位置。
解释:CCD的实现非常简单,只需要点积和叉积;因此,每次迭代的计算成本较低。它提供了一个数值稳定的解,并且在自由度的数量上具有线性时间的复杂度。CCD可以很容易地扩展到包括局部约束,如允许的角度变换在每一步都有上下限。根据定义,CCD只处理串行链,在这个方向上,也有一种处理树形关节结构和多个末端受动器的扩展。所提出的多链方法可连续应用于多个关节链;它将关节结构分成更小的串联链,并对每个链独立处理。类似的,建议将骨架划分子类别,然后分层迭代地应用CCD。
CCD存在的问题:
- 它的运动分布不佳,它倾向于过分强调靠近末端受动器的关节的运动,这可能会导致姿势不自然。
- CCD可能产生大角度旋转,经常产生不稳定的不连续性和振荡运动。
- 在某些情况下,特别是当目标位于接近base时,它会导致链条形成一个环,在到达目标之前滚动和展开自己。同样,对于特定的目标位置(特别是要求较高精度时),算法会进行大量的迭代,导致末端受动器运动缓慢。
IBK:通常情况下,即使加入了约束条件,也可能产生不现实的姿势,特别是在高度清晰的角色中,因为很难执行全局操纵限制。在这种方式下,逆分支运动学(IBK)的CCD的变化出现,旨在通过分配一个连续的旋转范围来控制预定义的全局过渡成本阈值,来处理非自然姿态的产生。此外,在每次迭代中引入一个偏置因子,以便在每次迭代中对旋转进行校正。还有,可以通过增加一个反馈常数(末端受动器与目标之间的距离)来改善CCD的收敛性,该反馈常数随后与欠阻尼因子相乘,以产生更接近目标的更小的值。不过,这只允许在必须完成给定任务的关节链中移动。
变化和扩展:CCD算法还有很多的变化和扩展来提高其性能。例如:
- the circular alignment algorithm(CAA) 将给定的关节链沿base与目标位置之间的圆弧放置。因此,可以确保有一个可用的解决方案,并且不存在链本身交叉的可能性(CCD中的一个常见问题)。然而,CAA要求所有链都具有相同的长度,并且只在包含运动链base和目标的二维平面上工作。
- inductive IK(IIK)算法是CCD的另一种扩展。它使用一个uniform posture map(UPM)来控制一个类人的3D角色的姿势,同时学习算法防止产生无效的输出神经元。IIK算法形成包含每个输出神经元FK值的正运动学表,并搜索离期望位置最近的FK点,以获得更自然的姿态
应用
UE4.26中的FAnimNode_CCDIK和上面的思想步骤一样,这里不再过多阐述。
一次推演步骤:
还有《游戏编程精粹3》2.5 受限的逆运动学提到,限制角速度来生成真实效果动作。
4.2.3.2 Forward and backward reaching inverse kinematics(前向和后向到达IK)
思想:类似于用于绳索模拟的跟随领先(FTL)算法,该算法不使用角度旋转,而是将关节沿直线的新位置更新到下一个关节。然而,与只进行一次迭代的FTL不同,FABRIK采用的是向前和向后的迭代模式,每次都最小化目标与末端受动器之间的距离。
实现:设运动链由n个关节组成,其中 为根关节, 为末端受动器, 为目标位置。每对关节之间的距离记为 ,i = 1,…,n-1。在前向阶段,该算法从末端受动器估计每个关节的位置,从末端受动器 开始,向内移动到manipulator base 。末端受动器的新位置被指定为目标位置 。然后,线 是 和 两点之间的连线,将 放到位于这条线上的距离 的距离是 的位置上。同样,线 是 和 两点之间的连线,将 设置为距离 的距离是 的位置上。算法继续执行,直到所有关节位置 ,…, 都被更新。在算法的后一阶段,重复同样的过程,但这一次从the manipulator's base向后移动到末端受动器,这完成了一个完整的迭代。然后重复上述过程,根据需要进行多次迭代,直到末端受动器完全相同或足够接近预期目标。当目标在可及范围内时,FABRIK总是收敛到任何给定的目标位置。
优点:FABRIK的主要优点是简单性,容易适配不同的问题的灵活性,低计算成本和处理闭环或多个末端受动器问题的有效性。后者可以通过将算法划分为更小的sub-sections,并使用sub-bases作为intermediate stops来实现。FABRIK还支持大多数人体测量和机器人关节约束,通过重新定位和重新定向目标,使其在允许的范围内。FABRIK到达目标非常快速,即使误差容忍值为零也能收敛到目标,并且在奇点附近很好地平衡。FABRIK的另一个特点是,与CCD过分强调接近末端受动器的运动不同,它将运动分布到所有关节。
扩展FABRIK的方法,比如:
- 从能量转移的角度来解决IK问题:使用mass-spring模型,通过使弹簧中守恒的力能最小化来调整关节位置。
- 处理目标优先级,通过调整初始算法来处理含有两个以上节段的关节。
- 采用具有优先级的分层顺序方式的FABRIK算法的约束版本来控制类人模型的运动。
- 热启动前使用data-driven的FABRIK来生成更自然的人体姿势。扩展FABRIK处理无碰撞的任务。
FABRIK在 position space而不是orientation space中解决IK问题,而关节朝向则在一个单独的步骤中处理(这也增加了额外的复杂度)。因此,在方向约束下,其连续性较小。特别是当运动链尺寸较小且接近末端受动器的关节有严格约束时,算法的约束版本会出现死锁情况。在这种情况下,FABRIK无法找到解决方案,因为运动链的弯曲程度不足以达到目标。这是每个关节独立处理的的算法结构导致的。在算法的每一步中,目标位置都在圆锥截面表面局部投影并重新定向。因此,为了在可能的情况下推动运动链在当前关节中进一步弯曲,该算法不考虑对前(父)关节或后(子)关节的限制。作者使用随机扰动技术来处理死锁情况,将父关节推至其极限,允许子关节有更多的弯曲。此外,与CCD类似,FABRIK也遇到了无法整合满足附近关节之间时空相关性的全局模型约束的问题。
应用
UE4.26中的FAnimNode_Fabrik和上面的思想步骤一样。
4.3 数值驱动法
主要应用在动作捕捉(motion capture)技术中。数据驱动方法背后的主要思想是使用预先学习的姿势将末端受动器的位置与从数据库中学习到的可行姿势相匹配。在机器人领域中,这通常通过基于神经网络和人工智能的方法来完成。
现有的IK学习方法可以分为两类:基于误差的方法(the error-based methods)和基于实例的方法(the example-based methods)。基于误差的方法改进了用于到达目标位置的IK估量,而基于实例的方法使用实例配置来学习IK估量。计算机图形学中最常见的策略是基于实例的,即基于预先记录的动作数据库重建姿势。在这个方向上,可以通过一种插入实例运动和位置方法来完成给定的人体任务。每个实例姿势都由特定骨骼的位置参数化,并根据期望位置的参数,使用径向基函数混合几个姿势。
数据驱动法通常用于确定从一组可行的解决方案中选择自然运动。它们的效率通常取决于数据库的大小。基于实例的方法需要一个离线的训练过程,并且结果与训练数据高度相关。因此,数据驱动的IK解算器通常会出现姿态的不连续性;如果期望姿势与数据库中的姿势相差太远,那么结果可能在时间上是不连贯的。这里,可以使用一些特征参数来确保姿势平滑过渡,之后构建kd-tree,用于快速选择运动。
这里,可以看Motion Matching技术和Learned Motion Matching技术。
4.4 混合法
为了降低优化问题的复杂性,可以将IK问题分解为解析部分和数值部分。
4.4.1 统计方法
序贯蒙特卡罗方法(SMCM,人工智能方向)也被用于求解IK问题。通过采用采样方法,用FK算法求解IK问题,因此避免了逆矩阵的计算。该问题被视为隐马尔可夫模型(HMM),其隐式状态由定义关节图形的所有参数给出。状态空间由关节图形的所有可能的构型组成,然后在过滤框架中重新制定逆运动学。SMCM IK解算器不需要显式数值反演,并且可以以直观的方式将关节约束添加到系统中。这些可以很容易地实现,而不需要复杂的优化算法。
Particle IK使用一个身体姿势目标集,并试图通过在角色身体上形成一个约束系统来满足目标。在雅可比矩阵框架内使用概率密度函数(PDF)作为软约束来控制关节的自由度,以确保局部关节空间中运动的平滑性和连贯性。
4.4.2 并行计算
parallel IK算法允许求解具有多个约束的复杂关节体问题。比如:依赖于雅可比逆矩阵的多次数值估计的计算;将内部DLS步骤映射到数据并行GPU架构来扩展DLS方法以利用最大并行度;变化SDLS方法,关节参数从存储在八叉树中的动捕数据中自动学习,以便快速访问。给定末端受动器轨迹,通过对关节信息的并行过滤实现平滑动画,允许动态学习约束并减少所需的计算时间。
4.4.3 连续的逆运动学
SIK(Sequential inverse kinematics)是一种解析迭代的IK方法,可以实时重建人体的三维全身运动。该方法的输入是末端受动器的位置,如手腕、脚踝、头部和骨盆,然后使用这些受动器寻找人体姿势。
SIK的主要思想是用简单的解析IK算法在身体不同部位按特定顺序依次求解重建。SIK使用混合IK方法从spine的配置开始,该方法使用root和head的位置;然后,利用spine和已知的末端受动器位置确定clavicles的位置和方向;最后,利用已知的末端受动器位置,结合解析IK方法来定位每个limb的位置和方向。除此之外,使用生物力学(见下一节)来约束关节和防止产生不自然的运动,以确保视觉上人体姿势合理。
4.5 生物力学约束(Biomechanical constraints)
在冗余系统中,寻求IK解决方案时,结合关节约束来选择满足用户/模型约束的解决方案是必要的。有很多关节和模型约束已经被提出。
- 第一组约束基于高级控制,如位置、方向、特定视觉和平衡。
- 第二组约束,目标由用户定义或依赖于环境,如在交互任务(地板、到达、抓取)中或在碰撞避免中。同时执行多项任务可能会导致目标冲突,所以IK结算器可以使用优先级或加权方法来控制,然后在不同的情况下找到不同的解决方案。
关节由位置和方向定义,在普通情况下,它有3个自由度。关节允许连接在一起的两个肢体之间进行相对运动。人体测量关节也有多种,比如:球窝、铰链等。大多数现有的结构模型使用的技术是限制关节的旋转和平移限制。通过限制关节运动,可以保持运动在可行的范围内,以防止出现不现实、非自然的运动。
即使考虑到关节的极限,仍然可能得到非自然的姿势。还需要下面的方案来保证动作自然性:
- 由于IK不能直接解决动力学约束,如弹道运动中的动量守恒问题,所以人们进行了很多努力。使用基于物理的角色动画来为IK结算器提供一个更自然的运动,保持在一个可行的运动集里。物理相关的技术有很多,比如:利用动量和惯性来改善动画平衡;利用某些动态物理特性,如质心和角动量,来改善不现实的运动;使用动量和力约束;通过控制质量中心和角色惯性张量的大小,在特定的动态活动中尊重物理。
- 以肌肉为基础的控制方法。
- 结合数据驱动的方法。代价是训练学习大量复杂和动态的动作,这是很耗时的。
4.6 物理模拟
UE5采用全新的解算器,性能得到改进,求值速度也更快,并能提供确定性的姿势。UE5引用的是最新的基于XPBD的刚体模拟论文。
sincezxl大佬的文章写得很详细了,请移步UE5 FullBodyIK学习~
5 讨论
IK起源于机器人技术,其目的是确定将机器人的每个末端受动器移动到期望位置的关节参数。然而,在计算机图形学和游戏编程中,它被引入来处理完全不同的问题,包括有效地为3D关节主体设置动画、将游戏角色与世界连接起来、让虚拟角色完成特定的任务(避障,运动合成,运动重定向,接触约束等)。在本节中,我们将讨论众多IK解算器的性能,并建议哪种解算器最适合解决特定问题,例如:类人或非拟人化角色、实时交互、多链问题等。讨论将评估解算器在可扩展性、计算成本以及所产生运动的平滑度等方面的性能,还有他们的局限性。 最后,我们提出了未来的研究方向,包括IK使用和性能的潜在发展。
IK解算器的选择主要取决于问题的定义和特性,并包括几个参数,如计算成本(性能速度,如对于实时交互应用程序)、期望的最终姿态的平滑(取决于应用程序,如人类、动物或机器人)、可扩展性(例如,需要易于扩展到不同的模型并支持多个末端受动器)以及应用优先级、关节和模型限制的可能性。例如,解析法解算器最适合于简单的 IK 问题,而迭代方法更通用,但由于系统的非线性,需要多个步骤向解收敛。在生物力学定律、优先级和加权约束很重要的情况下,雅可比方法可能是一个不错的选择,而如果计算成本比较重要,则启发式方法更具吸引力。下面的小节将讨论每种方法对特定应用程序的性能,并建议哪种方法更适合不同的任务。
5.1 类人角色(Human-like characters)
类人角色是计算机图形学中最常用的模型。一般来说,这种特征由大量的关节(至少 24 个)组成,这些关节受到生物力学和生理学的限制,最多有 70个DoFs。人们已经提出了许多解决方案来处理人类运动的high articulation。
雅可比矩阵方法:用于类人动画的第一方法是基于雅可比矩阵的方法。雅可比矩阵方法可以轻松处理人体骨骼的high articulation,但它们通常会产生不连续的抖动和不平稳的运动,尤其是当线性近似的clamping允许目标和末端受动器之间有较大的步幅时,或者当四肢接近单一姿势。减小clamping步骤的振幅提高了它们的稳定性,但代价是较高的计算时间。总而言之,在没有急速收敛的情况下跟踪目标所需的时间是有限制的;例如,DLS和SDLS方法在抖动和奇异性问题方面表现良好,但计算量大,因此在控制或与类人角色交互方面不太受欢迎。
启发式法:在启发式迭代方法中,通过跟踪附加在特定位置(如末端受动器)的多个控制点来为类人角色设置动画。启发式方法的问题是在确保附近关节之间的时空相关性得到满足方面的能力有限。即使应用了关节约束,并非所有生成的姿势都符合自然人体运动的生理约束。这主要是由于启发式方法在每次迭代时局部应用约束,每个关节都是独立处理的,不提供整合全局约束的可能性。从全局角度处理不自然姿势产生的一种方法是将骨架划分为sub-chains,并根据优先级按层次和顺序工作,以及研究关节之间的时间相关性,然后允许通过拉力进一步控制运动。
混合方法:在层次结构模型中结合数值和解析技术的混合方法可用于需要低计算成本和寻求约束良好的类人模型的任务。CCD和混合方法(SIK)在计算上比其他方法更有效,而在重建质量方面,SIK方法在评估中使用的方法中给出了最好的结果。然而,即使对于定义明确的模型,也很难理解如何应用全局限制(如基于物理或生理的限制)。因此,不能保证解算器返回的解会在一组可行的人类自然运动范围内。
数值驱动法:当前控制和动画类人角色的趋势是使用data-driven的学习或深度学习方法。学习方法选择从数据库获得的满足给定约束的最接近的候选姿势;它们的优点是不需要将约束集成到解算器中,因为重建的姿势仅与可行的姿势匹配。这确保了生成的姿势是自然的,并满足人体骨骼的解剖和生理约束。然而,数据驱动的方法需要一个离线学习阶段,结果的质量取决于所使用的运动数据库的大小。在真实姿势与存储的姿势范围不同的情况下,可能会产生异常解决方案。在数据库中建立大量可用的motion clips克服了这个问题,但从可用的姿势中选择最合适的姿势并非易事。还有许多其他因素会影响数据驱动方法的性能,例如确保时间一致性和所选姿态之间平滑过渡的机制。此外,不能保证从匹配的姿势中检索到的最佳候选不包含由于错误捕获而导致的错误。另一方面,深度学习方法可以处理错误问题;他们使用预先捕获的运动,通过卷积学习运动流形,平滑误差,从而重建自然和合理的运动。然而,与学习方法类似,学习CNN模型非常耗时,所产生运动的质量与用于训练的数据量相关。当通过卷积过程平滑运动时,它会插入运动的精细细节。尽管如此,学习和深度学习方法似乎都是目前最流行的方法之一,用于控制人体姿势和从稀疏数据中重建运动以及为高度关节化的人体部位(例如手)设置动画。
即使在处理类人角色时,数据驱动的方法也并不总是合适的。在某些情况下,导演希望他们的角色拥有卡通形象和行为或拥有超级英雄的能力。无法大规模捕获此类运动,来建立一个方便的运动库以用于检索所需的姿势。在这种情况下,有必要通过定义以分层和顺序方式运行的良好约束的混合解决方案来替代方法。此外,数据驱动的方法在计算上不够高效,无法实现实时交互。
5.2 非拟人化的角色或物体( Non-anthropomorphic characters or objects)
非拟人化角色包含难以与人类数据匹配的关节(例如蛇、昆虫、多腿动物、龙),以及允许某种程度关节的其他物体(例如绳索)。创建包含每个生物或物体的所有可行动作的大型数据库是极其困难的;在某些情况下,捕捉对象(例如昆虫)具有挑战性,或者自然界中没有类似的真实生物(例如卡通中的虚拟人物)。这也适用于具有额外关节部分(例如尾巴)的虚拟类人生物。因此,在这些情况下,数据驱动的方法似乎不太方便。
处理非拟人对象的最佳方法是针对具体问题集成最合适的方法;根据运动链的特性,可以对不同的关节进行不同的处理。在适用的情况下,可以将问题分成几部分,并以分层和顺序的方式应用最合适的方法。可以调整混合方法以处理卡通和怪物般的角色。另一方面,启发式方法在更简单的问题中提供平滑的运动。例如,由于FABRIK计算效率高、足够灵活以适应不同的模型,并且能够控制多个末端受动器,因此它似乎是实时动画具有有限约束或无约束的单个运动链(例如尾巴)或具有多个末端受动器解算器(例如昆虫)的运动链。 CCD由于其效率也非常适用于单运动链,但是它的运动分布较差,链条在到达目标之前的rolling和unrolling会导致姿势不自然。Jacobian方法也可以有效地为单个和多个末端受动器设置动画,然而它们通常收敛缓慢,因为它们使用小步长的线性近似(改变步长可能会导致不希望的抖动和不连续性)。SVD-DLS 中使用的近似收敛速度略快于其雅可比矩阵,但雅可比矩阵转置和SDLS返回最平滑的运动。
对于非人体特征的自然动画和运动的制作,模型的骨骼设计和IK选择应考虑到生物的形态和肌肉骨骼结构。有很多论文处理这种复杂生物的动画,如双足动物、四足动物、昆虫 或给定关节生物的游泳行为,它们主要是通过结合基于物理的雅可比IK解算器来设计的。对于多关节组成的更复杂的结构,建议使用混合法。
对于非拟人化角色来说,可扩展性和对多个末端受动器的处理也是很重要的因素。可扩展性通常通过系统的通用性以及可调整和定制以应对不同问题的能力来衡量;求解大型运动链问题所需的计算时间以及产生的精度,对这种评估起着重要的作用。具体来说,解析方法往往具有较差的可扩展性;当问题或使用的模型发生微小变化时需要完全重新设计解决方案。同样,即使data-driven的方法可以有效地缩小到分区,它们被放大或适应具有不同骨架结构的模型的能力也是有限的,并且高度依赖于训练数据。对于不同结构的模型,必须进行新的训练。另一方面,雅可比法和牛顿法可以很容易地适应不同运动链的问题,但收敛所需的时间会着关节和DoFs数量的增加而增加。同样,FABRIK很容易适应具有不同结构和多个末端受动器的模型;与性能和收敛速度低的CCD不同,FABRIK的计算时间在运动链增加时变化不大。最后,缩放混合方法可以被用于re-defining和re-adjusting模型的结构、优先级和层次结构,即使并不简单。
5.3 未来发展方向
Motion capture技术有一个限制是只能捕捉到逼真的动作,而导演有时希望角色具有非现实的外观和行为。在这种情况下,可以将IK技术用于部分身体运动合成,从而从现有运动中创建新动作。此外,它们可以结合起来有效地合成动作,避免常见的问题,如滑步和抖动。虽然动作捕捉是对3D动画而言的一个非常有用工具,但有时它并不能让导演对动画的细微之处进行足够的控制。例如,不可能为预先捕捉的动作添加更多表情。自动将捕捉到的动作转换成不同风格、行为、性别、年龄等角色的能力是一个需要进一步研究的重要方面;因此,需要改进 IK 算法,为导演提供更大程度的灵活性和控制动画风格变化的能力。
IK最重要的应用之一是实时骨骼重定向,这对于将从一个角色捕捉到的动作映射另一个具有不同比例(更高、更小、更长的腿等)的角色至关重要。由于骨骼结构和/或骨骼长度的差异,大多数重定向技术都会受到飞行、穿透和滑行的影响。此外,运动重定向必须确保满足接触约束。在这个方向上,有必要研究自动将经历复杂变形的骨架适应不同的输入网格的方法,自然地保留运动的本质并且没有抖动。他们还应该能够重新建立可能发生的约束违反。未来的研究方向应侧重于实现具有完全不同的关节约束(如两足到四足)、完全不同的骨骼结构、不同的身体比例、不同的运动和行为方式的骨骼之间的平滑过渡。另一种解决设计高效运动控制器的是深度学习,它只需要生物的机械结构,不需要其他先验信息。
还应该考虑结合更多解剖学和生理学约束的方法,旨在将最终姿势限制在一个可行的集合中并允许基于物理的动画。除了生物力学定律(例如完成任务所需的力和能量)之外,还需要进一步研究考虑肢体大小的微小变化(例如通过添加spring/mass模型),目的是在人体动画中添加额外的真实感。然而,还有一个问题是,在用户不感知变化的情况下,链可以扩大或缩小多少(保持人体解剖结构和约束)。
Komura通过利用最小肌肉力变化的标准解决了IK冗余;然而,肌肉、不同被动扭矩等的影响尚未得到充分研究。考虑到解剖学原理和肌肉骨骼模型,必须改进 IK 方法以处理人体、身体形状。最近关于骨骼肌和皮下脂肪生长的研究,揭示了需要应对的新挑战。肌肉和脂肪的建模需要计算和解剖的努力,以保持身体形状的适当变形;当肌肉和脂肪量发生变化时,不仅会影响体积和表面模型,还会影响人体的骨骼结构和运动方式。
6 其他
Dragon IK:为不同类型的动物提供IK,如:四足动物、两足动物
LockIk:脚锁定
Power IK:UE的一个插件,结合射线检测开发。应用场景如:将生物与不平的地形对齐、在运行时动态修改姿势。
基于预测的IK:参考UE4实现基于预测的FootIK
Final IK:unity插件
- Limb IK:专注于三段手和腿特征肢体类型。
- Biped IK:复制和增强Unity内置角色IK设置的行为,比如头部控制。
- Look At IK:可用于任何角色或其他骨骼层次结构,以旋转一组骨骼以面向目标。
- Aim IK:修改的CCDIK,设定目标,关节末端始终朝向目标,一般做头部的朝向。
拖延好久了......(*  ̄︿ ̄) 应用稍后补!
发布于2022年4月15日 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|