UE5——动画混合(2)

news2024/11/22 17:02:57

一、引言

接上文《UE5——动画混合》,UE5还提供了 遮罩混合、惯性化两种混合,下面将讲述这两种动画混合方式

二、UE5上实现

1、遮罩混合

遮罩混合与《UE5——动画混合》中的 “骨骼的分层混合” 的运行逻辑其实是的一样的。相比起 “骨骼的分层混合”“遮罩混合” 的可控性、自定义化程度更高,可以细化到每一块骨骼的混合比重。如下图:

我们创建了一个名为 “装弹” 的混合遮罩,可以看到上半身的混合系数都是1,也就是100%混合,其余的骨骼混合系数为0(图片有限不展示了),表明下半身不进行混合。

ps.这里要注意,遮罩的概念是针对“骨骼”的,一开始在想的时候误入歧途将遮罩的概念误以为是针对“动画”,遮罩的概念应该是:针对该骨骼的所有动画混合的一系列系数的合集,因此不同骨骼之间的遮罩是不能共用的!
请添加图片描述

如下图,我们依旧采用“骨骼的分层混合”节点,将“run”动画和"装弹"动画进行混合,并在混合遮罩处选择我们刚刚创建的 “装弹”遮罩
请添加图片描述

最终我们可以得到和之前一样的效果(可以回过去看上一篇)
请添加图片描述

上述节点遮罩及节点参数最终的翻译即:
将run动画作为基础动画、装弹作为融合动画,进行100%(混合节点上的Blend Weight0 =1.0)混合,我们采用“装弹遮罩”作为混合系数,因此最终只有上半身执行了混合,由于两个系数都是1,即100%,因此最终的效果就是上半身完全采用装弹动作,下半身保持基础动画run动画。

2、混合描述

虽然UE文档里面将 “混合遮罩和混合描述” 放在一起,但实际上他们两个的含义是不一样的,下面分别讲述为什么他们放在一起及他们的区别

1、混合遮罩和混合描述的异同

相同之处:
1、都是对动画混合的一种描述;描述的对象都是针对骨骼
2、他们创建的方式都是一样的,在骨骼编辑器里面(如下图的“添加时间混合描述”、“添加权重混合描述”) 哈哈哈哈哈哈(强行一样!)

不同之处:
混合遮罩是 动画之间混合比例的描述;混合描述是 用于定义每个骨骼的混合速度
因此前者更倾向于对于产生一个新动作,而后者更倾向于对动画之间过渡时的描述
请添加图片描述
混合描述UE5提供了两种,即如上提供的混合描述“添加时间混合描述”、“添加权重混合描述”

2、时间混合描述

时间混合描述(Time Blend Profiles) 在混合时使用归一化的 (0 - 1) 因数乘以基本的混合值。数值 1.0 意味着以正常速度混合,数值越小混合越快。数值 0.0 代表瞬间混合。

还是依旧对上下半身进行区分,采用不同的系数来理解 “时间混合描述”,先采用
上半身:1
下半身:0.5
的系数混合
请添加图片描述

节点采用 “布尔混合姿势”,并在右边选择刚刚创建的描述

请添加图片描述
请添加图片描述

“时间混合描述” 系数使得腿部以两倍的速度进行混合。在 以布尔混合姿势 节点上使用,基本混合时间设为 1.0 秒,那么腿部只需要 0.5秒来完成混合。其余所有设为 1.0 的骨骼仍然需要基础的 1.0 秒。

上面这个能感觉到腿部有些不协调,实际上是因为腿部的混合比上半身快,导致这种效果。

下面分别用另外两组数据做对比
请添加图片描述
上图为:上半身1,下半身0
请添加图片描述
上图为:上半身1,下半身1。此时上下半身的不协调效果消失了。

3、权重混合描述

权重混合描述(Weight Blend Profiles) 在混合时相对基本混合值使用权重因子。数值 1.0 将会以正常速度混合,数值越大,混合速度越快。

这里同样采用 “布尔混合姿势”,上半身系数为1,下半身10,即原速、10倍速混合,可以看到,在动作切换的时候,下半身的跳跃在很短的时间内就进行完了转换!
请添加图片描述
请添加图片描述
请添加图片描述

将上下半身均调整为1,如下图,此时上下半身均是在2s才完成了彻底的混合
请添加图片描述
请添加图片描述

3、惯性化

1、惯性化原理

惯性混合(Inertial blending) 是传统动画淡入淡出的高性能替代方案,可生成后期处理的自然过渡。激活惯性混合后将不再计算源姿势。相反,传统混合在过渡期间会计算源姿势和目标姿势,将其组合成混合姿势。

