BVH檔案格式解析
BVH檔案解析
簡介
BVH是BioVision等裝置對人體運動進行捕獲後產生檔案格式的副檔名。
BVH檔案包含角色的骨骼和肢體關節旋轉資料。BVH 是一種通用的人體特徵動畫檔案格式,廣泛地被當今流行的各種動畫製作軟體支援,如3DMax。
檔案格式
檔案主要部分
骨架資訊 和 資料塊
- 骨架資訊:按照層次關係,定義瞭如root hip leg等位置和旋轉分量,從而形成一個完整的骨架
- 資料塊:對應上面的骨架各部位標出每幀的資料資訊
一個BVH檔案包含兩部分,頭部部分和資料部分,頭部部分描述了骨架的層次關係和初始姿勢,資料部分包含了動作(motion)的資料.
檔案示例
可以參考檔案示例
HIERARCHY
ROOT Hips
{
OFFSET 0.00 0.00 0.00
CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
JOINT Chest
{
OFFSET 0.00 5.21 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Neck
{
OFFSET 0.00 18.65 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Head
{
OFFSET 0.00 5.45 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.00 3.87 0.00
}
}
}
JOINT LeftCollar
{
OFFSET 1.12 16.23 1.87
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftUpArm
{
OFFSET 5.54 0.00 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftLowArm
{
OFFSET 0.00 -11.96 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftHand
{
OFFSET 0.00 -9.93 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.00 -7.00 0.00
}
}
}
}
}
JOINT RightCollar
{
OFFSET -1.12 16.23 1.87
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT RightUpArm
{
OFFSET -6.07 0.00 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT RightLowArm
{
OFFSET 0.00 -11.82 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT RightHand
{
OFFSET 0.00 -10.65 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.00 -7.00 0.00
}
}
}
}
}
}
JOINT LeftUpLeg
{
OFFSET 3.91 0.00 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftLowLeg
{
OFFSET 0.00 -18.34 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftFoot
{
OFFSET 0.00 -17.37 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.00 -3.46 0.00
}
}
}
}
JOINT RightUpLeg
{
OFFSET -3.91 0.00 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT RightLowLeg
{
OFFSET 0.00 -17.63 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT RightFoot
{
OFFSET 0.00 -17.14 0.00
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.00 -3.75 0.00
}
}
}
}
}
MOTION
Frames: 2
Frame Time: 0.033333
8.03 35.01 88.36 -3.41 14.78 -164.35 13.09 40.30 -24.60 7.88 43.80 0.00 -3.61 -41.45 5.82 10.08 0.00 10.21 97.95 -23.53 -2.14 -101.86 -80.77 -98.91 0.69 0.03 0.00 -14.04 0.00 -10.50 -85.52 -13.72 -102.93 61.91 -61.18 65.18 -1.57 0.69 0.02 15.00 22.78 -5.92 14.93 49.99 6.60 0.00 -1.14 0.00 -16.58 -10.51 -3.11 15.38 52.66 -21.80 0.00 -23.95 0.00
7.81 35.10 86.47 -3.78 12.94 -166.97 12.64 42.57 -22.34 7.67 43.61 0.00 -4.23 -41.41 4.89 19.10 0.00 4.16 93.12 -9.69 -9.43 132.67 -81.86 136.80 0.70 0.37 0.00 -8.62 0.00 -21.82 -87.31 -27.57 -100.09 56.17 -61.56 58.72 -1.63 0.95 0.03 13.16 15.44 -3.56 7.97 59.29 4.97 0.00 1.64 0.00 -17.18 -10.02 -3.08 13.56 53.38 -18.07 0.00 -25.93 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
頭部部分
頭部部分開頭包含”HIERARCHY“關鍵詞
接著一行開頭為”ROOT”關鍵詞,後面跟著root的名字.當然,一個root段(segment)之後,允許再定義另一個段,也可以定義為”ROOT”.原理上,BVH檔案能夠包含任何數量的骨架段.
BVH檔案的格式為遞迴的格式,層次結構的每一個segment包含了一些相關資料,該segment要遞迴定義它的子segment.
關鍵詞”ROOT“後以大括號開頭,下行以tab填充,能夠增加可讀性.
segment的第一個資訊是該segment相對於父segment的偏移量(OFFSET), 如果是根ROOT segment則偏移量OFFSET則通常為0,OFFSET指定了X,Y,Z方向上與父segment的偏移量,偏移量也指示用於繪製父segment的長度和方向.
BVH檔案中沒有明確的資訊能夠描述一個segment該怎樣畫,通常通過從第一個segment的偏移量來定義父segment,典型的,只有ROOT和上部主體的segment將有多個子segment.
接下來一是”CHANNEL“頭部資訊,後面跟著的數字表明channels的數目,後面的標籤表明每一個channel的型別.
一個BVH檔案解析器必須跟蹤channel的數目和channel的型別,在後面MOTION資訊被解析的時候,這個順序在解析每一行的MOTION資料的時候需要用到.這種格式規定很明顯具有靈活性,能夠允許segment擁有任何數目的channel,且能夠按照任何順序.
channel旋轉的次序是:Z X Y,
接下來能看到”JOINT“和”END SITE“關鍵詞,一個JOINT的定義和ROOT的定義是相同的,除了CHANNEL的數目不同,JOINT正是遞迴開始的地方,剩下部分對JOINT的解析和ROOT一樣的.
END SITE結束了遞迴,它的定義還包含了一些資料,它提供了前segment的長度,就像前面子segment提供了offset用於繪製父segment的長度和方向
JOINT的結尾以右括號結束,BVH中,空間被定義成了右旋座標系與Y軸作為世界向量.
資料部分
資料部分以”MOTION”“*開頭,後面的數字表示了幀率,下一行”**Frame Time“定義了取樣頻率
檔案剩餘的部分包含了motion的資料,每一行是一個motion資料的樣本, The numbers appear in the order of the channel specifications as the skeleton hierarchy was parsed.
關鍵詞
HIERARCHY
: 開頭ROOT
: 根關節JOINT
: 根關節下的關節OFFSET
: 子關節相對父關節的偏移,也可以表示對應父關節的長度和方向,當子關節不止一個時,採用第一個子關節的資料.CHANNELS
: 給出了關於channel的個數和名稱(ROOT總是擁有6個channels,而一般JOINT只有3個,較之ROOT缺少了XYZ的position資訊,因為子關節只需要根據它相對於父關節的偏移就可以算出它在座標系中的具體位置了)
注意
- rotation channel的順序是:Zrotation Xrotation Yrotation
- BVH格式的運動採取的旋轉方式比較特別
-End Site
表示終結遞迴,該關節的定義到此為止,可看作一個終端效應器 - 資料塊以
MOTION
關鍵字開始
-Frames
: 定義幀數,Frame Time
:定義資料取樣速率-每幀的時間長度,如0.033333則表示BVH檔案的一般取樣速率,每秒30幀 - 接下來的資料就是實際的運動資料,對應骨架資訊的層次結構
- 對於子關節來說,平移資訊儲存在骨架資訊的OFFSET中,旋轉資訊則來自於MOTION部分;
- 對於根結點來說,平移量是OFFSET和Motion section中定義的平移量之和。
- BVH不考慮Scale變換。
資料
計算segment的位置,需要從區域性的平移和旋轉資訊建立一個變換矩陣.對於任何joint,平移的資訊將會是層次部分中定義的offset,旋轉資訊則從motion部分得到
對於根ROOT,平移資料為offset的總和,而旋轉的訊息來自motion部分,BVH不需要考慮比例因子的計算.
建立變換矩陣的直接方法是建立3個單獨的旋轉矩陣,每個矩陣對應每根軸 VR = vYXZ
解析器
可以參考:BVH java解析器
參考
謝謝
相關文章
- java class 檔案格式解析Java
- MP4檔案格式解析
- Qt的.pro檔案格式解析QT
- Java解析ELF檔案:ELF檔案格式規範Java
- PE檔案格式詳細解析(一)
- PE檔案格式詳細解析(二)--IAT
- 如何將Excel檔案解析為json格式ExcelJSON
- mysql程式碼閱讀-frm檔案格式解析MySql
- Java二進位制Class檔案格式解析Java
- ZooKeeper原始碼解析(5)-Snapshot檔案的格式原始碼
- smali 檔案格式
- elf檔案格式
- FastQ檔案格式AST
- Cron檔案格式
- PE檔案格式
- 檔案流下載檔案,zip/其他格式檔案
- JPEG格式研究——(2)JPEG檔案格式
- windows文字檔案格式?Windows
- LDS檔案格式分析
- Photoshop檔案格式(轉)
- office檔案格式複合文件二進位制結構解析
- Android逆向之旅---解析編譯之後的Dex檔案格式Android編譯
- PE檔案格式詳細解析(六)-- 基址重定位表(Base Relocation Table)
- [軟考考點解析]軟體設計師--常用媒體檔案格式
- 配置歸檔位置和檔案格式
- 檔案開啟的格式
- Class 檔案格式詳解
- 開啟.ziw格式檔案
- hive檔案儲存格式Hive
- fepk檔案格式說明
- 關於 ylepub 檔案格式
- .tpk格式檔案簡介
- RMAN備份檔案格式
- MIDI 檔案格式 (轉)
- COFF檔案的格式 (轉)
- eml檔案解析
- Class檔案解析
- Android逆向之旅---解析編譯之後的AndroidManifest檔案格式Android編譯