Skip to main content

动画树

概述

动画树(Animation Tree)可以让项目制作基于节点的动作播放管理。

动画树编辑器

image-20230215150944067

编号说明
1菜单栏
2工具栏
3预览窗口
4动画树编辑窗口。该窗口提供动画树的创建、编辑和调试功能。
5属性窗口。与当前选中动画树节点对象相关的属性预览、编辑窗口。
6动画浏览器。显示动作列表,可以从中拖拽动画资产至动画树创建相应的播放节点。
动画参数窗口。用于动画树参数管理和实时调试。
7插槽管理器。可以在此处增删插槽组、增删插槽和修改插槽名。

打开动画树编辑器

在动画编辑器中依次点击文件(File) -> 创建(Create),在下拉框中选择动画树(AnimTree),为动画树命名并选择文件保存路径,点击Yes,进入动画树编辑器中。

image-20220929142611288

image-20220929142817962

动画树播放节点

序列播放节点

动画树(Anim Tree)中的序列播放节点可以对骨架(Skeleton)动画序列(Anim Sequence)资产进行采样并输出特定时间点上的姿势。

节点使用

在动画树编辑面板上右键打开节点选择面板,展开动画(Animation)分类,浏览所有有效的序列播放节点。

image-20220909113908054

选择一个节点并放置。

image-20230215151104615

将输出引脚连接至目标节点的输入引脚。

image-20230215151144714

image-20230215151209315

如果需要预览,点击工具栏中的应用(Apply)按钮。播放节点将被驱动,预览窗口可以观察回放结果。

image-20230215151010616

属性设置

image-20230327104324118

属性说明
资产(Asset)动画播放节点使用的资源
循环(Loop)是否循环播放
播放速率(Play Rate)动画的播放速率,勾选后代表该属性使用动画参数,可以选定动画浮点参数作为播放速率
起始位置(Start Location)动画开始播放的时间(单位:秒),勾选后代表该属性使用动画参数,勾选后可以选定动画浮点参数作为起始位置
预加载(Preload)在打开动画树的时候是否预加载该动画
基础播放速率(Basic Play Rate)对动画播放速率进行缩放
忽略相关性测试(Ignore Relevancy Test)勾选后可以使该动画在状态机中切换状态时忽略它的相关性

混合空间播放器节点

动画树中的混合空间播放器节点可以使用混合空间资产输出特定时间点上的姿势。

节点使用

image-20220909114319258

放置过程类似序列播放节点。

image-20220909114357867

属性设置

image-20230327105734372

属性说明
循环(Loop)是否循环播放
播放速率(Play Rate)动画的播放速率,勾选后代表该属性使用动画参数,可以选定动画浮点参数作为播放速率
起始位置(Start Location)动画开始播放的时间(单位:秒),勾选后代表该属性使用动画参数,勾选后可以选定动画浮点参数作为起始位置
预加载(Preload)在打开动画树的时候是否预加载该动画
X回调(X Callback)通过指定的回调函数获取水平方向参数控制量
X参数(X Parameter)勾选后代表该属性使用动画浮点参数,下拉列表指定从哪个参数中获取水平方向参数控制量。
Y回调(Y Callback)通过指定的回调函数获取垂直方向参数控制量
Y参数(Y Parameter)勾选后代表该属性使用动画浮点参数,下拉列表指定从哪个参数中获取垂直方向参数控制量。
忽略相关性测试(Ignore Relevancy Test)勾选后可以使该动画在状态机中切换状态时忽略它的相关性

混合空间1D播放器节点

与混合空间播放器节点同。

瞄准偏移播放器节点

动画树中的瞄准偏移播放器节点可以对瞄准偏移混合空间资产进行采样并输出特定时间点上的姿势。

节点使用

放置流程与混合空间播放器节点相同,但需要为基础姿势(Base Pose)引脚指定输入。

image-20230327163732407

属性设置

image-20230327110130457

属性说明
循环(Loop)该节点是否循环播放
播放速率(Play Rate)该节点播放时的速率,勾选后代表该属性使用动画参数,可以选定动画浮点参数作为播放速率
起始位置(Start Location)该节点播放时的起始位置,勾选后代表该属性使用动画参数,勾选后可以选定动画浮点参数作为起始位置
预加载(Preload)在打开动画树的时候是否预加载该动画
X回调(X Callback)通过指定的回调函数获取水平方向参数控制量
X参数(X Parameter)勾选后代表该属性使用动画浮点参数,下拉列表指定从哪个参数中获取水平方向参数控制量。
Y回调(Y Callback)通过指定的回调函数获取垂直方向参数控制量
Y参数(Y Parameter)勾选后代表该属性使用动画浮点参数,下拉列表指定从哪个参数中获取垂直方向参数控制量。
差异叠加度(Additive Alpha)差异叠加度
采样X(Sample X)在混合空间中采样的X坐标
采样Y(Sample Y)在混合空间中采样的Y坐标
忽略相关性测试(Ignore Relevancy Test)勾选后可以使该动画在状态机中切换状态时忽略它的相关性

