整体结构
输入动画二进制文件以 64 位整数幻数开头。 此数字的十六进制表示法为 0x6a8faf6e0f9e42c6
,可用于标识有效的输入动画文件。
接下来的八个字节是两个 Int32 值,用于声明文件的主要和次要版本号。
文件的其余部分填充了动画数据,这些数据可能根据版本号的不同而异。
部分 | 类型 |
---|---|
幻数 | Int64 |
主要版本号 | Int32 |
次要版本号 | Int32 |
动画数据 | 参阅版本部分 |
版本 1.1
输入动画数据包括三个布尔值(指示动画是否包含相机、手部和眼睛凝视数据),后接动画曲线序列。 呈现的曲线取决于这些布尔变量的值。 每条曲线可以包含不同数量的关键帧。
部分 | 类型 | 说明 |
---|---|---|
Has Camera Pose | 布尔 | |
Has Hand Data | 布尔 | |
Has Eye Gaze | 布尔 | |
Camera | 姿势曲线 | 仅当“Has Camera Pose”为 true 时 |
Hand Tracked Left | 布尔曲线 | 仅当“Has Hand Data”为 true 时 |
Hand Tracked Right | 布尔曲线 | 仅当“Has Hand Data”为 true 时 |
Hand Pinching Left | 布尔曲线 | 仅当“Has Hand Data”为 true 时 |
Hand Pinching Right | 布尔曲线 | 仅当“Has Hand Data”为 true 时 |
Hand Joints Left | 关节姿势曲线 | 仅当“Has Hand Data”为 true 时 |
Hand Joints Right | 关节姿势曲线 | 仅当“Has Hand Data”为 true 时 |
眼部凝视 | 射线曲线] | 仅当“Has Eye Gaze”为 true 时 |
版本 1.0
输入动画数据由动画曲线序列组成。 动画曲线的数量和含义是固定的,但每条曲线可以包含不同数量的关键帧。
部分 | 类型 |
---|---|
Camera | 姿势曲线 |
Hand Tracked Left | 布尔曲线 |
Hand Tracked Right | 布尔曲线 |
Hand Pinching Left | 布尔曲线 |
Hand Pinching Right | 布尔曲线 |
Hand Joints Left | 关节姿势曲线 |
Hand Joints Right | 关节姿势曲线 |
关节姿势曲线
对于每只手,将存储关节动画曲线序列。 关节的数量是固定的,将为每个关节存储一组姿势曲线。
部分 | 类型 |
---|---|
无 | 姿势曲线 |
Wrist | 姿势曲线 |
Palm | 姿势曲线 |
ThumbMetacarpalJoint | 姿势曲线 |
ThumbProximalJoint | 姿势曲线 |
ThumbDistalJoint | 姿势曲线 |
ThumbTip | 姿势曲线 |
IndexMetacarpal | 姿势曲线 |
IndexKnuckle | 姿势曲线 |
IndexMiddleJoint | 姿势曲线 |
IndexDistalJoint | 姿势曲线 |
IndexTip | 姿势曲线 |
MiddleMetacarpal | 姿势曲线 |
MiddleKnuckle | 姿势曲线 |
MiddleMiddleJoint | 姿势曲线 |
MiddleDistalJoint | 姿势曲线 |
MiddleTip | 姿势曲线 |
RingMetacarpal | 姿势曲线 |
RingKnuckle | 姿势曲线 |
RingMiddleJoint | 姿势曲线 |
RingDistalJoint | 姿势曲线 |
RingTip | 姿势曲线 |
PinkyMetacarpal | 姿势曲线 |
PinkyKnuckle | 姿势曲线 |
PinkyMiddleJoint | 姿势曲线 |
PinkyDistalJoint | 姿势曲线 |
PinkyTip | 姿势曲线 |
姿势曲线
姿势曲线是位置向量的由 3 条动画曲线组成的序列,后接旋转四元数的 4 条动画曲线。
部分 | 类型 |
---|---|
Position X | 浮点曲线 |
Position Y | 浮点曲线 |
Position Z | 浮点曲线 |
Rotation X | 浮点曲线 |
Rotation Y | 浮点曲线 |
Rotation Z | 浮点曲线 |
Rotation W | 浮点曲线 |
射线曲线
射线曲线是原点向量的由 3 条动画曲线组成的序列,后接方向向量的 3 条动画曲线。
部分 | 类型 |
---|---|
Origin X | 浮点曲线 |
Origin Y | 浮点曲线 |
Origin Z | 浮点曲线 |
Direction X | 浮点曲线 |
Direction Y | 浮点曲线 |
Direction Z | 浮点曲线 |
浮点曲线
浮点曲线是包含可变数量的关键帧的完备 Bézier 曲线。 每个关键帧存储一个时间值和一个曲线值,以及每个关键帧左侧和右侧的正切和权重。
部分 | 类型 |
---|---|
Pre-Wrap Mode | Int32,包装模式 |
Post-Wrap Mode | Int32,包装模式 |
Number of keyframes | Int32 |
关键帧 | 浮点关键帧 |
浮点关键帧
浮点关键帧存储与基本时间和值并列的正切和权重值。
部分 | 类型 |
---|---|
时间 | Float32 |
值 | Float32 |
InTangent | Float32 |
OutTangent | Float32 |
InWeight | Float32 |
OutWeight | Float32 |
WeightedMode | Int32,加权模式 |
布尔曲线
布尔曲线是开/关值的简单序列。 在每个关键帧上,曲线的值会立即翻转。
部分 | 类型 |
---|---|
Pre-Wrap Mode | Int32,包装模式 |
Post-Wrap Mode | Int32,包装模式 |
Number of keyframes | Int32 |
关键帧 | 布尔关键帧 |
布尔关键帧
布尔关键帧仅存储时间和值。
部分 | 类型 |
---|---|
时间 | Float32 |
值 | Float32 |
包装模式
前包装和后包装模式的语义遵循 Unity WrapMode 定义。 它们是以下位的组合:
值 | 含义 |
---|---|
0 | Default:读取在更高级别设置的默认重复模式。 |
1 | Once:当时间到达动画剪辑的末尾时,剪辑将自动停止播放,时间将重置为剪辑的开头。 |
2 | Loop:当时间到达动画剪辑的结尾时,时间从开头继续。 |
4 | PingPong:当时间到达动画剪辑的末尾时,时间在开头与末尾之间弹跳。 |
8 | ClampForever:播放动画。 到达末尾时,将持续播放最后一帧,而永不停止播放。 |
加权模式
加权模式的语义遵循 Unity WeightedMode 定义。
值 | 含义 |
---|---|
0 | None:计算曲线段时同时排除 inWeight 和 outWeight。 |
1 | In:计算前一条曲线段时包括 inWeight。 |
2 | Out:计算下一条曲线段时包括 outWeight。 |
3 | Both:计算曲线段时包括 inWeight 和 outWeight。 |