混合节点

根据特定条件,将多个动画混合在一起的动画节点。

Choose your operating system:

Windows

macOS

Linux

在角色的 动画蓝图(Animation Blueprint)动画图表(AnimGraph) 中,你可以使用 混合节点(blend nodes) 将多个原始动画姿势混合在一起,创建出新的动画姿势。

动画姿势混合示例

你可以在混合节点的 姿势输入引脚(pose input pins) 上传入多个动画姿势,然后用节点的 输出姿势引脚(output pose pin) 生成一个混合后的姿势。

输入和输出引脚

一些混合节点可以接收并混合两个以上的动画姿势。你可以在 动画图表(AnimGraph)右键点击 节点并选择 添加混合引脚(Add Blend Pin) 来添加额外的姿势输入引脚。

向混合节点添加混合引脚

右键点击 引脚并选择 移除混合引脚(Remove Blend Pin) ,可以移除多余的姿势输入引脚。

使用混合节点时,你可以使用一个 Alpha值 来控制混合的程度。你可以手动指定混合节点的Alpha值。只要选中变量输入引脚,或者节点的细节面板中的Alpha属性,就可以更改Alpha值。你还可以在 动画图表(AnimGraph) 中将Alpha变量节点连接至Alpha输入引脚来指定混合节点的Alpha。Alpha数值为0时,会偏向采用原始姿势,而数值1时,会偏向采用第二种姿势。

混合节点Alpha引脚

借助更加高级的混合节点,你可以整合更多动画数据,在项目中创造出不同的混合结果。下文介绍了 虚幻引擎 中可用来混合动画姿势的各种混合节点。

混合节点

标准混合节点的名称以灰色显示。它们会根据节点参数,对动画姿势进行简单的混合。下文列出了常用的标准混合节点,可用于在项目的 动画图表(AnimGraph) 中混合动画姿势。

应用叠加型姿势

应用叠加型姿势(Apply Additive)应用网格体空间叠加型姿势(Apply Mesh Space Additive) 会根据Alpha值,在基本动画姿势上叠加姿势。

应用叠加动画混合节点 应用网格体空间叠加混合节点

通过节点输入引脚,可以连接一个 基础 和一个要应用的 叠加 姿势。

应用叠加型姿势(Apply Additive) 节点也受到LOD阈值系统的影响。可以在 应用叠加型姿势(Apply Additive)应用网格体空间叠加型姿势(Apply Mesh Space Additive) 节点的 细节(Details) 面板中找到该设置。

除此以外,你还可以使用 创建动态叠加型姿势(Make Dynamic Additive) 节点来反向混合叠加动画姿势。用这个节点可以从基础姿势减去叠加姿势来创建输出姿势。

创建动态叠加动画混合节点

在制作动态叠加型姿势节点的细节面板中也可以选用让节点在 网格体空间(Mesh Space) 中运行。

混合

标准的混合节点基于一个 Alpha 输入引脚的数值定义的权重简单地混合两个输入姿势。

混合动画混合节点

你可以将动画姿势连接到 AB 输入引脚,然后使用 Alpha 引脚来控制它们之间的混合程度。

根据通道混合骨骼

根据通道混合骨骼(Blend Bone by Channel) 混合节点可以用于指定骨骼来进行特定的混合转换。

根据通道混合骨骼动画混合节点

在根据通道混合骨骼的 细节(Details) 面板中可以点击 (+) 添加 来添加 骨骼定义(Bone Definitions) 分区。创建好后,可以定义要提取转换数据的源骨骼,以及要应用混合目标骨骼。还可以通过切换属性来定义要在混合中加入转换的哪些部分,比如 位移(Translation)旋转(Rotation)缩放(Scale) 。除此以外,还可以定义在哪个 转换空间(Transform Space) 中计算转换数据,比如 世界空间(World Space)组件空间(Component Space)父级骨骼空间(Parent Bone Space) 以及 骨骼空间(Bone Space)

已有的Alpha值会参与控制混合的权重。

Blend Multi

Blend Multi节点可用用于混合两个以上混合姿势,并使用一个范围的Alpha值。

混合多引脚动画混合节点

在Blend Multi的 细节(Details) 面板中,你可以用 Additive节点 属性将节点在是否叠加之间切换。

函数混合节点

函数混合节点分类为绿色标题颜色,可以对动画姿势根据每个节点特定的参数进行基于计算的混合。以下是一系列的基于函数的混合节点的参考,可以在项目的 动画图表(AnimGraph) 里混合动画。

