这篇条目有关 Source引擎。如需详情,点击这里。

$sequence

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)
Info content.png
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.

$sequence是一个QC命令,可在所有的 起源 起源 游戏中使用。 该命令用于定义骨骼动画。可单独使用,也可结合一个或多个$animation来利用Source引擎更高级的骨骼动画功能。

Note.png注意:所有包含多边形的模型必须至少有一个$sequence。如果不需要实际动作,最简单的方法是复用参考SMD文件。仅使用$includemodel的模型不需要任何$sequence
待完善: 如果$includemodel中没有定义任何$sequence会发生什么?

用法

$sequence有两种模式:一种直接引用单个骨骼动画(SMD或DMX文件);另一种需要通过中间$animation定义。

Note.png注意:仅当目标游戏包含Dmx转换工具时才能使用DMX格式的骨骼动画。
Note.png注意:$sequence只能识别QC文件中上方定义的$animation
$sequence <名称> <骨骼动画SMD/DMX文件路径> <简单选项> {		// 左花括号必须与命令在同一行
	// 若内部无内容可省略花括号
	<高级选项>
	<动画事件>
	<简单选项>
}
$sequence <名称> <简单选项> {		// 左花括号必须与命令在同一行
	<$animation名称列表>
	<高级选项>
	<动画事件>
	<简单选项>
}

示例

$modelname		"weapons/shell.mdl"
$cdmaterials		"models/weapons/"
$body		shell	"shell-ref"
$sequence idle	"shell-idle"
$animation a_strokechin "strokechin" subtract idle 0

$sequence strokechin {
	a_strokechin
	delta
}
$sequence run_holding_all {
	a_runS a_runSE a_runE a_runNE a_runN_SMG a_runNW a_runW a_runSW a_runS

	blendwidth 9
	blend move_yaw -180 180
	addlayer layer_run_holding
	ACT_RUN_RIFLE 1
	node "running"
}

选项

基础选项

