[玩转UE4/UE5动画系统>应用篇>架构设计] 之 ALS V4的Overlay框架详解

本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。

在这里插入图片描述
工程文件: 玩转UE4(GitHub)
在这里插入图片描述

0. 效果演示

演示视频: Overlay系统(ALS V4实现方案详解)

工程说明:

  • 动态实现了呼吸效果
  • ALS V4原工程中实现了包含了如下图所示的诸多可以叠加到基本动作上的叠加动画,不过它们的套路都是相同的,所以在拆解版工程中,我只偷懒实现了扛桶的叠加动画。

1. 概述与原理

科普:什么是Overlay动画?

假设,在项目中我们实现了角色的Idle/Walk/Run等基础运动动画,接下来我们想给角色实现射击功能,依照设定角色在Idle/Walk/Run的时候都可以射击并且射击动画的上体动作基本相同,这时我们没有必要为Idle/Walk/Run分别制作一套动画,让它们的上体共用同一个射击动画就可以了,以后我们可能还想制作骑马功能,如果想让角色骑着马射击的话,同样把Overlay动画应用到骑马动画上就可以了,这样即灵活又省力。

什么是Overlay框架?

框架的意义在于可复用并且可扩展,ALS V4中Overlay部分的实现就具备了这样的特性,因此称之为Overlay框架。我们可以根据项目需要在Overlay框架中自由拆装Overlay动画。

Overlay框架概要

ALS V4的Overlay框架由4如下4个部分构成,下文中我们将逐一解释其意义。
在这里插入图片描述

2. 三个输入层

2.1 Base Poses Layer(基本姿势层)

Base Poses Layer很简单,它提供了ALS_N_Pose(站立)ALS_CLF_Pose(蹲) 两个姿势,其作用是生成动态叠加(Make Dynamic Additive) 时充当 “被减姿势”Base Pose

在这里插入图片描述

2.2 Base Layer(基础动画层)

Base Layer 就是诸如上文所述的Idle/Walk/Run基础动画层。

在这里插入图片描述
本例中,我使用的就是横板卷轴模板中的默认状态机作为Base Layer

在这里插入图片描述

2.3 Overlay Layer(叠加动画层)

Overlay Layer 要叠加的动画层
在这里插入图片描述
ALS V4中实现了如下若干种叠加动画,它们都是并列且互斥的关系,其拆装的原理都是相同的。这也体现了Overlay框架的意义。 我们可以根据项目的需要,在这里自由安装或拆卸叠加动画。

在这里插入图片描述
因此在本例中,时间的关系我只添加了扛桶一个叠加动画。

在这里插入图片描述
Overlay状态切换的标志位是OverlayState,原版ALS V4中在角色蓝图中更新完OverlayState,通过BPI Get Current States 接口传递给动画蓝图,在本拆解版中我偷了点懒。

OverlayState 是表示叠加动画的枚举类型,在实际项目中可根据需要增减枚举值。

在这里插入图片描述

3. 核心:Layer Blending (混合层)

Layer Blending 层是整个Overlay框架的核心部分,整体分为4个大的步骤。

在这里插入图片描述

3.1 Step 1 计算Base Additive

在这里插入图片描述

注意: 这里计算了Mesh Space和Local Space两个版本的Base Additive的备份。其中Local Space版本备份主要用于双臂的Overlay动画,身体的其它部分均使用Mesh Space版本。

在这里插入图片描述

3.2 Step 2 计算局部姿态副本

这个步骤将身体拆解为双腿(Legs)、骨盆(Pelvis)、脊椎(Spine)、头部(Head)、左臂(Arm L)以及右臂(Arm R)等局部动画副本,用于在下一步通过Layered blend per bone插入到最终姿态中。计算这些副本的逻辑相同(仅在坐标系上略有不同),下面就医双腿和左臂为例解释一下。

在这里插入图片描述
在这里插入图片描述

3.2.1 Overlay作用模式控制

在这里插入图片描述

带入上一步的公式,整理一下可得:

  • Section 1Alpha值为1时:
    在这里插入图片描述
    这实际上就是将Overlay LayerAdditive的形式叠加到Base Layer 上。

  • Section 1Alpha值为0时:

在这里插入图片描述
换句话说,Section 1Alpha的作用就是控制Overlay Layer的作用方式:

  • Alpha = 1:Overlay Layer视为Additive动画
  • Alpha = 0: 直接使用Overlay Layer
3.2.2 Overlay作用权重控制

Section 2的作用就通过曲线来控制Overlay Layer的权重

  • 曲线值为1:使用叠加后的Pose
  • 曲线值为0:此Pose屏蔽Overlay Layer,只使用Base Layer

注意: 上文例子中,Arm L Add 的值取自曲线Layering_Arm_L_Add ,此处的后缀Add即为Additive;而控制权重的曲线是Layering_Arm_L,二者名字相似,请注意区分。

3.3 Step 3 插入局部姿态

通过Layered blend per bone将局部姿态插入到最终姿态中,这里需要注意的是插入手臂姿态时,Local Space版本和Mesh Space版本的选择

在这里插入图片描述

Arm L(R)LS和Arm L(R)MS的关系如下:

在这里插入图片描述
LS值取整后再被1减,获得MS的值,这就意味着只有当LS取1时,MS为0,其余情况MS值均为1。换句话说:LS和MS的取值只有如下两种情况:

  • LS = 0~0.99999 ; MS = 1
  • LS = 1 ; MS = 0

3.4 Step 4 曲线覆盖

这个步骤确保曲线的取值都来源于Base LayerOverlay Layer且未经混合(Blend)的原始值。

在这里插入图片描述
Layered blend per bone 1 的作用是可以通过蒙太奇动画动态地提供曲线,这个蒙太奇动画本身是不起作用的,只提供曲线。

在这里插入图片描述Layered blend per bone 2 ** 的作用是将Base LayerOverlay Layer**原始曲线值提供给最终Pose。

在这里插入图片描述

4. 补充:呼吸效果的实现

呼吸在ALS V4中被称为Secondary Motion(次级动作),它的实现比较简单(使用了静态的Additive方式),并不依赖于这个Overlay框架。

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开发游戏的老王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值