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)。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback