Blend sequence
< Zh
Jump to navigation
Jump to search
This page needs to be translated.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article tries to comply with the alternate languages guide.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article tries to comply with the alternate languages guide.
一个混合序列是一个$sequence
,它可以根据一个或两个滑动的“混合比例”值,在$animation
之间平滑地移动。这允许动画状态可以通过代码轻松控制。
行走和瞄准方向几乎总是由混合序列决定的。
创建混合序列
混合序列中动画的理想数量取决于动作需要的精确度,以及沿混合比例的变化程度。Valve使用九个动画用于他们的行走混合(见下方示例)。对于生成静止姿势而非动画的混合,可以仅使用每个极端位置的一个动画,但添加一个用于零位置的中央动画可能更易于操作。
准备好动画后,只需将它们以所需顺序列在序列的keyvalue块中。它们将均匀分布在混合比例上。
blend <string name> <float min> <float max>
- 定义一个混合控制器。如果定义了
blendwidth
,第一个控制器向上/向下移动混合,第二个(如果存在)向左/向右移动混合。 - 每个序列最多可以有8个独特的混合控制器。
注意:这实际上会创建一个$poseparameter,具有指定的名称和范围。
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