惯性化 首次提出是在这个GDC上——Inertialization-High-Performance-Animation-Transitions,引用里面的一句话来说 “现实中我们的动作本就不是“混合”出来的,但是这些动作都具有惯性!”,或许这就是他们产生这个算法的起源。关于惯性化的推导过程可以详见《惯性插值-优异的动画过渡算法》,这篇文章将GDC中提到的惯性化原理拆分并且讲解的很细致了,
总结一句话就是:惯性插值的核心算法为: x ( t ) = A t 5 + B t 5 + C t 5 + D t 5 + E t 5 + F x(t)=At^5 + Bt^5 +Ct^5 +Dt^5 +Et^5 +F x(t)=At5+Bt5+Ct5+Dt5+Et5+F
我们要去除公式中的A、B、C、D、E、F并将式子转化为仅含x0(初始值)、v0(初始速度)、t1(惯性化持续的时间即整个过程的时间)、t(当前时间)的关系式

2、惯性化在UE5中的使用

请添加图片描述
请添加图片描述
请添加图片描述
图一为惯性化节点在动画蓝图中的使用,gif1为使用 “标准混合” 后的过渡效果,gif2为使用 “惯性混合” 后的过渡效果,通常 惯性化节点 尽量靠近 输出姿势(Output Pose)节点,这有助于减少或消除图表中的标准混合,并提高性能。
惯性化节点能够处理多个 【惯性混合请求】,因此将 “惯性化节点” 放在最后能够处理之前的所有 【惯性混合请求】,而惯性混合的性能相比标准混合性能来的高,故能提高性能!

在文档中还提到了:若图表包含惯性化请求但是缺少惯性化节点,将在 消息日志(Message Log) 窗口中记录运行时错误。也就是指下面代码

/*static*/ void FAnimNode_Inertialization::LogRequestError(const FAnimationUpdateContext& Context, const FPoseLinkBase& RequesterPoseLink)
{
#if WITH_EDITORONLY_DATA	
	UAnimBlueprint* AnimBlueprint = Context.AnimInstanceProxy->GetAnimBlueprint();
	UAnimBlueprintGeneratedClass* AnimClass = AnimBlueprint ? AnimBlueprint->GetAnimBlueprintGeneratedClass() : nullptr;
	const UObject* RequesterNode = AnimClass ? AnimClass->GetVisualNodeFromNodePropertyIndex(RequesterPoseLink.SourceLinkID) : nullptr;

	FText Message = FText::Format(LOCTEXT("InertializationRequestError", "No Inertialization node found for request from '{0}'. Add an Inertialization node after this request."),
		FText::FromString(GetPathNameSafe(RequesterNode)));
	Context.LogMessage(EMessageSeverity::Error, Message);
#endif
}

通过两幅gif可以看出 “惯性混合” 的效果不如 “标准混合”,原因中文档也有描述:由于惯性混合是 后期处理 ,用于将动作过渡到目标动画,因此短混合效果最佳。
请添加图片描述

3、【惯性混合请求】的来源

“惯性混合请求” 来源主要有三个地方

1、混合节点的请求
请添加图片描述

2、状态机过渡的请求

请添加图片描述

3、链接动画图表和分层动画图表的请求
请添加图片描述

ps:链接动画图表和分层动画图表其本质就是一张新的动画蓝图!,关于惯性化在UE5中的实现代码在如下位置
在这里插入图片描述

补充上一篇

在 《UE5——动画混合》 中出现的不同颜色的骨骼,其实可以在下面面板中设置(后面在文档中看到的)动画节点参考
请添加图片描述

引用

【UE5】混合节点文档
【UE5】混合遮罩和混合描述文档
【UE5】动画层文档
【UE5】动画蓝图链接文档
惯性插值算法解析

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

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

相关文章

【SpringBoot+MyBatis】二级缓存以及使用Redis缓存数据

在MyBatis中,存在一级缓存以及二级缓存。一级缓存是默认自动开启,而二级缓存需要我们手动去开启。但看到这篇文章的人,大部分都是在做项目才发现的问题:每次访问数据都要查询一遍又一遍的数据库,这是在控制台上可以发现…

叶酸偶联N-季铵化壳聚糖(FA-HTCC)

叶酸偶联N-季铵化壳聚糖(FA-HTCC) 中文名称:叶酸偶联N-季铵化壳聚糖 英文名称:FA-HTCC 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体 包装:瓶装/袋装 溶解性:溶于大…

MYSQL 主从复制 --- binlog

一个MYSQL数据库存在的问题 在谈主从复制之前,应该都会有一个疑问,那么就是一个MYSQL数据库存在的问题呢? 1. 读和写所有压力都由一台数据库承担,压力大 2. 数据库服务器磁盘损坏则数据丢失,单点故障 为了解决我们可以…

Spark RDD介绍