瞄准偏移1D播放器节点

与瞄准偏移播放器节点相同。

混合节点

混合节点

该节点可根据给定权重值混合输入两个姿势。

节点使用

在动画树编辑面板上右键打开节点选择面板,展开混合(Blends)分类并从中选取混合(Blend)

image-20220909142000658

添加成功后的效果:

可以继续为节点配置合适的输入/输出。

属性设置

选中节点后,可以在属性窗口(Property Window)看到节点的各种属性。

属性说明
使用权重参数(Use Weight Parameter)是否使用权重参数
混合权重(Blend Weight)混合权重
混合权重偏移(Blend Weight Offset)对混合权重的偏移
混合权重缩放(Blend Weight Scale)对混合权重的缩放
激活时重置(Reset When Activating)重新激活时重置子节点
曲线混合选项(Curve Blend Option)设置曲线混合行为来控制动画层的混合方式

按布尔型混合姿势节点

该节点根据布尔型参数控制输出在两个输入之间切换。

节点使用

在动画树编辑面板上右键打开节点选择面板,展开混合(Blends)分类并从中选取按布尔型混合姿势(Blend Pose By Boolean)

image-20220909142103455

添加成功后的效果:

image-20220909142153487

可以继续为节点配置合适的输入/输出。

image-20220909142437974

属性设置

选中节点后,可以在属性窗口看到节点的各种属性。

image-20220913134344953

属性说明
过渡模式(Transition Mode)播放节点时采用的过渡模式
假混合时间(False Blend Time)混入假姿势混合所需时间
真混合时间(True Blend Time)混入真姿势混合所需时间
回调字符串(Callback String)配置回调函数,根据返回值决定是否迁移。
是否使用条件(Use Conditions)可参考动画参数部分

多路混合节点

该节点根据给定权重值混合输入多个姿势。

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取多路混合(Multi Way Blend)

image-20220909142638183

添加成功后的效果:

image-20220909142710177

点击节点上添加引脚(Add Pin)可以为其添加新的引脚。

image-20220909142736667

成功添加引脚后效果:

image-20220909142811456

然后可以继续为节点配置合适的输入/输出。

image-20220909143024672

属性设置

选中节点后,可以在属性窗口看到节点的各种属性。

image-20220906112431941

属性说明
是否是叠加型节点(Is Additive Node)该节点的输入是否是叠加类型的动画
是否标准化Alpha(Is Normalize Alpha)是否使用标准化后的权重值
混合权重偏移(Blend Weight Offset)对混合权重的偏移
混合权重缩放(Blend Weight Scale)对混合权重的缩放
曲线混合选项(Curve Blend Option)设置曲线混合行为来控制动画层的混合方式
  • 覆盖(Override):输入姿势序号高的曲线覆盖序号低的曲线
  • 不覆盖(Do Not Override):输入姿势序号高的曲线不覆盖序号低的曲线
  • 权重归一化(Weight Normalization):将各路姿势的权重归一化后对曲线加权平均
  • 按权重混合(Blend By Weight):按各路姿势的权重加权平均
  • 使用基础姿势的值(Use Base Pose Value):使用第一路输入姿势的曲线
  • 使用最大值(Use Max Value):使用各路曲线的最大值
  • 使用最小值(Use Min Value):使用各路曲线的最小值
是否使用参数(Use Parameter)使用参数后,可根据动画参数来混合动画姿势
期望权重(Desired Alphas)列表各项对应各引脚期望分配的权重,如果是否标准化Alpha(Is Normalize Alpha)不勾选,则使用标准化后的权重值。

按整型混合姿势节点

该节点根据整型参数控制输出在多个输入中切换。

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取按整型混合姿势(Blend Pose By Int)

image-20220909143142142

添加节点成功后的效果:

点击节点上添加引脚(Add Pin)可以为其添加新的引脚。

成功添加引脚后效果:

然后可以继续为节点配置合适的输入/输出。

