首先来看看什么叫BVH:Biovision hierarchical data,它是在BVA格式的基础上的改进,在动作捕获后,解析出来的。
BVH文件分为2个主要部分:骨架信息和数据块。
BVH文件分为2个主要部分:骨架信息和数据块。
骨架信息 按照层级关系,定义了root hip leg等位置和旋转分量,从而形成一个完整的骨架
数据块
对应上面的骨架各部位,标出每帧的数据信息.
数据块
BVH的骨架信息是以关键字‘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变换。
vR = vYXZ
vM = vMchildMparentMgrandpare
nt...?
下面给出一个具体的BVH文件例子
HIERARCHY
ROOT
Hips
{
OFFSET
0.00
0.00
0.00
CHANNELS
6
Xposition
Yposition
Zposition
Zrotation
Xrotation
Yrotation
JOINT
Chest
{
OFFSET
0.000000
6.275751
0.000000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
Neck
{
OFFSET
0.000000
14.296947
0.000000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
Head
{
OFFSET
0.000000
2.637461
0.000000
CHANNELS
3
Zrotation
Xrotation
Yrotation
End
Site
{
OFFSET
0.000000
4.499004
0.000000
}
}
}
JOINT
LeftCollar
{
OFFSET
1.120000
11.362855
1.870000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
LeftUpArm
{
OFFSET
4.565688
2.019026
-1.821179
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
LeftLowArm
{
OFFSET
0.219729
-10.348825
-0.061708
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
LeftHand
{
OFFSET
0.087892
-10.352228
2.178217
CHANNELS
3
Zrotation
Xrotation
Yrotation
End
Site
{
OFFSET
0.131837
-6.692379
1.711456
}
}
}
}
}
JOINT
RightCollar
{
OFFSET
-1.120000
11.362855
1.870000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
RightUpArm
{
OFFSET
-4.708080
2.034554
-1.821179
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
RightLowArm
{
OFFSET
-0.263676
-10.428555
-0.061708
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
RightHand
{
OFFSET
0.000000
-10.255345
2.178217
CHANNELS
3
Zrotation
Xrotation
Yrotation
End
Site
{
OFFSET
-0.140882
-6.671274
1.711456
}
}
}
}
}
}
JOINT
LeftUpLeg
{
OFFSET
3.910000
0.000000
0.000000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
LeftLowLeg
{
OFFSET
-0.441177
-17.569450
1.695613
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
LeftFoot
{
OFFSET
-0.043946
-17.197315
-1.478076
CHANNELS
3
Zrotation
Xrotation
Yrotation
End
Site
{
OFFSET
0.000000
-3.933155
5.233925
}
}
}
}
JOINT
RightUpLeg
{
OFFSET
-3.910000
0.000000
0.000000
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
RightLowLeg
{
OFFSET
0.437741
-17.622387
1.695613
CHANNELS
3
Zrotation
Xrotation
Yrotation
JOINT
RightFoot
{
OFFSET
0.000000
-17.140001
-1.478076
CHANNELS
3
Zrotation
Xrotation
Yrotation
End
Site
{
OFFSET
0.000000
-4.038528
5.233925
}
}
}
}
}
MOTION
Frames:
768
Frame
Time:
0.04166667
-0.690203
6.425720
-10.584737
52.229530
-74.102905
54.238834
179.649963
-17.666151
-167.372177
129.716003
46.167301
78.632637
-139.149429
-18.268711
28.597200
13.089351
32.271912
-108.242935
-66.612633
-14.377330
172.605774
127.224365
7.939627
-35.629566
-77.307808
-16.582474
-16.542961
-34.179745
26.302034
121.727943
71.693901
-24.250698
36.331078
122.765602
-3.186730
-170.904297
-118.339615
-23.554710
168.573349
-62.883366
59.182331
0.000000
178.561584
5.510769
-166.239227
156.483154
28.179045
13.528916
-36.220818
-17.497885
15.374095
-136.325714
4.534697
-96.979958
-65.439178
-27.717817
-32.005501
………………………………………………


















































































































****************************************************
参考资料:
参考资料:
Motion Capture File Formats Explained.doc