输入动画文件格式 - MRTK2

整体结构

输入动画二进制文件以 64 位整数幻数开头。 此数字的十六进制表示法为 0x6a8faf6e0f9e42c6,可用于标识有效的输入动画文件。

接下来的八个字节是两个 Int32 值,用于声明文件的主要和次要版本号。

文件的其余部分填充了动画数据,这些数据可能根据版本号的不同而异。

部分 类型
幻数 Int64
主要版本号 Int32
次要版本号 Int32
动画数据 参阅版本部分

版本 1.1

输入动画数据包括三个布尔值(指示动画是否包含相机、手部和眼睛凝视数据),后接动画曲线序列。 呈现的曲线取决于这些布尔变量的值。 每条曲线可以包含不同数量的关键帧。

部分 类型 说明
Has Camera Pose 布尔
Has Hand Data 布尔
Has Eye Gaze 布尔
照相机 姿势曲线 仅当“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 时
Eye Gaze 射线曲线] 仅当“Has Eye Gaze”为 true 时

版本 1.0

输入动画数据由动画曲线序列组成。 动画曲线的数量和含义是固定的,但每条曲线可以包含不同数量的关键帧。

部分 类型
照相机 姿势曲线
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。