属性设置

image-20230327131053796

属性说明
过渡模式(Transition Mode)播放节点时采用的过渡模式
混合时间列表(Blend Time)各姿势混入所需要的时间
回调字符串(Callback String)配置回调函数,根据返回值决定是否迁移。
参数(Parameter)勾选后代表该属性使用动画整型参数,下拉列表指定从哪个参数中获取参数控制量

逐骨骼分层混合节点

该节点能够在基础姿势上使用逐骨骼的掩码叠加多层姿势。常用于实现角色不同部位受不同动画驱动的这类需求。逐骨骼分层混合允许将输入姿势定义为影响不同骨架区域的层,并对这些层进行加权混合。例如可用于角色在行走中播放不同的上半身动作。

角色在行走时播放上半身瞄准动画:

WalkAndAim

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取逐骨骼分层混合(Layered Blend Per Bone)

image-20220909143257482

添加节点成功后的效果:

点击节点上添加引脚(Add Pin)可以为其添加新的引脚。

成功添加引脚后效果:

然后可以继续为节点配置合适的输入/输出。

属性设置

选中节点后,可以在属性窗口看到节点的各种属性。

属性说明
混合权重列表(Blend Weight List)设置每层的权重
网格空间旋转混合(Mesh Space Rotation Blend)是否在网格空间混合旋转
曲线混合选项(Curve Blend Option)设置曲线混合行为来控制动画层的混合方式
  • 覆盖(Override):输入姿势序号高的曲线覆盖序号低的曲线
  • 不覆盖(Do Not Override):输入姿势序号高的曲线不覆盖序号低的曲线
  • 权重重归一化(Weight Normalization):将各路姿势的权重归一化后对曲线加权平均
  • 按权重混合(Blend By Weight):按各路姿势的权重加权平均
  • 使用基础姿势的值(Use Base Pose Value):使用第一路输入姿势的曲线
  • 使用最大值(Use Max Value):使用各路曲线的最大值
  • 使用最小值(Use Min Value):使用各路曲线的最小值
层设置(Layer Setting)层设置骨骼权重掩码,每层代表对应的混合姿势,有多少个混合姿势的输入就有多少层。每层可以配置多个分支,每个分支可以指定一根骨骼作为分支的根,一个深度值作为这个分支的过渡深度。当深度小于等于0时,该骨骼及其子骨骼不进行混合,应用基础姿势。当深度大于0时,该骨骼及其所有子骨骼与基础姿势进行混合,随着深度的增加逐渐增加混合姿势的混合权重。

逐骨骼分层混合节点是个比较重要的节点,下面可以通过一个简单的例子来说明。

角色上半身播放瞄准动画,下半身播放行走动画,这样就可以混合成一个一边行走一边瞄准的动画。

在动画树中右击打开节点选择面板,展开混合(Blends)选项,选择逐骨骼分层混合(Layered Blend Per Bone)节点。

image-20230120145346917

从逐骨骼分层混合节点的基础姿势(Base Pose)引脚处连接一个行走动画序列播放节点,从混合姿势0(Blend Pose 0)引脚处连接一个瞄准动画序列播放节点,最后将逐骨骼分层混合节点连接到最终动画姿势(Final Animation Pose)节点。

image-20230120145940251

选中逐骨骼分层混合节点,在属性窗口(Property Window)面板中的分支过滤器中增加3个元素,填写骨骼名称和混合深度来指定该混合节点影响的骨骼。

image-20230120161214894

需要混合的瞄准动画,也就是上半身为瞄准动作,下半身不进行混合。Bip01骨骼,深度为4(大于0)控制该骨骼及其子骨骼与基础姿势进行混合。

Bip01骨骼(黄色高亮):

image-20230120160732191

下半身为行走动作,所以下半身不进行混合。找到控制下半身的骨骼Bip01 L Thigh(左大腿)和Bip01 R Thigh(右大腿),将这两个骨骼混合深度设置为-1使得下半身不进行混合,保持行走动画下半身的动作。

Bip01 L Thigh骨骼和Bip01 R Thigh骨骼(黄色高亮):

image-20230120162557194

应用差异姿势节点

该节点能够在基础姿势上叠加差异动画的采样数据。

差异动作允许从两个姿势间提取差异并应用到其它姿势上,从而为已有动作增加额外的细节表现。例如可用于在角色的不同移动状态下(普通状态,蹲着往前移动)播放相同的受伤动作。

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取应用差异姿势(Apply Additive Pose)

