輸入動畫檔案格式 — MRTK2

整體結構

輸入動畫二進位檔的開頭為 64 位整數魔術數位。 這個數位在十六進位標記法中的值是 0x6a8faf6e0f9e42c6 ,可用來識別有效的輸入動畫檔案。

接下來八個位元組是兩個 Int32 值,宣告檔案的主要和次要版本號碼。

其餘檔案是由動畫資料所佔用,這可能會在版本號碼之間變更。

區段 類型
魔術數位 Int64
主要版本號碼 Int32
次要版本號碼 Int32
動畫資料 請參閱版本一節

1.1 版

輸入動畫資料包含三個布林值,指出動畫是否包含相機、手部和眼球注視資料,後面接著一連串的動畫曲線。 曲線存在取決於這些布林值的值。 每個曲線可以有不同的主要畫面格數目。

區段 類型 注意
具有相機姿勢 Boolean
具有手部資料 Boolean
有眼球注視 Boolean
相機 姿勢曲線 只有當具有相機為 true 時
手部追蹤向左 布林曲線 只有當 Has Hand Data 為 true 時
手部追蹤向右 布林曲線 只有當 Has Hand Data 為 true 時
手部捏合向左 布林曲線 只有當 Has Hand Data 為 true 時
手部捏合向右 布林曲線 只有當 Has Hand Data 為 true 時
手部接合向左 聯合姿勢曲線 只有當 Has Hand Data 為 true 時
手部右合 聯合姿勢曲線 只有當 Has Hand Data 為 true 時
眼球注視 光線曲線] 只有當有眼球注視為 true 時

版本 1.0

輸入動畫資料是由動畫曲線序列所組成。 動畫曲線的數目和意義是固定的,但每個曲線可以有不同的主要畫面格數目。

區段 類型
相機 姿勢曲線
手部追蹤向左 布林曲線
手部追蹤向右 布林曲線
手部捏合向左 布林曲線
手部捏合向右 布林曲線
手部接合向左 聯合姿勢曲線
手部右合 聯合姿勢曲線

聯合姿勢曲線

針對每一手,會儲存一連串的聯合動畫曲線。 聯結的數目是固定的,而且會為每個聯合儲存一組姿勢曲線。

區段 類型
姿勢曲線
手腕 姿勢曲線
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 個旋轉四元數的動畫曲線。

區段 類型
位置 X 浮點曲線
位置 Y 浮點曲線
位置 Z 浮點曲線
旋轉 X 浮點曲線
旋轉 Y 浮點曲線
旋轉 Z 浮點曲線
旋轉 W 浮點曲線

光線曲線

光線曲線是原向量 3 個動畫曲線的序列,後面接著 3 個方向向量的動畫曲線。

區段 類型
Origin X 浮點曲線
原始 Y 浮點曲線
原始 Z 浮點曲線
方向 X 浮點曲線
方向 Y 浮點曲線
方向 Z 浮點曲線

浮點曲線

浮點曲線是具有可變主要畫面格數目的完整 Bézier 曲線。 每個主要畫面格都會儲存時間與曲線值,以及每個主要畫面格左邊和右邊的正切和權數。

區段 類型
預先包裝模式 Int32、 包裝模式
後置換行模式 Int32、 包裝模式
主要畫面格數目 Int32
關鍵 幀 浮點數主要畫面格

浮點數主要畫面格

浮點數主要畫面格會與基本時間和值一起儲存正切值和加權值。

區段 類型
時間 Float32
Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, 加權模式

布林曲線

布林曲線是開啟/關閉值的簡單序列。 在每個主要畫面格上,曲線的值會立即翻轉。

區段 類型
預先包裝模式 Int32、 包裝模式
後置換行模式 Int32、 包裝模式
主要畫面格數目 Int32
關鍵 幀 布林主要畫面格

布林主要畫面格

布林主要畫面格只會儲存時間和值。

區段 類型
時間 Float32
Float32

包裝模式

Pre-and Post-Wrap 模式的語意遵循 Unity WrapMode 定義。 它們是下列位的組合:

意義
0 預設值:讀取預設的重複模式設定較高。
1 一次:當時間到達動畫剪輯的結尾時,剪輯會自動停止播放,並將時間重設為剪輯的開頭。
2 Loop:當時間到達動畫剪輯的結尾時,時間會繼續在開頭。
4 PingPong:當時間到達動畫剪輯的結尾時,時間會在開始和結束之間 ping pong。
8 ClampForever:播放動畫。 到達結尾時,它會持續播放最後一個畫面,永遠不會停止播放。

加權模式

加權模式的語意遵循 Unity WeightedMode 定義。

意義
0 無:計算曲線區段時排除 inWeight 或 outWeight。
1 在:計算前一個曲線線段時,包含 inWeight。
2 Out:計算下一個曲線線段時包含 outWeight。
3 兩者:在計算曲線區段時包含 inWeight 和 outWeight。