UE4_动画基础_根运动Root Motion

学习笔记,仅供参考!

在游戏动画中,角色的碰撞胶囊体(或其他形状)通常由控制器驱动通过场景。然后来自该胶囊体的数据用于驱动动画。例如,如果胶囊体在向前移动,系统就会知道在角色上播放一个跑步或行走的动画,让角色看起来是在靠自己的力量移动。但这种类型的运动并不始终适用于所有情况。在某些情况下,让复杂的动画实际驱动碰撞胶囊体(而非相反)是有道理的。这正是 根运动(Root Motion) 处理对游戏而言至关重要的原因之所在。

例如,假设玩家发起一次特殊攻击,在这种攻击中,模型已预先设定好向前冲的动作。如果所有的角色动作都是基于玩家胶囊体的,这样的动画会导致角色迈出胶囊体,从而在事实上失去碰撞。一旦动画播放结束,玩家就会滑回其碰撞位置(也就是胶囊体的位置)。这就会产生问题,因为胶囊体通常用作所有计算的中心。胶囊体外的角色将越过几何体,不会对其环境做出适当的反应。另外,在动画结束时滑回他们的胶囊体也并不现实。

对于那些刚刚接触这个概念的人来说,仅仅阅读说明未必能显然地明白合适根运动(Root Motion)的重要性。下面有一个角色正在执行一个预设定攻击动作,在这个攻击中,他们向前猛冲并砸下锤子。请注意,角色向前移动的动画不是在游戏中处理的 - 而是由动画艺术家以这种方式创建的。

其实通俗点讲就是动画驱动网格体向前运动,而胶囊体是游戏控制的,并没有向前运动,这样就导致网格体又回到了胶囊体的位置,动画并没有控制角色实例胶囊体的移动。

什么是根运动?

简单地说,根运动(Root Motion)是基于骨架根骨骼动画的角色运动。游戏中的大多数动画都是通过循环处理的,角色的根在循环中保持固定。然而,实际情况却并非始终如此,正如我们在上例中看到的那样。为了处理这个问题,我们需要将根的运动从角色中抽离,并将其应用到角色的胶囊体中。这就是UE4中根运动(Root Motion)的本质。

为了正确地使用根运动(Root Motion),必须注意角色的根骨骼(Root Bone)应该位于原点(0,0,0,无旋转),因为这样能使系统将物理移动(胶囊体)从动画移动(角色)中分离出来。

动画的根运动(Root Motion)可以在播放过程中可视化。只需打开任何根骨骼移动的动画,在视口中选择 显示 > 骨骼(Show > Bones) 即可。如果尚未在动画属性中选择 启用根运动(Enable Root Motion) ,当角色的根移动时,你会看到一条红线。这说明了动画的根运动(Root Motion)。

启用根运动(Root Motion)后,这条红线将消失。而角色将移动到位。这是因为,角色的根将不再从原始位置移动。在这个图像中,我们在角色上启用了根运动(Root Motion)。请注意,我们与上面的图像处于同一帧,但是角色的位置没有改变。

那么,这意味着什么?既然系统已经考虑到了角色动画的根运动(Root Motion),那么它就可以将同样的运动重新应用到角色的碰撞胶囊体。这意味着,它仍然可以完全按照动画师的期望运动,但它也可以对游戏中的碰撞以及其他物理和游戏进程事件做出正确的反应

启用根运动

你可以在 动画编辑器(Animation Editor) 中的 资源详细信息(Asset Details) 面板中为你的动画序列启用根运动(Root Motion)。

根运动(Root Motion)根据动画序列(Animation Sequence)处理,可以在动画序列(Animation Sequence)的 资源详细信息(Asset Details) 面板中开启和关闭。对于网络游戏,根运动(Root Motion)需要使用动画蒙太奇(Animation Montage),请参见下面的 仅来自蒙太奇的根运动。

在定义是否在动画序列(Animation Sequence)中启用根运动(Root Motion)时,你仍然需要确定如何在 动画蓝图中处理该序列。有几种不同的方法可以处理动画蓝图(Animation Blueprints)中的根运动(Root Motion)。你可以通过 动画蓝图编辑器(Anim Blueprint Editor) 的 详细信息(Details) 面板中的 根运动模式(Root Motion Mode) 下拉菜单定义方式。

来自每一项目的根运动

