问答媒体

 找回密码
 立即注册
快捷导航
搜索
热搜: 活动 交友 discuz
查看: 119|回复: 1

Animation

[复制链接]

2

主题

3

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-8 07:54:51 | 显示全部楼层 |阅读模式
对UE5中Animation的一些学习笔记,整理归档,UE5.1.0版本;文中所有案例都来自官方的ContentExample中的Animation Basics关卡;
首先,当在DCC软件中导出绑定骨骼的模型时,导入UE5的时候会自动生成其骨骼(Skeleton)以及带骨骼模型(Skeletal Mesh);导出的骨骼假如带有动画序列帧的话,还会生成其动画(Animation Sequence);在UE中以上都以Assets的形式存在;
Skeleton Assets本质是骨骼名字的层级列表,并不包括蒙皮(Skinning)和Transform数据,其主要功能就是把动画数据映射到骨骼模型上去;其还存储了可用于Skeletal Mesh的anim curves、sync markers和notifies等元数据;不同的Skeletal Mesh可共用同一个Skeleton,只要它们的骨骼层级是兼容的;
Skeletal Mesh包含了蒙皮的模型,以及与其关联的数据,比如material和physics asset等;
Animation assets包含了骨骼的相关Transform数据,可以在相同骨骼的任何Skeletal Mesh上使用;


注意上图中的Animation骨骼形状是利用Debug Line绘制出来的:


需要对动画进行镜像的时候,可以使用Mirror Data Table来完成:


其中包括了各个骨骼和镜像骨骼的映射信息,由Animation BP中的相关节点(Mirror Pose)加载:


注意场景中的角色BP(BP_CharacterDisplay)所用的Animation BP:


是在场景Actor中选中相关Component后添加进去的:


然后由Animation BP读取BP_CharacterDisplay Actor中的参数,来决定是否要镜像动画:


BP_CharacterDisplay Actor的相关参数直接暴露出来,方便在场景中直接设置:


以下是一些基础的特性和概念
关于Root Motion的概念,是指在动画中,是否烘焙位移到了根骨骼(root bone)上,如果是则其为有Root motion,有Root motion的动画会在角色位移动画的时候,根骨骼也会随角色而动;
角色BP的Movement component会利用根骨骼的移动来移动角色的胶囊体等,这样就在如角色后退的动画中,如果碰到障碍物等,能方便的进行正确的物理计算:


可以使用Additive Animations叠加不同的动画,形成复杂的混合动画,比如在奔跑动画中混入受击动画,这一逻辑在Animation BP中完成:


注意Sequence Player不同的颜色代表其引用的Animation Sequence属性不同,额外叠加到基础动画上的Additive动画,需要在其Animation Sequence属性中,设置相关参数(如Base Pose等,UE根据Base Pose计算出差异部分,再叠加到基础动画上,才有正确的效果):


还可以使用Blendspaces来混合动画,其作用是基于输入值,在混合空间轴中获取轴上对应值的线性融合的动画;最典型的就是根据传入的速度值来混合停、走、跑等不同动画:


这些在混合空间中的动画,被称为Blend Sample


上面为Blend Space 1D,只有一维水平轴的线性混合空间,在UE5.1中已经属于Legacy:


Blend Space(Blend Space 2D)拥有二维的混合空间,拥有水平和垂直轴:


可以更加自由的在空间中设定Blend Sample


传入这些值的逻辑仍然在相关Animation BP中:



这个仍然是如上文中逻辑一样,由Charater Number决定调用哪个Blendspace;

而这些值的获取逻辑,则是在Animation BP的Event Graph中:



获取场景中的滑动条Actor,然后读取其相关值,设置到Blendspace中去;

场景中只是把滑动条Actor的输出值传入了相应角色Animation BP的BlendSpace而已:


Aim Offsets则是Additive AnimationsBlendspaces的结合,其作用把在混合空间中的Additive Animations叠加到基础动画上;
Aim Offset的界面与Blendspace类似:



其中的Blend Sample都为设置了Base Pose的Additive Animations;

不同的是,在Animation BP中调用Aim Offset的时候,要输入需要叠加的基础动画:



为了场景中方便演示而有两个Blend Pose,其中Blend Pose 1才是真正想要的输出结果;

基础动画可以是动画中的某一帧,也可以是一整个Sequence,由不同的节点调用;Aim Offset最典型的使用就是把角色如各方向瞄准这样的动作方便的叠加到角色如走动、跑步等基础动画上;
可以通过Animation Montage“拼接”不同的动画到一个montage asset中,还可以在montage序列中添加各种task,并可以方便的由Blueprint或C++代码来直接调用montage,灵活的播放其中的片段、触发其中的事件;
Animation BP中,不能在AnimGraph中直接使用montage,而是在Event Graph中通过事件触发,通过Montage Play节点播放:


AnimGraph中使用Slot节点来决定相关的montage在动画的那个部分注入:


Slot的名字对应相关montage中的不同slot:



注意这里是一段受击的Additive Animation,montage会把它自动叠加到原动画上;

这样就可以通过事件逻辑在不同的情况下方便的在动画中加入\叠加新的动画或其它效果;
在混合动画的相关节点(Blend Poses等)中,支持不同的混合方式(曲线),也可以加入自定义曲线:


还可以在Skeleton Tree中添加Blend ProfileBlend Mask


通过Profile在混合动画时可以精确控制每根骨骼的混合权重(时间权重和混合权重),设置好的Profile同样在相关Blend节点中添加:


在混合动画的时候还支持Inertialization(惯性动画),能让过度更加平滑(虽然有时这种平滑并不适合动作的表现),需要相关节点支持:


在Animation BP中,除了简单的动画混合节点:


还有能根据规则(Transition Rules),控制骨骼模型在不同状态(State)下转换的State Machine(状态机);状态机拥有自己单独的可视化界面:


每一个State节点中,是动画的混合逻辑和输出:


箭头节点(Transition Rules)中,包含的是可转换条件的判断,满足条件即可按箭头方向进行状态转换:


这些条件参数的获取或逻辑,可以在Event Graph中编写;
BlendSpace还可以在Animation BP中以Blendspace Graph的方式直接使用,不用再调用Blendspace asset,而是可以直接在Animation BP中使用的新特性:


BlendSpace节点有自己的Graph,可以在里面直接添加Blend Samples:


这些Blend Sample不再局限于单独的动画序列,而可以是一系列动画序列的混合结果:


这样BlendSpace也变得更强大和灵活;
可以根据一根骨骼把角色分为不同部分,比如上半身和下半身:


然后使用Layering特性,在上、下半身使用不同的动画,然后混合在一起,这个混合过程由Layered blend per bone节点完成:


在节点中设置区分不同部分(Layer)的骨骼:


这样可以很灵活的把不同的动画按骨骼的不同部分混合成全新的动画:


同理,还可以把Layer特性使用在Montage上;这样,就可以把同一个Montage中不同Slot上的动画混合在一起:


同时利用了Montage的灵活性和Layer的特性;
<hr/>
回复

使用道具 举报

3

主题

10

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2025-4-30 20:11:50 | 显示全部楼层
看帖要回,回帖才健康,在踩踩,楼主辛苦了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver| 手机版| 小黑屋| 问答媒体

GMT+8, 2025-7-8 09:21 , Processed in 0.108544 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表