混合空间

本页面的内容:

Blendspaces(混合空间) 是可以在 AnimGraphs(动画图表) 中进行采样的特殊资源,它可以基于两个输入值混合多个动画。基于一个输入值简单地混合两个动画可以使用动画蓝图内其中一个标准的混合节点 来实现。混合空间 提供了基于多个值(目前限定为2个值)对多个动画进行复杂混合的方法。

混合空间 的目标是减少创建一个独立的、硬编码的节点来执行基于多个特定属性或条件的 混合的需要。通过允许动画师或程序员指定 输入值、动画及如何使用输入值混合动画的方法, 使得通过这个通用的 混合空间 几乎可以执行任何类型的动画混合。

混合空间工作原理

混合空间 的目标是减少创建一个独立的、硬编码的节点来执行基于多个特定属性或条件的 动画混合的需要。通过允许动画师或程序员指定 输入值、动画及如何使用输入数据混合动画的方法, 使得通过这个通用的 混合空间 几乎可以执行任何类型的动画混合。这和虚幻引擎3中处理同样任务的动画树 是完全相对的。在动画树中,任何复杂的动画混合都需要创建一个新的 节点进行处理。而 混合空间 是完全通用的,允许在 每个独立的 混合空间 上指定决定该动画混合的因素。每个 混合空间 都具有输入,这些输入可以简单地取入一个值 。在 动画蓝图 (通过事件图表)更新过程中进会计算这些值。 该更新过程由游戏代码或通过其他方法驱动。这使得混合空间非常灵活,赋予了 创建 动画图表 的人真正的控制权,使得他们可以按任何自己感觉合适的方式来混合动画。

Input Flow

您可以把 混合空间 想象成一个二维图表,其中每个输入值沿着一个坐标轴进行显示,动画散布在 图表上的各个位置点处。混合后的动画是通过基于当前输入值指定的位置 混合图表上的多个动画计算而来。

BlendSpaceLayout_2.png

  1. 动画序列 1

  2. 动画序列 2

  3. 动画序列 3

  4. 输入1 坐标轴(X-轴)

  5. 输入2 坐标轴(Y-轴)

举个典型的动画混合例子来说,将定向跑步动画和一个空闲动画 基于玩家的移动方向和速度进行混合。

在虚幻引擎3中,这个动画混合是通过使用定向混合节点和速度混合节点来执行的 。每个节点都是硬编码的,仅能用于那个特定的动画混合。用于执行该动画混合的 值隐藏在代码中,所以除了程序员外其他人不能修改它来调整该动画混合 ;如果您在代码里修改了该值,那么它会影响每个应用了该节点的动画树中的 每个节点实例。这是非常不理想的做法。

通过使用混合空间,同样的动画混合可以通过使用一个单独的 混合空间 来执行。玩家的方向(比如-180到180度) 和速度(比如每秒0到50个单位)会作为输入值传入到 该 混合空间 中,将设置动画基于这些输入值进行 适当的混合。

BlendSpaceDirection.png

除了仅需要一个节点外,还可以在动画蓝图的事件图表中直接计算这些作为输入的值, 然后传入到动画图表中的 混合空间 中。您可以轻松地 调整这些输入值。通过使用图形化的编辑器,可以快速直观地调整动画的阈值 。相比于之前的系统来说,混合空间的灵活性和易用性是个巨大的胜利。

架构

混合空间 的底层架构是非常简单的。主要的部分在前面已经有所接触: 输入值和样本动画。

骨架

和其他动画资源类型一样,每个混合空间针对一个特定的 骨架 。当创建一个 混合空间 并确定了可以在 混合空间 中进行采样的动画时,会设置一个和该 混合空间 相关联的骨架 。它也决定了可以在其中进行 混合空间 采样的 动画蓝图 , 因为它们必须指向同一骨架。

混合参数

混合空间的 Blend Parameters(混合参数) 代表用于驱动样本姿势间进行混合的的输入值 。每个 混合空间 有两个混合参数- XY - ,每个混合参数具有如下属性:

属性 描述
Display Name(显示名称) 输入数据的可读名称, 在 混合编辑器 中沿着该输入值的坐标轴进行显示,且也会显示在 Animation Blueprint(动画蓝图)AnimGraph(动画图表) 中的 混合空间 节点上的该输入值的数据引脚上。
Range(范围) 输入数据所在的最小值和最大值区间范围。
Sample Count(样本数量) 动画数据中用于插值的样本点的数量。值越高,获得的结果越精确。在 混合空间编辑器 中沿着该输入的坐标轴显示为网格线。

样本数据

样本数据中的每一项都具有以下属性:

属性 描述
Animation (动画) 要混合到的动画序列资源。
Sample Value(样本值) 输入值 (和混合参数对应的X、Y和Z),在该处此 动画 具有完全效力。