image-20220909143348717

添加节点成功后的效果:

image-20230327164014130

然后可以继续为节点配置合适的输入/输出。

image-20230327171801172

属性设置

属性说明
是否使用权重参数(Use Weight Parameter)勾选后会使用动画参数,可选择动画参数中float类型的参数。使用参数后,可根据动画参数来确定混合权重。不勾选可修改混合权重的值。
混合权重(Blend Weight)混合权重
混合权重偏移(Blend Weight Offset)对混合权重的偏移
混合权重缩放(Blend Weight Scale)对混合权重的缩放
LOD阈值(LOD Threshold)该节点允许的最大LOD

应用网格空间差异姿势节点

该节点能够在基础姿势上应用网格空间差异动画的采样数据。

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取应用网格空间差异姿势(Apply Mesh Space Additive Pose)

image-20220909143442014

添加节点成功后的效果:

image-20230327171833980

然后可以继续为节点配置合适的输入/输出。注意:从差异(Additive)引脚输入的动画需要配置为Mesh空间的差异动画。

image-20230327172856062

属性设置

属性说明
是否使用权重参数(Use Weight Parameter)勾选后会使用动画参数,可选择动画参数中float类型的参数。使用参数后,可根据动画参数来确定混合权重。不勾选可修改混合权重的值。
混合权重(Blend Weight)混合权重
混合权重偏移(Blend Weight Offset)对混合权重的偏移
混合权重缩放(Blend Weight Scale)对混合权重的缩放
LOD阈值(LOD Threshold)该节点允许的最大LOD

创建动态差异姿势节点

该节点能够动态创建差异动画的数据。

节点使用

在动画树上右键打开节点选择面板,展开混合(Blends)分类并从中选取创建动态差异姿势(Create Dynamic Additive Pose)

image-20220909143543230

添加节点成功后的效果:

image-20230327172928261

然后可以继续为节点配置合适的输入/输出。

image-20230327173004198

属性设置

属性说明
网格空间叠加(Mesh Space Additive)是否创建网格空间差异姿势

姿势缓存相关节点

新建缓存姿势节点

该节点能够保存动画树任意节点的输出姿势数据,以供其他节点使用。

节点使用

在动画树编辑面板上右键打开节点选择面板,展开缓存姿势(Cached Poses)分类并从中选取新建缓存姿势(Create Saved Cache Pose)

image-20220909143756321

添加节点成功后的效果:

可以点击标题区域进入编辑状态来修改名称。

添加一个混合空间节点,为节点配置合适的输入,这样混合空间的输出姿势就能够被缓存起来,供其它节点使用。

image-20220909144022382

属性设置

选中节点后,可以在属性窗口看到节点的属性。

属性说明
缓存名(Cache Name)编辑缓存名

使用缓存姿势节点

该节点能够输出已缓存的姿势数据,以供其它节点使用。

节点使用

在动画树上右键打开节点选择面板,展开缓存节点列表(Cached Poses)分类并从中选取使用缓存姿势(Use Cache Pose)

image-20220909144059209

便能将其加入图中:

然后可以将缓存姿势使用节点连至任何需要的节点。例如:

插槽节点

动作插槽可以在动画树中作为一个节点使用,播放动态的动作(比如攻击动作),可以将动画树外部播放的动画姿势插入动画树以供其他节点使用。插槽通常和蒙太奇一起使用。

创建与编辑插槽

在动画树编辑器中的插槽管理器(Slot Manager)中右击插槽名称(Slot Name),选择添加默认组和插槽(Add Default Group And Slot)来添加一个插槽组和插槽。

image-20221122144228048

要添加新的插槽,需右击默认组(DefaultGroup)或者默认插槽(DefaultSlot),然后选择添加插槽(Add Slot),在弹出的窗口中输入插槽名称后按Enter键完成添加。

image-20221122144149645

image-20221122144100584

image-20221122160805652

右击插槽组打开快捷菜单。

image-20221122162108557

名称说明
添加插槽(Add Slot)添加新的插槽
添加分组(Add Group)添加的新的插槽组
删除分组(Delete Group)删除选中的插槽组

右击插槽打开快捷菜单。

image-20221122162814108

名称说明
删除插槽(Delete Slot)删除选中的插槽
重命名插槽(Rename Slot)对选中的插槽进行重命名
添加插槽(Add Slot)添加新的插槽
添加分组(Add Group)添加新的插槽组
删除分组(Delete Group)删除选中的插槽组