<string|名称>
动画名称。将显示在HLMV、Hammer等工具中。
<string|骨骼动画文件路径>
$sequence的源文件路径。包含此参数表示使用该命令的简单模式。
frame <int|起始帧> <int|结束帧>
frames <int|起始帧> <int|结束帧>
指定从源动画中提取的帧范围。适用于裁剪特定动画中未使用的帧。
例如:若源动画包含80帧(0-79),但该动画只需播放最后30帧,则使用frames 50 79仅加载这些帧。
当起始帧与结束帧相同时可提取单帧动画。
framesframe可互换使用。
Warning.png警告:序列中其他位置使用的帧号(如动画事件)均相对于起始帧
Icon-Bug.png错误:混合序列中,此选项仅影响第一个指定的动画。  [todo tested in ?]
Note.png修复:可将每个动画分离到独立的$animation中,并在其上方使用frame/frames参数指定帧范围。
numframes <int|总帧数>
强制设置动画总帧数,通过裁剪或重复最后一帧实现。
frame/frames联用时,将保留起始帧。若总帧数小于实际帧数则截断,大于则重复最后一帧。
例如:frames 10 12 numframes 12将提取10-12帧,但第12帧会被重复以满足总帧数要求。
Note.png注意:Source引擎动画从第0帧开始,但numframes从1计数。设置numframes为30将包含0-29帧,若需包含到第30帧需设为31。
origin <float|x> <float|y> <float|z>
在局部空间内调整动画位置。
angles <float|x> <float|y> <float|z>
在局部空间内调整动画旋转。
rotate <float|角度>
仅沿Z轴旋转,等同于angles的Z轴分量。
scale <float|缩放比例>
缩放此序列中的骨骼尺寸。允许负值。
reverse 反恐精英:全球攻势(也存在于 Garry's Mod 之中)
反转动画播放方向。
loop
标记为循环动画,StudioMDL会对首尾帧进行优化。
启用后,动画在播放过程中无法被自身中断。
hidden
在用户界面中隐藏该$sequence。适用于仅作为其他动画图层的序列。
noanimation
强制序列使用零权重动画。忽略frame/frames但保留numframes
等效于使用移除所有骨骼权重的$weightlist。适用于创建仅含叠加层的复合序列。
fps <float|帧率>
覆盖动画帧率。默认30。
Note.png注意:此为动画帧率,非屏幕刷新率!
Icon-Bug.png错误:金源中使用负帧率会导致动画异常;起源模型编译器会在帧率小于0时报错终止。  [todo tested in ?]
<string|动作提取轴向>
解决角色"原地行走"动画需求,通过剥离根骨骼位移实现。
可在轴向前添加walkframe <int|动作提取结束帧>来限制提取范围。
Note.png注意:提取始终从动画起始或上一个walkframe开始,到指定帧结束。使用无轴向的walkframe可创建延迟。
Tip.png提示:可通过多个walkframe提升精度。
$sequence sword_attack {
	"knight_anims/sword_attack"
	ACT_SPECIAL_ATTACK1 1
	fadein 0.2
	fadeout 0.2
	fps 30
	walkframe 10 LX LY LZR //从起始到第10帧提取动作
	walkframe 30 LX LY LZR //从第10到30帧提取动作
	LX LY LZR //从第30帧到结尾提取动作
}
可用轴向:
  • X, Y, Z, XR, YR, ZR(R表示旋转)
Warning.png警告:这些轴向可能完全忽略walkframe
  • LX, LY, LZ, LXR, LYR, LZR:根骨骼沿轴向移动至动画中途后返回原位。
    Tip.png提示:可组合使用多个轴向。
  • LM:线性动作提取
  • LQ:二次曲线动作提取
此命令也可用于$animation
activity <string|活动名称> <float|权重>
将序列关联到游戏活动
Tip.png提示:以"ACT_"开头的活动名称可省略activity关键字。
权重决定该序列在活动触发时被选中的概率(权重/总权重)。
例如:权重为2的swing_a和权重为1的swing_b,前者有2/3概率被选中。
Note.png注意:若活动仅关联一个序列,权重无效。
autoplay
使该序列始终在顶层播放,无视其他动画。适用于呼吸等混合动画。
Warning.png警告:勿用于可能正常播放的动画,否则会导致重复播放。
addlayer <string|其他$sequence名称>
在当前序列上叠加播放其他序列。两者同步起止,时长差异会影响叠加层的帧率。被叠加序列无需定义在当前序列上方。
通常用于添加瞄准矩阵delta层或特定骨骼权重层。
blendlayer <string|其他$sequence名称> <int|起始帧> <int|峰值帧> <int|衰减帧> <int|结束帧> [选项...]
类似addlayer,但仅在指定帧范围播放,并支持多种选项。
强度从起始帧0%渐变至峰值帧100%,从衰减帧开始淡出,到结束帧完全消失。
选项:
spline
使用样条曲线渐变
xfade
仅淡入不淡出
poseparameter <string|参数名称>
使用姿势参数控制渐变。示例:
blendlayer aimmatrix -1 0 0 1 poseparameter move_x
参数值: -2.000 -1.500 -1.000 -00.80 -00.60 -00.40 -00.200 000.00 00.200 00.400 00.600 00.800 1.0000 1.5000 2.0000
层权重: 0.000% 0.000% 0.000% 20.00% 40.00% 60.00% 80.00% 100.0% 80.00% 60.00% 40.00% 20.00% 0.000% 0.000% 0.000%
noblend
保持100%强度,忽略序列过渡。
local
将层标记为本地上下文序列,在主序列关键帧应用前混合。
Warning.png警告:除非叠加序列启用realtime,其帧率会适配主序列时长。
worldspace
作为图层时,以世界空间计算骨骼位置。
Note.png注意:使用weightlist时根骨骼权重不可为0。
待完善: 实际效果?
worldspaceblend
待完善: 待文档化
snap
过渡到该动画时取消所有混合。适用于突然状态变化(如受击动作)。
Note.png注意:快速重复动画(如步枪开火)使用此选项可能导致卡顿,建议改用fadein 0.05
realtime
同步动画时钟与地图时间。适用于呼吸等独立速率图层。
Warning.png警告:所有使用此选项的模型将全局同步!建议仅用于视图模型等唯一实体。
fadein <float|秒数>
设置淡入时长。默认0.2秒。
Note.png注意:fadein 0等效snap,但HLMV不会识别为snap。
fadeout <float|秒数>
设置淡出时长。默认0.2秒。
weightlist <string|权重列表名称>
应用权重列表。若存在默认权重列表将被覆盖。
worldrelative (存在于自 反恐精英:全球攻势 以来)
待完善: 待文档化
localhierarchy <string|骨骼名称> <string|新父骨骼名称> [range <int|起始帧> <int|峰值帧> <int|衰减帧> <int|结束帧>]
临时修改骨骼层级关系。""表示移除父骨骼。
用于优化混合抖动(如武器换手动画)。需配合snap使用。
compress <int|跳帧数>
仅存储指定间隔的动画帧(从0开始)。值≤1无效。
posecycle <string|姿势参数>
使用姿势参数控制动画帧。适用于创建线性混合序列。
示例(参数范围-180~180,动画9帧):
参数值: -180.0 -135.0  -90.0  -45.0    0.0   45.0   90.0  135.0  180.0
动画帧:     0      1      2      3      4      5      6      7      8
Warning.png警告:未用$poseparameter预声明参数将导致范围错误。

高级选项

除基础选项外:

delta
表示引用的$animation已进行subtract处理。该序列将在当前动画上层叠加播放。
Warning.png警告:未正确使用subtract将导致异常!
predelta
配合"presubtract"使用,改变骨骼动画合成基准。
blend <string|名称> <float|最小值> <float|最大值>
blendwidth <int|宽度>
blendref <string|名称>
blendcomp <string|名称>
blendcenter <string|名称>
calcblend <string 名称> <string 附着点> <XR YR ZR>
详见混合序列
ikrule
反向运动学链
iklock
锁定反向运动学链中的指定骨骼。
activitymodifier <string|修饰符> (存在于自 异形丛生 以来) (也存在于 起源2013 多人分支 之中)
待完善: 待文档化

杂项

node (名称)
标记序列在状态图中的节点位置。循环动画常用此标签。同节点序列间无需过渡动画。
transition (来源节点) (目标节点)
声明该序列为过渡动画(如行走转站立)。
rtransition (名称1) (名称2)
可逆过渡动画。曾用于半衰期触手怪,不建议常规使用。[原因?]
exitphase (相位)
声明循环动画的过渡起始相位。
Warning.png警告:实际未实现
$skiptransition (名称1) (名称2) [(名称3)...]
允许指定节点间直接过渡(如行走转奔跑无需经过站立状态)。
keyvalues { [内容] }
为序列添加键值块(用于Faceposer手势设置)。

事件

可在$sequence中定义动画事件

$sequence tentacle_grab "tentacle_grab" {
  fps 15
  { event 1000 1 }
  { event 1004 4 "*scientist/scream02.wav" }
  { event 1003 18 "smash" }
  { event 1004 65 "*scientist/c1a4_sci_tent.wav" }
}