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),并忽略重力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1581.shtml

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

相关文章

Kivy Pyinstaller Windows 打包

各种报错 ImportErrorWhenRunningHook: Failed to import module __PyInstaller_hooks_0_kivy required by hook for module 三天美好时光啥也没干,就研究这个了。 打包成功,运行应用程序exe闪退的。终于打包成功了。 这所有的原因都是因为我爱你。如果…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器: 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器: 做22 机器的备胎 装nginx keepalived 99机器:做mysql的主 装mysqld 装node 装filebeat 77机器:做mysq…

谷歌Gemini 1.5 Pro国内怎么用?国内镜像来了

长期以来,许多人向我咨询是否存在一个稳定而高效的全球AI大模型测试平台,这个平台需要不仅真实可靠,而且能够提供稳定和快速的服务,不会频繁出现故障或响应缓慢的问题。然而,当我发现了AskManyAI时,我被其所…

蛋白质治病突变的计算方法(三)

3 用于识别致病突变的特征 文献中使用了几种特征来识别蛋白质中的致病突变。它们大致分为三类:(1)序列,(2)结构和(3)网络,以及它们的组合。图1说明了这三组中的一些重要属性。 图1 用于识别致病突变和热点的重要特征。 基于氨基酸序列的特性…

李宏毅2022机器学习/深度学习 个人笔记(3)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录代码效果不佳时应该怎么做 如下图所示: 接下来探讨,当optimization不佳的时候,如何判断是遇到了鞍点还是遇到了局部最小值点?可以通过多元函数的泰勒…

【大语言模型+Lora微调】10条对话微调Qwen-7B-Chat并进行推理 (聊天助手)

代码:https://github.com/QwenLM/Qwen/tree/main 国内源安装说明:https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary 通义千问:https://tongyi.aliyun.com/qianwen 一、环境搭建 下载源码 git clone https://github.com/QwenLM/Qwen…

是用computed获取vuex数据后,修改数据页面不响应的问题

问题描述: 代码里使用computed获取mapGetters的数据后,直接在页面使用,在methods中更新数据后,控制台打印数据已经更改,但是页面上的数据没有同步更改和响应。 分析: 1.computed是计算属性,所有…

【Linux 进程间通信】管道(三)

文章目录 1.管道的五种特征2.管道的四种情况 1.管道的五种特征 ①🍎匿名管道只能用于有血缘关系的进程之间进行通信(爷孙进程之间可以进行通信),常用于父子之间进行通信; ②🍎管道内部,自带进…

【数据结构】时间复杂度的例题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 前言: 这篇文章是关于时间复杂度的一些例题,关于时间复杂度和空间复杂度和算法的计算效率的基本知识点我放在…

Linux之C编程入门

目录 第1关:第一个C程序 任务描述 相关知识 编译C程序 编程要求 答案及其步骤: 第2关:Linux编译C程序 任务描述 相关知识 gcc编译器使用方法 编程要求 答案及其步骤: 第3关:Linux之静态库编写 任务描述 相关知识 生成…

【深度学习】Attention、Self-Attention、Multi-Head Attention

一、Attention 在CV领域,注意力机制通常分为通道注意力和空间注意力或者两者结合。 一张图像经backbone得到的特征通常包括多个通道,每个通道是一个像素矩阵,每个通道对任务的贡献不尽相同,单个通道的特征图中每个像素对任务的贡…

2W 3KVDC 隔离双输出 DC/DC 电源模块——TPD-2W 系列

TPD-2W系列提供双独立输出电压,并且两组电压可以不同,这样就节省一个电源模块,特别适合一块板上有多个不同电压要求的设计,而外形尺寸和TPA一样,工作温度范围广-40℃到 105℃。

LabVIEW连接postgre sql

一、安装ODBC 下载对应postgreSQL版本的ODBC 下载网址:http://ftp.postgresql.org/pub/odbc/versions/msi/ 下载好后默认安装就行,这样在ODBC数据源中才能找到。 二、配置系统DSN 实现要新建好要用的数据库,这里的用户名:postg…

new[]与delete[]

(要理解之前关于new,delete的一些概念,看​​​​​​ CSDN) 引子: 相比new,new[]不仅仅是个数的增加,还有int大小记录空间的创建, 下图中错误的用模拟多个new来替代new[],释放步…

9.MMD 基础内容总结及制作成品流程

前期准备 1. 导入场景和模型 在左上角菜单栏,显示里将编辑模型时保持相机和光照勾选上,有助于后期调色 将抗锯齿和各向异性过滤勾掉,可以节省资源,避免bug 在分辨率设定窗口,可以调整分辨率 3840x2160 4k分辨率 1…

【python】图形用户界面学习之tkinter

认识tkinter Tkinter是Python中内置的图形用户界面(GUI)库。它是Tk GUI工具包的接口,可以创建和管理窗口、按钮、标签、文本框等各种GUI组件,并与用户交互。 使用Tkinter,可以创建各种GUI应用程序,如桌面…

QT Webengine开发过程报错qml: Render process exited with code 159 (killed)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、解决方法二、补充说明总结 前言 基于QT的Webengine开发过程中,QT的官方示例quicknanobrowser也无法成功运行,程序运行后&#xff0…

git的学习

设置用户(目的在于可以在远端看到是谁提交了内容,更方便公司的管理) 1、设置全局用户(在家路径下创建用户,每个项目都用这一个用户)>: git config --global user.name manba >: git config --global …

使用Go语言和chromedp库下载Instagram图片:简易指南

摘要/导言 本文将介绍如何使用Go语言配合chromedp库来下载Instagram上的图片。我们将通过一个简单的示例来展示整个过程,包括如何设置爬虫代理IP以绕过网络限制。 背景/引言 在数据采集和自动化测试领域,Go语言以其出色的执行效率、简洁的语法和卓越的…

【科学研究】那些考进精英大学的农家子弟们

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…