当这个选项被设置为根运动模式(Root Motion Mode)时,则会提取每个帮助构建最终角色姿势的动画资源(AnimSequence、Blendspace、AnimMontage等)的根运动(如果它已被设置为包含根运动(Root Motion))。每一部分的提取根运动(Root Motion)均根据构成该姿态之源资源的权重进行混合。

例如:

FromEverything.png

在上图中, Jog_Loop_Fwd_RM 和 Jog_Loop_Right_RM 的根运动(Root Motion)将以0.5的权重混合起来。在这种情况下,生成的动画是一个角色在地图上沿对角线向前和向右运行。

仅来自蒙太奇的根运动

该方法适用于网络游戏,这也是其功能受限的原因。由于 来自每一项目的根运动 被设计为不受限制,因此建议仅在不在网络上复制动画的游戏中使用此方法。

动作中的根运动

下面是不处理根运动(Root Motion)所导致问题的细分,以及根运动(Root Motion)对动画的益处。

无根运动

如果没有根运动(Root Motion),攻击动画(例如下面的这个)会将角色从他们的胶囊体中拉出。你可能还会注意到难看的弹回胶囊体位置。这是因为一旦动画播放完毕,角色控制器就会将角色拉回其原始位置。

为何胶囊体分离不良

在这种情况下,位移回弹问题不是唯一要克服的问题。由于角色正在离开碰撞形状,它将穿过世界场景对象,并打破整体的连续性。在此示例中,我们可以看到角色的攻击使他们首先穿过墙壁,然后又跳回。

利用根运动解决问题

一旦你的动画设置为利用根运动(Root Motion),那么动画师设置的运动将暂时成为胶囊体的驱动力。这让我们可以从动画的终点继续播放。可以看到,当我们第二次触发攻击时,我们从新的位置出发。当然,我们先转过身来,这样就不会偏离镜头。

根运动和物理状态

随着胶囊体的出现,这意味着物理碰撞仍然可以使用,并且我们解决了角色穿过墙壁的问题,同时也缓解了角色需要位移回弹到胶囊体位置的问题。在下图中,动画使用根运动(Root Motion),它同时带上了胶囊体,导致角色与墙壁相撞,而不是穿过墙壁。

你会注意到它不是很完美,因为角色的屈身动画会导致它有点穿过墙壁。然而,这可以很容易地通过处理墙壁或角色上的碰撞体积来管理。重要的是,胶囊体能跟上运动,防止角色一路穿过墙壁并在之后不得不弹回。

在根运动(Root Motion)期间,角色的物理状态将被加以考虑。例如,如果角色物理状态是行走或掉落,则忽略根运动(Root Motion)的Z轴,并应用重力。角色将掉落,下坡或上楼梯。如果角色物理状态是飞行,则应用完整的根运动(Root Motion),并忽略重力。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UE4_API_Reference 是一个非常宝贵的资源,它提供了 Unreal Engine 4 引擎的全部 API 详细文档。这些离线文档对开发者来说非常重要,因为它们可以在没有网络连接的情况下提供对 UE4 引擎的完整了解和查询支持。 UE4_API_Reference 全部离线文档包括了对 UE4 的各个模块、类、函数和属性的详细描述和用法示例。开发者可以通过这些文档深入了解各个功能模块的实现原理以及如何正确使用它们。这对于开发者学习 UE4 引擎以及进行游戏开发非常有帮助。 离线文档的好处在于可以在没有网络的环境中使用。开发者不需要依赖互联网来查找关于 UE4 API 的信息,而是可以直接在本地进行搜索和查询。这不仅提高了开发效率,还可以避免由于网络问题导致的信息获取困难。 UE4_API_Reference 全部离线文档的编制工作需要花费大量的时间和精力。文档中的每一个类、函数和属性都需要进行详细描述和示例演示,以便开发者能够更好地理解和使用。这就要求文档编写人员具备广泛的知识和丰富的经验,以确保文档的完整性和准确性。 总之,UE4_API_Reference 全部离线文档对于 UE4 开发者来说是一个非常宝贵的资源。它提供了对 UE4 引擎的全面了解和查询支持,可以帮助开发者更好地学习和使用 UE4 引擎进行游戏开发。同时,它也方便了开发者在没有网络连接的环境中进行开发工作,提高了开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Growthofnotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值