首先来看看什么叫BVH:Biovision hierarchical data,它是在BVA格式的基础上的改进,在动作捕获后,解析出来的。
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 ………………………………………………
****************************************************
参考资料:
http://www.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html
Motion Capture File Formats Explained.doc
http://www.biovision.com/bvh. html
摘自: http://blog.sina.com.cn/s/blog_4ae49c20010007ih.html