IK设置

逆向运动学系统允许反应式动画,如脚踩在非平面地形上。

Windows
MacOS
Linux

IKWithWithout.png

在左边,角色没有使用IK设置。在中间,IK用来让脚踩在小碰撞物上。在右边,IK用于使角色的拳击动画在击中移动块时停止。

逆向运动学(Inverse Kinematics)IK)提供一种从末端执行器的位置处理关节旋转的方法,而不是通过直接关节旋转。在实践中,您提供一个执行器的位置,然后IK解决方案解决旋转,使最终的关节尽可能与该位置重合。这可以用来让角色的脚停留在不平坦的地面上,并以其他方式与世界场景产生可信的互动。

虚幻引擎使用双骨骼IK系统,这对手臂和腿来说是一个完美的系统。

有关手脚IK的例子,您也可以参考第1.8节下的动画内容示例页面。

IK与FK

如果您已经熟悉IK是什么以及它是如何工作的,那么您可以跳过这一部分!

在虚幻引擎中,大多数动画骨架都是由直接旋转数据驱动,这些数据直接输入到角色的骨骼或骨架网格体中。这可以被视为是正向运动学,或旋转直接应用于关节或骨骼。下图说明了这个概念:

diagram_FK.png

顾名思义,逆向运动学的方向是相反的。我们不是对骨骼进行旋转,而是给骨骼链一个目标(也称末端执行器),提供骨骼链末端应该尝试达到的位置。用户或动画师移动执行器,IK解算器(IK系统中驱动旋转的算法)旋转骨骼,使链中的最终骨骼在目标位置结束。在下图中,末端执行器由红十字指定。

diagramIK.png

在UE4中,IK可以用来覆盖和增强现有的动画,使角色或骨架网格体的运动看起来对其环境更具反应性。

设置IK

有很多方法可以将IK用于您的角色,从把脚或爪子踩在地面上到让角色看起来可以抓住移动的物体。出于本文的目的,我们将介绍最常见的设置:将脚踩在不平坦的地面或楼梯上。

使用IK的一个更重要的注意事项是,它通常需要在几个不同的位置进行设置。从较高水平来看,这些设置为:

  1. 一些用于处理执行器位置的设置。这通常在Pawn或角色蓝图中完成。

  2. 动画蓝图事件图中的设置,以从Pawn或角色获取执行器位置。这将用于IK解算器。

  3. 双骨骼IK节点在角色的动画蓝图动画图表中的设置。

计划

就像所有的事情一样,制定一点计划会很有帮助。请确保您对您需要IK设置做的工作有确定的想法。是用于角色的脚吗?还是角色的手?它们会在需要做出反应的地方做什么?这些问题早期能回答得越多,设置就越容易。幸运的是,有了UE4的蓝图可视化脚本功能,以后添加功能就很容易了。

脚位置IK设置

对于第一个例子,我们将概述如何在角色上设置简单的IK,以帮助他们的脚保持固定在不平坦的地面上。

这个例子可以在内容示例项目中找到。只需打开名为Animation.umap的图,看一下示例1.8。

Pawn或角色蓝图设置

第一步将是设置Pawn或角色蓝图,以正确处理必要的数据。这基本上意味着我们需要从脚做一些追踪,这样我们就可以跟踪它们应该在何时会踩到一些障碍物。

请注意,在下面的示例中,添加一些变量只是为了简化蓝图中的线路连接,使它们在文档中看起来不那么混乱。这些变量将不存在于实际的内容示例项目中。

构造脚本

角色蓝图的构造脚本实际上只设置了两个关键的数据片段:

  1. 一个比例变量,用来表示角色的Z高度。

  2. IKTraceDistance变量,它用物理胶囊体的半高乘以比例。

单击图像查看大图或 右键单击 并按另存为(Save As)。

事件图

对于此设置,事件图主要负责处理追踪操作,追踪操作只是从角色的脚部向下投射,寻找某种障碍物。如果它发现了什么,它会存储距离,以便以后在动画蓝图中使用它来移动IK的执行器。

有关此图表的重要一点是使用了一个名为IKFoottrace的自定义函数。此函数接受距离和套接字名称,并将其作为追踪操作的基础。然后,它根据这些结果返回一个偏移值,这个偏移值稍后将用于偏移IK执行器的位置。

在这张图中,您可以看到IKFoottrace函数。单击图像查看大图或 右键单击 并按另存为(Save As)。

这是事件图。通过上面的函数,您可以看到,在这个实例中,它的主要工作就是执行对左右脚的追踪。

这是事件图的基本级别。单击图像查看大图或 右键单击 并按另存为(Save As)。

这样做的结果是,在游戏的每一秒中,都会有一个向下的追踪发生,以寻找一个冲击点,这个冲击点将指定要考虑的一些不平整地面。当找到时,到该点的距离存储为IK偏移量,以便稍后在动画蓝图中使用。

IKTrace.png

上图中,绿色菱形表示用作追踪起点的套接字的位置。红色箭头表示追踪本身。

动画蓝图设置

我们将看到的动画蓝图的第一个部分是事件图。一般来说,动画蓝图中的事件图的主要用途是从其他来源(如角色或Pawn蓝图)获取数据,然后将这些数据转换为动画图表中可以使用的变量更新。

事件图

在本例中,我们要做的第一件事是获取当前的Pawn,然后确保将其转换为基于Pawn的特定类,在这个类中我们完成所有的设置。这允许我们直接传达Pawn蓝图的特定实例,并读取存储在其变量中的数据。

利用Pawn蓝图中存储的IK偏移量数据,我们可以生成位置矢量,以供IK执行器稍后使用。

单击图像查看大图或 右键单击 并按另存为(Save As)。

动画图表

动画图表通过应用目前为止收集到的信息,并用于更新为角色创建的现有动画来完成我们的设置。本例中,动画图表非常简单,因为它实际上只播放一个动画。在大多数情况下,Play JumpingJacks(@@@)节点将被任意数量的其他节点替换,以生成所需的运动。

重要的部分是将当前空间从局部(Local)切换到组件(Component)。角色上播放的所有动画都是在局部空间中完成的。这是计算它的最快方法,因为局部变换是相对于层级中每个骨骼的父级的。然而,骨骼操纵,例如应用双骨骼IK,必须在相对于根骨骼的组件空间内进行。

因此,我们必须将数据从局部(Local)切换到组件(Component),这段时间刚好足够执行IK计算。同时,最终动画姿势(Final Animation Pose)节点只能接收局部空间数据,所以一旦应用了IK,我们就必须将其转换回来。

有关动画的坐标空间的更多信息,请参阅坐标空间术语

单击图像查看大图或 右键单击 并按另存为(Save As)。

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见