UE4_动画基础_根运动Root Motion

news2025/1/16 1:13:02

学习笔记,仅供参考!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#语法知识之循环语句

5、循环语句 文章目录 1、while思考1 斐波那契数列思考2 判断一个数是否为质数思考3 找出100以内的质数 2、do...while3、for思考1 找水仙花数思考2 乘法表 1、while 1、作用 让代码重复去执行 2、语法相关 while(bool类型值){//当满足条件时,就会执行while语句…

深度学习每周学习总结P5(运动鞋识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分2. 加载数据集3.模型构建部分3.1 模型构建3.2 公式推导 4. 设置超参…

深度强化学习开端——DQN算法求解车杆游戏

深度强化学习开端——DQN算法求解车杆游戏 DQN,即深度Q网络(Deep Q-Network),是一种结合了深度学习和强化学习的算法,其主要用于解决序列决策问题,并且在许多复杂的决策任务中展现出了显著的效果。DQN算法…

C++:map和set的使用

一、关联式容器介绍 在学习map和set之前,我们接触到的容器有:vector、list、stack、queue、priority_queue、array,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。 关联式容器也是用…

【JavaEE多线程】线程中断 interrupt()

系列文章目录 🌈座右铭🌈:人的一生这么长、你凭什么用短短的几年去衡量自己的一生! 💕个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️:清灵白羽 漾情天…

用FRP配置toml文件搭建内网穿透

需求场景 1、一台外网可访问的有固定ip的云服务器,Ubuntu系统 2、一台外网无法访问的无固定ip的本地家用电脑,Ubuntu系统 需求:将云服务器搭建为一台内网穿透服务器,实现通过外网访问家用电脑(网页)的功能。…

Unity 中(提示框Tweet)

using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Message : MonoBehaviour {public float dropDuration 0.5f; // 掉落持续时间public float persisterDuration 1f; // 持续显示时间public float dorpHeight;public static Message…

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀,伙伴们!你听说了吗?最近AWS托管了大热模型:Claude 3 Opus!想要一探究竟吗?那就赶紧来注册AWS账号吧!别担心,现在注册还免费呢!而且在AWS上还有更多的大…

macos知名的清理软件 cleanmymac和腾讯柠檬哪个好 cleanmymacx有必要买吗

MacOS是一款优秀的操作系统,但是随着使用时间的增加,它也会产生一些不必要的垃圾文件,占用磁盘空间和内存资源,影响系统的性能和稳定性。为了保持MacOS的清洁和高效,我们需要使用一些专业的清理软件来定期扫描和清除这…

DePIN 赛道黑马,peaq network 如何打造全新 Web3 物联网?

当 Web2 公司仍对用户数据和资料进行“中心化”的收集与控制时,我们虽享受到了物联网技术的便利,却依旧没有逃脱个人数据和价值所有权的剥夺。由此,Web3 技术开始深入物联网世界,智能家居、智能汽车、智能手机都成为重要发力点&am…

三大层次学习企业架构框架TOGAF

前言 对于一名架构师来讲,如果说编程语言是知识库层次中的入门石,那么企业架构框架则相当于知识库层次中的金字塔尖。如果想成长为企业级的架构师,企业架构框架是必须要攀登的高塔。 目前国内绝大多数企业采用TOGAF标准,因此我们…

XSS漏洞---类型+实战案例+防止

文章目录 目录 文章目录 一.XSS漏洞简介 二.XSS漏洞类型 三.实战案例 反射型XSS 存储型XSS 四.防护措施 一.XSS漏洞简介 XSS漏洞(Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者在受害者的浏览器中注入恶意脚本。当受…

记录一下flume中因为taildir_position.json因位置不对导致数据无法从kafka被采到hdfs上的问题

【背景说明】 我需要用flume将kafka上的数据采集到hdfs上,发现数据怎么到不了hdfs。 【问题排查】 1.kafka上已有相应的数据 2.我的flume配置文档(没问题), 3.时间拦截器(没问题), 4.JSONObje…

IDEA开启自动导包,自动删包

找到file----------->Settings选项 找到Editor-------->General------------>Auto Import选项 勾选两个选项,在点击Apply,在点击ok 最后就ok了

记录——FPGA的学习路线

文章目录 一、前言二、编程语言2.1 书籍2.2 刷题网站2.3 仿真工具 三、基础知识3.1 专业基础课3.2 fpga相关专业知识 四、开发工具五、动手实验 一、前言 也不是心血来潮想学习fpga了,而是祥哥还有我一个国科大的同学都在往fpga这个方向走 并且看过我之前文章的同…

基于SSH的通讯录管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSH的通讯录管理系统拥有两种角色:管理员和用户 管理员:用户管理、公告管理、系别管理、班级管理、通讯信息管理等 用户:拥有管理员中的查看功能…

数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

Vast+产品展厅 | Vastbase G100数据库是什么架构?(1)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库。 了解Vastbase G100的架构,可以帮助您确保数据库系统的高效、可靠和安全运行。 “Vast产品展厅”将分两期,为您详细讲解Vastbas…

创新指南|利用 AI 工具转变您的内容策略

内容策略涉及规划、创建和管理内容。无论您是在策划博客文章、社交媒体更新还是网站内容,精心制定的内容策略是营销活动成功的关键。然而,如果没有合适的工具,维持强大的内容策略可能会具有挑战性。这就是人工智能(AI) 工具发挥作用的地方&am…

微信小程序四(全局配置和页面配置页面跳转)

全局配置: 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置:最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…