Blend Poses by bool

按布尔值混合姿势(Blend Poses by bool) 节点使用 布尔值 作为键,基于时间混合两个姿势。当布尔值为 true 时,使用与 真姿势(True Pose) 输入引脚相连的姿势;当布尔值为 false 时,使用 False姿势(False Pose) 。每个姿势都有一个浮点值 混合时间(Blend Time) ,用来控制混入这个姿势所需的时间。

按布尔值混合姿势动画混合节点

细节(Details) 面板中,可以切换 混合时间(Blend Time) 引脚在动画图表中否可视,还可以将 转移类型(Transition Type) 属性设为 标准(Standard)惯性化或者混合类型

Blend Poses by int

按整型值混合姿势(Blend Poses by int) 节点使用整数值作为键,基于时间混合任意数量的姿势。对于每个输入整数值,将使用与该值输入引脚关联的姿势。例如,当整数设为0时,将使用与 混合姿势0(Blend Pose 0) 相连的姿势。每个姿势都有一个浮点值 混合时间(Blend Time) ,用来控制混入这个姿势所需的时间。

按整型值混合姿势动画混合节点

细节(Details) 面板中,可以切换 混合时间(Blend Time) 引脚在动画图表中否可视,还可以将 转移类型(Transition Type) 属性设为 标准(Standard)惯性化或者混合类型

Blend Poses by Enumeration (Enum)

按枚举混合姿势(Blend Poses by Enum) 节点将枚举值用作键,并基于时间在姿势间进行混合。可使用默认姿势,也可通过 活跃枚举值(Active Enum Value) 引脚在连接枚举中添加已辨识值的额外姿势。此外,各姿势均具有用于控制混合到姿势所需时长的浮点值 混合时间(Blend Time)

按枚举混合姿势动画混合节点

细节(Details) 面板中,可以切换 混合时间(Blend Time) 引脚在动画图表中否可视,还可以将 转移类型(Transition Type) 属性设为 标准(Standard)惯性化或者混合类型

按骨骼分层混合

按骨骼分层混合(Layered blend per bone) 节点可以用于基于指定的一组骨骼在任意数量的动态混合姿势之间进行混合。

按骨骼分层混合动画混合节点

在"按骨骼分层混合节点"的 细节面板 中,你可以将混合模式定义为 分支筛选器 或者 混合遮罩

按骨骼分层混合动画混合节点细节面板中的混合模式

你可以启用 网格体空间旋转混合(Mesh Space Rotation Blend)网格体空间缩放混合(Mesh Space Scale Blend) 属性,控制 网格体空间(Mesh Space)局部空间(Local Space) 中是否出现 *旋转(Rotation)** 和 **缩放(Scale)** 混合。

借助 曲线混合选项(Curve Blend Options) 属性,你可以在设置列表设置曲线混合行为,控制动画层的混合方式。下面是供你参考的一系列可用 曲线混合选项(Curve Blend Options)

按骨骼分层混合动画混合节点细节面板中的曲线混合选项

混合选项

说明

覆盖(Override)

将此姿势覆盖到包含有效曲线值的上一个姿势。

不覆盖(Do Not Override)

不覆盖该姿势。最适合在所需的前一姿势没有曲线值时使用。

按权重规格化(Normalize by Weight)

按所有混合权重的 总和 将姿势混合规格化。

按权重混合(Blend by Weight)

没有 规格化的情况下按混合权重混合姿势。

使用基础姿势(Use Base Pose)

基础姿势(Base Pose) 用于所有曲线值。

使用最小值(Use Min Value)

从所有连接姿势选择 最高 曲线值,并将其用于混合。

使用最大值(Use Max Value)

从所有连接姿势选择 最低 曲线值,并将其用于混合。

你还可以启用 基于根骨骼混合根骨骼运动(Blend Root Motion Based on Root Bone) 属性,以在混合根骨骼运动时合并 根骨骼 的按骨骼混合权重。

分支筛选器

借助 分支筛选器(Branch Filter) 选项,你可以定义该混合将影响的骨骼 索引(Index)

按骨骼分层混合动画混合节点细节面板中的层设置索引

将元素添加至 分支筛选器(Branch Filters) 属性后,你可以输入骨骼的 骨骼名称(Bone Name) ,用作控制本地化动画混合的参考点。使用 混合深度(Blend Depth) 属性,你可以控制混合对于 骨骼名称(Bone Name) 子骨骼的权重。

示例

说明

正(Positive)