修改插槽后,点击插槽管理器中的保存(Save)按钮。

image-20230215144054722

节点使用

在动画树上右键打开节点选择面板,展开蒙太奇(Montage)分类并从中选取插槽。

image-20220909114823988

添加节点成功后的效果:

插槽节点常与逐骨骼分层混合节点配合,以实现角色上下半身动作合成,例如:

在动画树外部没有输入时,插槽节点UpperBody引脚的输入即为输出,角色输出Locomotion动画。

当外部有输入时,节点的输出将切换为外部输入,角色的上半身被输入动画替换。

属性设置

选中节点后,可以在属性窗口看到节点的属性。

属性说明
组(Group)插槽组
插槽(Slot)选择插槽
过渡模式(Transition Mode)选择播放插槽节点时的过渡模式
  • 交叉淡入淡出(Cross Fade):原动画权重逐渐减少,新动画权重逐渐增加
  • 惯性过渡(Inertia Transition):在过渡开始时保留原动画的惯性,过渡中原动画惯性逐渐消失

插槽组

所创建的插槽都会归属于插槽组中,在创建第一个插槽的时候,该插槽会自动创建于一个默认分组(DefalutGroup)下。要创建一个新的插槽组,右击插槽管理器中的插槽组或插槽选择添加分组(Add Group),输入名称后按Enter键完成创建。

image-20221128100236817

插槽组可用于插槽的分类,同组的插槽也会相互影响,当播放一个组内动画的时候,可通过脚本或者C++项目调用来选择是否停下组内其他动画。

其他节点

动作快照节点

该节点能够使用之前缓存的姿势快照。

节点使用

在动画树上右键打开节点选择面板,展开其他(Misc.)分类并从中选取动作快照(Pose Snapshot)

image-20220909130411152

添加节点成功后的效果:

动作快照可用于保留过去某个时间点的姿势,以在将来使用。

例如:我们可以将其用于实现角色以布娃娃的方式倒地后的起身效果。

在角色需要站起时,采集一帧姿势快照。然后通过按布尔型混合姿势节点从快照的姿势切换至播放中的起身动作。

属性设置

选中节点后,可以在属性窗口看到节点的属性。

image-20220909144329212

属性说明
快照名(Snapshot Name)想要使用的快照名称

注释节点

该节点能够为动画树提供注释,它能将其覆盖区域标注出来,并通过标题栏提供文字说明和统一的拖拽操作。

节点使用

在动画树上右键打开节点选择面板,从中选取添加注释(Add Annotation)

image-20220909131836676

添加节点成功后的效果:

可以通过拖拽调整其大小,使其囊括需要注释的节点区域。

并通过设置标题栏中的文本,完成对该区域的注释。

属性设置

选中节点后,可以在属性窗口看到节点的属性。

属性说明
注释(Annotation)编辑注释文本

动画后处理节点

CCDIK、FABRIK和TwoBoneIK节点可以用于实现角色动作与环境的交互,例如,当美术只制作了一个伸手去握住一个固定高度的门把手的动作,利用IK,可以实现同一个动作适配不同高度的门把手。

CCDIK节点

该节点对输入姿势应用CCDIK算法解析。

节点使用

在动画树上右键打开节点选择面板,展开动画后处理(Animation Post-processing)分类并从中选取添加CCDIK(Add CCDIK)

image-20220909131936897

添加节点成功后的效果:

image-20220909132022240

可以将需要CCDIK解算的姿势连至其输入引脚。

CCDIK节点属性设置

image-20230327151330821

属性说明
目标误差值(Target Error Value)末端与目标间的最大容许值
最大迭代次数(Max Iterations)解算算法最大迭代次数
末端骨骼(Tip Bone)末端骨骼
根骨骼(Root Bone)根骨骼索引
回调字符串(Callback String)执行回调字符串,当回调字符串返回false时,不会执行该节点功能。
目标点名称(Target Point Name)标记骨骼的目标点位置
骨骼旋转限制数组(Bone Rotation Limit Array)给定一串由逗号隔开的数值用于限制骨骼旋转。如果数组元素少于骨骼数,则未匹配的骨骼不做限制;如果数组元素多于骨骼数,则多余的数值被丢弃。
混合权重(Alpha):混合权重
目标点旋转类型(Target Rotate Type)Describe the rotation type of the end bone after it is solved to the target point.
  • 目标骨骼原始旋转(Tip Bone Source Rotation):末端骨骼的旋转使用末端骨骼做IK前的原始旋转
  • IK后目标骨骼旋转(After IK Tip Bone Rotation):末端骨骼使用末端骨骼做IK后的旋转(默认)
  • 目标位置旋转(Target Position Rotation):使用目标点的旋转作为末端骨骼的旋转

