1. 程式人生 > >【譯】BVH,Biovision hierarchy 關於BVH 檔案型別

【譯】BVH,Biovision hierarchy 關於BVH 檔案型別

這是一篇翻譯,因為要了解一些BVH,看到一篇文章還不錯,也不長,就邊翻譯邊記錄一下吧。

原文連結: http://www.mindfiresolutions.com/BVH-biovision-hierarchy.htm

原文作者:Manjunath

背景:

原文作者要將動畫資料匯出到 .bvh檔案中,沒有相關的SDK來寫bvh檔案,所以他就寫了一個C++來匯出animation data到bvh的程式碼。

BVH 介紹

BVH是一種動畫格式,使用ROOT,JOINTS,OFFSET等術語來儲存動畫資料。

BVH 格式

【一張鬼畜的圖,不說這個圖魔性的時候都看不出來靈魂畫手畫的是啥。】


BVH Sample File

下面給出了一個非常簡單的bvh檔案的內容

—————————————— bvh sample ————————————————————————

HIERARCHY

ROOT Neck

{

OFFSET 0.000000 0.000000 0.000000

CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation

JOINT Head

{

OFFSET 0.200000 0.400000 0.500000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.600000 8.000000 2.000000

}

}

}

MOTION

Frames: 1

Frame Time: 0.040000

0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

BVH的詳細介紹

一個bvh檔案包含兩個部分:Hierarchy 和 Motion

1. Hierarchy 骨骼層次

  • BVH 檔案以 HIERARCHY 關鍵詞開始,這個部分包含了Root 根節點 和 Joints 骨骼。 以及他們的channels。(注:這個channels和Assimp中的channels是一個概念,但是我說不出來具體是啥!)
  • Root 節點同時包含 Position channels 和 Rotation channels,我理解的是根骨骼是控制人體整個的運動,因此是可以有平移,也有旋轉的變換的。
  • 而Joint 骨骼 只有 Rotation channels,除了Root骨骼之外的,只能有旋轉變換。

2. Motion 運動資料相關內容

  • 這個部分包含了動畫相關的資料,包括了 Frames:幀數,Frame Time: 幀率, 以及最重要的運動資料。每一行運動資料代表了一個,完整的幀,有所有骨骼的當前幀的運動資料。
  • 一行運動資料 = Root channels + Joint channels

so,根據上面的 bvh 檔案樣例, 我們可以將運動資料和骨骼相對映:如下:

Neck        Neck     Neck        Neck      Neck      Neck       Head       Head     Head

X pos        Y pos     Z pos       Z rot      X rot      Y rot       Z rot      X rot      Y rot

0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

BVH 使用的關鍵詞(Legends,i _ i 這樣譯感覺有點怪)

  •  HIERARCHY : 第一部分開始的宣告
  •  Root: 根骨骼
  •  Joint: 子骨骼
  •  Channels: 一個 Root 或 Joint的 channel(position ,rotation)的數量
  •  Offset: 子骨骼到父骨骼的偏移量,包含了長度和方向資訊。
  •  End Site: 一個骨骼資訊的結束標識
  •  MOTION: motion部分的開始宣告
  •  FRAMES: 幀數
  •  Frame Time: 資料的取樣率,幀率吧

原始碼(未驗證)就不貼了,貼出來格式就亂,見原文

參考文獻