正混合深度值

混合深度(Blend Depth) 值将按相同数量的骨骼抵消权重,并通过 骨骼名称(Bone Name) 链逐渐减少权重。例如,混合深度(Blend Depth) 为2,会将混合权重1应用到下一子骨骼,混合权重0.5应用到 骨骼名称(Bone Name)

零(Zero)

零混合深度值

混合深度(Blend Depth) 值为0会将混合权重1应用于 骨骼名称(Bone Name) 和所有连接的子骨骼。

负(Negative)

零混合深度值

混合深度(Blend Depth) 值将禁用所有 混合姿势(Blend Poses) ,并支持 基础姿势(Base Pose) 。小于-1的值将按相同骨骼数量抵消权重,并通过 骨骼名称(Bone Name) 链逐步减少禁用混合权重。例如,混合深度(Blend Depth) 为-2,会将混合权重-1应用到下一子骨骼,混合权重-0.5应用到 骨骼名称(Bone Name)

混合遮罩

借助 混合遮罩(Blend Mask) 选项,你可以将角色的混合遮罩定义为控制 基础姿势(Base Pose)混合姿势(Blend Poses) 之间混合的参考点。

按骨骼分层混合动画混合节点细节面板中的混合遮罩

惯性化

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

惯性化示例动画

要使用惯性混合,可以在 动画图表(AnimGraph) 中添加一个 惯性化(Inertialization) 节点,位于惯性混合请求源之后的位置。

惯性化节点动画蓝图节点

惯性化节点会追踪姿势运动和曲线变化,以便在激活惯性混合后继续向目标动画移动。此节点由流入源姿势的 惯性混合请求(inertial blend requests) 来激活。状态机过渡混合节点链接动画图表和链接动画层均可触发惯性混合。

惯性化节点必须在惯性混合请求源之后的位置连接,但不一定要紧挨着。将Inertialization节点尽量靠近 输出姿势(Output Pose) 连接,这有助于减少或消除图表中的标准混合,并提高性能。若图表包含惯性化请求但是缺少惯性化节点,将在 消息日志(Message Log) 窗口中记录运行时错误。

惯性化概览示例

一个惯性化节点可以处理多个惯性混合请求。将使用请求的最短混合时长。

考虑惯性混合创作动画和图表时,最好在动画仍处于运动时就开始过渡。由于惯性混合负责处理到休息姿势的自然过渡,因此无需返回中间姿势。由于惯性混合是 后期处理 ,用于将动作过渡到目标动画,因此短混合效果最佳。惯性混合可被其它惯性混合中断,但由于可能要为了保持姿势稳定而削减后续混合时间段,因此应尽量避免导致持续中断的情况。

可根据需要在图表中放置多个惯性化节点,各节点将处理来自源姿势的惯性混合请求。这意味着可在不同空间执行惯性混合。例如,有时需要将角色上半身和下半身的惯性节点分开,后跟 按骨骼分层混合(Layered blend per bone) 节点,接合起来形成最终姿势。应用基础姿势前,可插入惯性化节点,将惯性混合与叠加姿势一起使用。为修复最终姿势,通常要运行惯性化后再运行IK,这相当于是在IK空间中进行惯性混合。

惯性混合开始时源姿势便会停止解析。所以来自源动画序列动画通知将不再会触发。你可能需要重构游戏逻辑来让动画通知和惯性化兼容。

来自混合节点的请求

在兼容惯性化的节点的细节面板中,可以将 转换类型(Transition Type) 属性设置为 惯性化(Inertialization) 。要使用惯性混合,惯性化节点必须放置在混合节点之后。

来自混合节点的请求转换类型

来自状态机过渡的请求

状态机可以发出惯性混合请求。在过渡规则的细节面板中,可以将 混合逻辑(Blend Logic) 属性设为 惯性化(Inertialization)

来自状态机过渡规则的惯性混合请求

来自链接和分层的动画图表的请求

分层动画或者链接动画图表中也可以定义惯性化属性。从我的蓝图面板中选中图表后,在 细节(Details)) 面板的属性中可以找到 图表混合(Graph Blending) 部分。分层动画可以过渡 进入(in) 或者 淡出(out) ,但是只能通过 惯性混合(inertial blending) 实现。惯性化(Inertialization) 节点必须放置在链接该动画蓝图的 链接动画层(Linked Anim Layer) 节点之后。负值意味着混合时间会由另一个输入或输出分层动画决定。

来自动画层混合链接动画图表的惯性混合请求