FABRIK节点

该节点对输入姿势应用FABRIK算法解析。FABRIK基于位置处理骨骼,用最短距离将骨骼移向目标。从后往前,再从前往后遍历骨骼链,完成了一次完整的迭代,如此经过多次迭代后可使骨骼链末端逐渐与目标接近。

可使用FABEIK节点改变尾巴的位置。

使用前:

image-20230213094338001

使用后:

image-20230213094103010

节点使用

在动画树上右键打开节点选择面板,展开动画后处理(Animation Post-processing)分类并从中选取添加FABRIK(Add FABRIK)

image-20220909132326115

添加节点成功后的效果:

image-20220909132353503

可以将需要FABRIK解算的姿势连至其输入引脚。

属性设置

image-20230215152923245

属性说明
目标误差值(Target Error Value)末端与目标间的最大容许值
最大迭代次数(Max Iterations)解算算法最大迭代次数
末端骨骼(Tip Bone)末端骨骼
根骨骼(Root Bone)根骨骼索引
回调字符串(Callback String)执行回调字符串,当回调字符串返回false时,不会执行该节点功能。
目标点名称(Target Point Name)标记骨骼的目标点位置
混合权重(Alpha)混合权重

示例

使用FABRIK节点修改角色手触及的位置。

首先在动画树中右击打开节点快速选择面板,展开动画(Animation)选项,选择一个序列播放节点。

image-20230207094813657

想要改变该动画序列中角色的右手触及的位置,可先在该序列播放节点引脚处连接一个FABRIK节点来调整手臂的位置。

image-20230207101109921

选中该FABRIK节点,在属性窗口(Property Window)面板中将末端骨骼(Tip Bone)设为Bip01 L Hand、根骨骼(Root Bone)设为Bip01 L Clavicle、目标点名称(Target Point Name)设为TargetPos、混合权重(Alpha)设为0.5。

image-20230423150738916框中是末端骨骼为Bip01 L Hand、根骨骼为Bip01 L Clavicle的骨骼链。

image-20230207104604802

在该FABRIK节点后面继续串联一个FABRIK节点来调整手部位置,并在属性窗口(Property Window)面板中修改其属性,将末端骨骼(Tip Bone)设为Bip01 L Finger02、根骨骼(Root Bone)设为Bip01 L Hand、目标点名称(Target Point Name)设为HandPos、混合权重(Alpha)设为0.5。

image-20230207103524371

黄色高亮处是末端骨骼为Bip01 L Finger02、根骨骼为Bip01 L Hand的骨骼链。

image-20230207111013463

动画参数(Animation Parameter)窗口中添加两个目标点位置参数。点击image-20230207111318510按钮,选择字符串(String)类型。

image-20230207111603039

修改该字符串参数的参数名称(Parameter Name)为TargetPos,参数预设值(Parameter Preset Value)参数实例值(Parameter Instance Value)为-0.32,1.5,0.5。

image-20230207113048744

按照上述方法,再添加一个字符串参数,参数名称(Parameter Name)为HandPos,参数预设值(Parameter Preset Value)参数实例值(Parameter Instance Value)为-0.3,1.7,0.6。

image-20230207113554978

将第二个FABRIK节点连接到最终动画姿势(Final Animation Pose)节点,然后点击应用(Apply)按钮在预览(Preview)窗口中查看效果。

image-20230207114253501

预览(Preview)窗口中看到第二个FABRIK节点的末端骨骼发生了明显的旋转,可通过添加修改骨骼(Modify Bone)(超链接)节点来单独修改该骨骼的旋转至合适位置。

使用修改骨骼(Modify Bone)节点前,需先将局部空间转为网格空间。从第二个FABRIK节点引脚处连接一个局部空间转网格空间(Convert Local To Mesh Space)节点。

image-20230209130741971

局部空间转网格空间(Local To Mesh Space)节点引脚处连接一个修改骨骼(Modify Bone)节点。

image-20230209104823641

选中修改骨骼(Modify Bone)节点,在属性窗口(Property Window)面板中修改其属性。

image-20230423152634595

属性设置:

属性设置
骨骼名称(Bone Name)Bip01 L Finger02
旋转(Rotation)-90,0 ,0
旋转模式(Rotation Mode)叠加(Add To)
旋转空间(Rotation Space)模型空间(Mesh Space)

