Blend sequence
< Zh
Jump to navigation
Jump to search

HLMV的“Sequence”标签可以控制混合。此角色正在向后跑,同时稍微向上瞄准。
一个混合序列是一个$sequence
,它可以根据一个或两个滑动的“混合比例”值,在$animation
之间平滑地移动。这允许动画状态可以通过代码轻松控制。
行走和瞄准方向几乎总是由混合序列决定的。
创建混合序列
混合序列中动画的理想数量取决于动作需要的精确度,以及沿混合比例的变化程度。Valve使用九个动画用于他们的行走混合(见下方示例)。对于生成静止姿势而非动画的混合,可以仅使用每个极端位置的一个动画,但添加一个用于零位置的中央动画可能更易于操作。
准备好动画后,只需将它们以所需顺序列在序列的keyvalue块中。它们将均匀分布在混合比例上。
blend <string name> <float min> <float max>
- 定义一个混合控制器。如果定义了
blendwidth
,第一个控制器向上/向下移动混合,第二个(如果存在)向左/向右移动混合。 - 每个序列最多可以有8个独特的混合控制器。

blendwidth <int width>
- 指定混合包含的动画列数。行数会自动确定。
blendcenter <string sequence>
- 定义在混合中心使用的序列。(0 0) 此序列可以是混合中的任何序列。
blendref <string sequence>
- 定义用于对齐混合的序列。此序列可以是混合中的任何序列。
blendcomp <string|name>
- 待完善: 文档待补充
calcblend <string name> <string attachment> <XR YR ZR>
- 允许编译器基于预定义附件点的旋转来确定混合范围。生成的角度范围将基于附件点的方向,而不是其父骨骼。
混合示例
以下示例创建了一个适用于CBasePlayerAnimState
的九向行走混合。Valve早期的游戏使用八向混合;检查您的游戏现有模型是否具有move_x
/move_y
(九向)或move_yaw
(八向)以确定您需要创建哪种混合。有关八向示例,请参见SDK示例中的HL2模型。
// 在此命令上方定义所有九个walk_* $animations(使用walkframe!)
$sequence walk {
walk_SW walk_S walk_SE
walk_W walk_C walk_E
walk_NW walk_N walk_NE // 换行仅为便于阅读
blendwidth 3
blend move_x -1 1
blend move_y -1 1
addlayer look // 在行走方向之上混合瞄准方向
}
Calcblend示例
以下示例创建了一个九向瞄准混合delta序列,使用calcblend。
// 使用subtract在此命令上方定义所有九个look_* $animations
$sequence look {
lookDR lookD lookDL
lookR "anims\referencepose.smd" lookL
lookUR lookU lookUL
blendwidth 3
calcblend head_yaw "anim_attachment_head" YR
calcblend head_pitch "anim_attachment_head" ZR
delta
}
混合滑块范围的输出值现在应基于定义的附件的相对旋转。
为混合序列制作动画
组成混合序列的单个动画没有特别之处。然而:
- 每个动画的长度相同,并以相同的帧率播放是很重要的
- 如果动画用于移动,使用
walkframe
- 在建模软件中,确保任何根骨骼的关键帧都设置为线性插值(即直线),以避免循环时的速度“晃动”
- 为确保速度与动画完全匹配,请考虑动画的总帧数。例如,一个18帧的跑步循环移动200单位,其速度将为333.33