RDD 引出问题 Spark是如何将多台机器上的数据通过一个类型来关联实现的? 答:通过RDD类型来实现关联 一、RDD简介 RDD(Resilient Distributed Dataset):弹性分布式数据集 RDD的本质: 一个抽象的逻辑上的…

项目运行久了很卡,手动执行垃圾回收机制,秒丝滑

问题 当项目运行久了,内存会被大量占用。如何不重启项目,释放内存,继续丝滑开发呢? 回答 手动执行垃圾回收机制 打开任务管理器康康: 巨卡,无敌卡,解决它! 打开命令行工具&…

Kaggle竞赛——Titanic泰坦尼克之灾(保姆级基础版)

Kaggle竞赛网址:https://www.kaggle.com/c/titanic 本次Kaggle泰坦尼克之灾分析过程大致分为: 第1步:了解数据 第2步:分析数据之间的关系 第3步:缺失项数据处理 第4步:特征因子化 第5步:处理特…

DBCO-SS-活性酯|DBCO-SS-NHS酯

DBCO-SS-活性酯|DBCO-SS-NHS酯 名称;DBCO-SS-活性酯|DBCO-SS-NHS酯 CAS NO:1435934-53-4 分子量:565.66 分子式:C28H27N3O6S2 含 量:>95% 外 观:固体粉末 保存:-20避光避湿 结构式: …

记录--手把手带你开发一个uni-app日历插件(并发布)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 相信我们在开发各类小程序或者H5,甚至APP时,会把uni-app作为一个技术选型,其优点在于一键打包多端运行,较为强大的跨平台的性能。但是,只要开…

我为什么建议前端将Python 作为第二语言?

前言 “如何摆脱不停切图的困局?” 这不是一篇制造焦虑的文章,而是充满真诚建议的Python推广文。 当谈论到编程入门语言时,大多数都会推荐Python和JavaScript。 实际上,两种语言在方方面面都非常强大。 而如今我们熟知的ES6语…

用Java语言简单实现:炸金花,不知道你有没有兴趣跟着笔者来研究一下呀

说实话,到目前为止,笔者学习Java语言也有着进两个多月了吧!!但是,一直毫无进度!博客更新的也很少,仅仅10篇刚出头,而且浏览量也很少,这样很不符合我的气质!&a…

汉字风格迁移----FtransGAN

🚀针对的问题 以前的大多数作品都是通过将给定子集的风格转移到未见子集的内容来解决这个问题的。然而,他们只关注同一语言中的字体样式转换。在许多任务中,我们需要学习一种语言的字体信息,然后将其应用到其他语言。现有的方法很难完成这样的任务。 图1。几个应用实例。…

03_2排序算法:快速排序、归并排序

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念,算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博…

IIS2MDCTR传感器规格、ISM303DACTR磁力计应用、STPSC20H12WL二极管特点

IIS2MDC 3轴数字式磁性传感器具有高达50高斯的磁场动态范围以及16位数据输出。IIS2MDC设有I2C串行总线接口,可支持标准模式 (100kHz)、快速模式 (400kHz)、快速模式 (1MHz) 以及高速模式 (3.4MHz)。 该传感器还设有SPI串行标准接口,另外对其进行配置后可…

IBPS低代码产品公司流辰信息:用心研发,不负众望!

作为一家低代码产品公司,流辰信息一直以高标准严格要求自己,努力研发,努力提升服务品质,从专业的角度为中大型企业数字化转型积极赋能,共创价值。 IBPS低代码开发产品是流辰信息努力研发的硕果,是满足企业级…

教材推荐网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 高校教材推介交流平台的开发主要功能教师发布课程名称、用书信息,各出版社推荐样 书(线上&#…

CRTO 考试总结

写在最前:欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里:https://discord.gg/9XvvuFq9Wb 一起进步,一起 NB~ 背景 今天我结束了 Zero Point Security RTO I 的考试。证书到手。 Zero Point Security 是一家 Base 在英国的安全…

知乎zse-96算法-js补环境方案

文章目录 1. js代码定位与抠取2. 初步分析 开始补环境3. 完整的补全环境的js整合4. 编写python代码调用测试1. js代码定位与抠取 抠js和上篇jsrpc方案一样,传送门:知乎zse-96算法-jsrpc方案 这里简单提一下 直接进入encrypt方法里, 往上先把整个方法体给扣下来: "u…

c语言教工工资管理系统课程设计

序 言 借助现代信息技术和管理理论,建立学校管理信息系统势在必行。对学校而言,全面开发和应用计算机管理信息系统就是有必要的。在学校管理中,教师是学校的宝贵资源,也是学校的“生命线”,因此人事管理是学校的计算机…

JAVA中生成随机数Random VS ThreadLocalRandom性能比较

前言 大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么他们二者之间的性能是怎么样的呢&#x…

用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别

之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号。在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取程序显示的顺序不一样。于是着手对SysInfo的相关代码进…