之后需要将网格空间转回局部空间。从修改骨骼(Modify Bone)节点引脚处连接一个网格空间转局部空间( Convert Mesh To Local Space)

image-20230209112838238

网格空间转局部空间(Convert Mesh To Local Space)节点连接至最终动画姿势(Final Animation Pose)节点。

image-20230209131013905

点击应用(Apply)按钮后,可在预览(Preview)窗口中查看最终效果。

image-20230423152746332

TwoBoneIK节点

使用TwoBoneIK通过IK(反向运动学)控制两根骨骼(3个关节)来完成指定动作。

节点使用

在动画树上右键打开节点选择面板,展开动画后处理(Animation Post-processing)分类并从中选取添加TwoBoneIK(Add TwoBoneIK)

image-20220909134432136

添加节点成功后的效果:

image-20220909135108666

可以将需要TwoBoneIK解算的姿势连至其输入引脚。

image-20230215144733760

脚部示例

胶囊体在斜坡上的时候会处于悬空状态,在该角色的动画树中添加TwoBoneIK节点,然后通过动画树回调函数,可以使得角色在斜坡时双脚都贴合地面。

image-20221129171040539image-20221129101823396

TwoBoneIK需要先确定两个位置,一个是目标点(Target Point)位置,也就是最终要到达的目标位置,另一个是关节点(Joint Point)位置,控制两个骨骼的中间部分,确定膝盖的偏向方向。

属性设置

image-20220909160146456

属性说明
末端骨骼(Tip Bone)标记的IK末梢骨骼
回调字符串(Callback String)执行回调字符串,当回调字符串返回false时,不会执行该节点功能。
目标点名称(Target Point Name)标记骨骼的目标点位置
链接点名称(Joint Point Name)链接点位置
混合名称(Alpha Name)指定动画浮点参数名称,用该参数值作为混合权重
目标旋转名称(Target Rotate Name)指定动画参数名称(字符串或者向量类型),用该参数值作为目标点的旋转,其中字符串类型需要用逗号将旋转分量隔开
旋转是否根据目标(Rotate From Target)是否根据目标点旋转
使用父空间的旋转(Take Rotation From Parent)是否根据父骨骼旋转
允许拉伸(Allow Stretch)骨骼是否允许拉伸
拉伸起始比率(Stretch Start)拉伸起始比率
拉伸最大比率(Stretch Max)拉伸最大比率
允许旋转(Allow Rotate)目标骨骼旋转最大角度

状态机节点

状态机节点

状态机节点包含若干状态和状态间的迁移。每个状态包含一个动画树,每个迁移包含一组迁移规则。在外部逻辑的驱动下,状态机将根据迁移规则在不同状态间切换。状态机将激活状态的输出动画融合并作为自身的输出姿势,然后传递给自身所处的动画树做进一步处理。

创建状态机节点

在动画树上右键打开节点选择面板,展开状态机(State Machine)分类并从中选取添加新状态机(Add New State Machine)

image-20220909135220805

添加节点成功后的效果:

点击节点的标题区可进入编辑模式,修改状态机名。

双击节点可进入状态机节点的状态图。

在状态图中可以创建状态和组织结构。

创建状态节点

在状态图上右键打开节点选择面板,点击添加状态(Add State)选项。

image-20220909135831429

可以新建一个状态节点。

在新建的状态上点击标题区可以对状态名进行编辑。

状态的属性设置

属性说明
状态名(State Name)状态名编辑
进入状态事件(Start State Event)进入状态事件回调函数名
离开状态事件(End State Event)离开状态事件回调函数名
完全混入状态事件(Fully Blend Into State Event)完全混入状态事件回调函数名
每次进入状态都重置(Reset On Every Entry)是否每次进入状态都重置关联动画树的子节点

创建迁移节点

从一个状态的外围区域开始拖拽鼠标,可以拉出一根代表迁移的箭头。

在合适的位置释放鼠标,这时将弹出一个创建节点选择菜单,可选择想要创建的目标节点。

image-20220909135914302

选择新建一个状态节点。

这样就一次性创建了一条迁移和一个目标状态。

状态机构建常规操作介绍

实际操作中可以根据角色的动作需求在状态图中进行一个总体的设计。

然后逐个状态,逐个迁移进行实现。

例如:双击Ground状态节点打开关联的动画树。

image-20220909140025174

在动画树中可以添加各种前文中提到动画树节点(包括状态机节点)以实现预期的地面动作需求。例如,这里使用一个混合空间播放器节点:

