角色蓝图
接下来来看角色蓝图
首先会在动画蓝图初始化的时候,获取当前角色类对象和角色移动组件


然后在每帧更新的时候,判断角色是否存在,以及调试信息是否开启,然后是区分是主线程跑还是动画工作线程跑(线程安全更新)

不用安全线程更新的话就继续更新逻辑,用的话就在安全线程更新里更新逻辑

在更新逻辑函数里,对一些重要的数据做了处理

运动轨迹生成
姿势搜索前需要生成运动轨迹,这是运动匹配的内容,生成运动轨迹需要姿势搜索数据,历史轨迹数据,上一帧的控制偏航更新用于计算转向速率,蒙太奇根运动和warping不会影响轨迹生成,值得注意的是,这里根据角色当前地面速度来判断不同的轨迹数据导入

然后接下来让运动轨迹避开障碍物和下落时运动轨迹的处理(取决于是否开启重力)
-
获取角色物理信息 - 从动画实例获取角色移动组件的重力和速度
-
应用重力计算 - 根据重力公式计算轨迹点的下落偏移
-
射线碰撞检测 - 使用 LineTraceSingle 进行地面碰撞检测
-
轨迹点调整 - 将轨迹点调整到碰撞点上方适当高度
-
着陆信息计算 - 计算预计着陆时间和速度



最终输出一个轨迹碰撞结果结构体和根据此函数进一步更新的轨迹数据结构体
动画图表
运动匹配
回到动画图表AnimGraph,GASP这里溜了两套方案,第一套是纯运动匹配方案,第二套是运动匹配+状态机的方案,是一个高度实验性的设置,旨在将状态机的可控性、选择器的灵活性、运动匹配的强大功能以及混合堆栈的混合行为结合起来,努力构建一个可扩展、对美术师友好且易于控制的运动系统。
下面的状态机纯粹用作逻辑状态机,不输出任何姿势。它的工作是使用状态入口动画节点函数写入混合堆栈。双向混合只允许混合堆栈姿势通过,但设置为"总是更新子节点",确保状态机的逻辑可以在混合堆栈之前更新。

MotionMatching需要导入动作库,这些动作库是用来配合移动轨迹进行检索的


动作库需要检索文件Schema,相当于配置文件,这是角色运动轨迹对动画匹配效果影响的设置,它可以通过增加或减少采样点的设置来控制匹配程度,每个采样点可以选择单个或多个以速度,位置,速度方向,面朝方向,速度XY,位置XY,速度方向XY,面朝方向XY等角色运动状态来做为采样方式,设置采样点的权重值(Weight)来影响匹配优先级,权重较高的采样点将在动画匹配过程中被优先考虑,也就是优先搜索权重较高的采样点里角色运动状态最匹配的动画,调整偏移值(Offset)来确保动画匹配在特定轨迹点上的精度,合适的偏移值也可以增加动作平滑过度的效果。这些设置没有标准的参照值,只有根据自己的动画效果和项目需求来慢慢调整
简而言之,PoseSearchSchema 是Motion Matching系统中的 数据格式定义和搜索规则配置 。它相当于系统的"规则手册",定义了如何存储、比较和选择动画数据。PoseSearchSchema 是Motion Matching系统中的 数据格式定义和搜索规则配置 。它相当于系统的"规则手册",定义了如何存储、比较和选择动画数据。
制定一个标准用来检索数据库里的动作,根据配置好的东西作为方案去选择认为最优的动作
从这里展开可以看到Schema的计算数据细节

然后呢,在MotionMatching节点里面,绑定一个每帧更新的函数,在该函数里通过选择器去选择动作库

这个选择器会通过角色当前的步态,是否沾地,是否正在移动等选择动作库

这是一个层层嵌套关系,当上面两个条件都不满足则会进入到最下面,而这三个都是选择器(子选择器)


每一帧根据当前的状态动态地去设置
然后还绑定了一个函数,On Motion Matching State Updated,每当Motion Matching得出动作数据结果的时候会调用其绑定的回调函数,主要目的是保存
GASP对其的注释是:
这个函数在Motion Matching节点选择动画后调用。在这种情况下,我们缓存所选动画所在的数据库,以便在事件图中获取标签(由于线程安全问题)。
在未来,我们计划使用这个函数来控制基于所选动画的额外内容,例如混合时间和混合配置文件。
需要如何理解Schema是如何挑选动画的,可以打开Rewind Debugger进行查看

需要线使用吸管选取对象,然后点击录制

于此可以看到什么时候播放的什么动画
cost就是在我们上面去计算得出的得分值,也可以叫做置信度,越低越可信,每帧选取一个可信达标的动作播放

然后还需要一个历史姿势节点,这两个节点完成都连接上,已经可以启动MotionMatching了

这个节点包含对轨迹的引用(或者可选地自行生成轨迹),这是为了将动画数据与之匹配所必需的,同时还包含先前姿势数据的缓存,这些数据也被Motion Matching查询所使用。
这个节点包含有关姿势收集频率、可以存储的先前姿势数量以及我们想要采样的骨骼列表的设置。
中间的节点目的是微调,和提升效果,比如角色在往斜的方向奔跑的时候,会有一个倾斜,在BlendPose1D中,使用ApplyMeshSpaceAddtive去应用,并限制在角色移动过程中
到后面的笔记会单独说明这些微调的中间节点。