image-20220909155230649

完成这个状态的设置后,可以借助导航栏跳出这一层级的编缉,重新回到之前的状态图。

接下来可以对其他状态和迁移条件进行编辑,例如可以选中位于状态Ground和Begin In Air之间的迁移,编辑它的属性窗口完成迁移规则的配置。

image-20220913134326105

属性说明
过渡模式(Transition Mode)两个状态动画播放连接时的过渡模式
持续时间(Duration)应用于淡入淡出的持续时间
混合模式(Blend Mode)应用于淡入淡出的混合类型
优先级(Priority)动画编辑器过渡优先级
动作结束自动切换(Switch Automatically When Action Ends)前一个状态的动作结束后是否结束自动切换
回调字符串(Callback String)配置回调函数,根据返回值决定是否迁移。
是否使用节点(Use Conditions)参考“动画参数”

管道节点

管道可以视为一种特殊的状态,与状态不同的是它不包含动画树,除了通过迁移控制状态跳转外,状态机还提供了一种被称为“管道”的节点用于一对多,多对一或多对多的状态切换需求。管道类似于一个移除了动画树的状态。它内部具有一个“是否允许进入迁移”的规则。通过对这条规则的配置,当状态试图通过管道迁移时可以决定是否能够通过其做进一步的迁移。

创建管道节点

在状态图中右键打开节点选择面板,点击选项添加管道(Add Conduit)

image-20220909140121694

可以新建一个管道节点。

在新建的状态上点击标题区可以对状态名进行编辑。

管道的属性配置

属性说明
管道名(Conduit Name)编辑管道名
是否能进入(Can Entry)是否能进入该节点

管道节点用例

如下图所示,图中名为Killed节点即为管道节点。当角色处于Walk或Run的运动状态时,如果遭受攻击,健康值低于死亡临界值,逻辑控制状态向Killed管道节点迁移,并由具体的迁移规则决定最终切换至何种状态。

状态机属性设置

选中节点后,可以在属性窗口看到节点的各种属性。

image-20220913105958700

属性说明
状态机名(State Machine Name)可编辑状态机名
单帧最大状态切换数量(Max Amount Of State Switch Per Frame)一帧中最多运行切换状态的数量
再次进入是否重置(Whether Reset When Re-entry)再次进入是否需要重置,如果不重置则从离开时的状态开始更新。
初始化时是否跳过第一次迁移(Whether Skip First Transition When Initializing)如果是,则将直接满权重进入满足条件的状态;否则,将从入口状态过渡至满足条件的状态。

节点的复制/粘贴

为了便于用户编辑,编辑器允许用户对当前选择区域内的所有节点和它们的连接关系执行复制和粘贴操作。

在当前动画树中构建一个已存在的节点结构,可以选择从已有的动画树中将此结构复制过来(此操作支持在不同编辑器之间进行)。操作如下:

首先在动画树中选择目标区域。

然后使用快捷键Ctrl + C或在任一选择的节点上右键,选择复制节点(Copy Nodes)

最后在目标动画树中使用快捷键Ctrl + V或在空白处右键,选择粘贴节点(Paste Nodes)即可。

image-20220909140340996

动画参数

每个动画树实例可以持有一组参数,这些参数可以被外部修改,并在内部节点中读取。

image-20220909140704697

参数的创建

点击 按钮选择需要的参数类型便可以看到新的参数被创建。

image-20220909140808566

image-20220909140854596

参数的编辑

在新建的参数条目中能修改参数名(Parameter Name)当前参数值(Parameter Value)当前参数实例值(Parameter Instance Value)

当前参数值指的是动画树的模板值。

当前参数实例值指的是当前动画树实例中的参数值,修改这个值能实时影响动画树。

参数的使用

例如在按整型混合姿势(Blend Pose By Int)节点中,可以通过参数指定节点的控制值,从而由外部控制动画树内部的动画数据处理流程。

image-20230327152138022

又如在按布尔型混合姿势(Blend Pose By Boolean)节点中,可以将各类参数用于条件表达式,并将最终结果用于控制节点混合。

image-20230327152337743

image-20230327152445295

动画曲线观察器

默认处于关闭状态。可以依次点击窗口(Window) -> 动画曲线观察器(Anim Curve Viewer)弹出动画曲线观察器。

image-20230215153118015

image-20220909141808508

该面板实时显示当前目标骨架包含的曲线当前值。

image-20230215153128183