BVH文件格式解析
2016-03-24 16:44
2586 查看
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
头部部分
头部部分开头包含”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 YrotationBVH格式的运动采取的旋转方式比较特别
-
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解析器参考
Biovision BVH谢谢
相关文章推荐
- 在 Linux 中使用 SoundConverter 轻松转换音频文件格式
- DVI 视频接口图文解析
- rm格式插入广告代码
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- C#自写的一个HTML解析类(类似XElement语法)
- ruby 过程对象 解析
- C#域名解析简单实现方法
- C#判断指定驱动器是否是Fat分区格式的方法
- ruby 类常量 解析
- PHP抓取网页、解析HTML常用的方法总结
- C#简易图片格式转换器实现方法
- C#判断指定分区是否是ntfs格式的方法
- C#实现判断图形文件格式的方法
- JavaScript的代码编写格式规范指南
- 分享ajax的三种解析模式
- 一些javascript一些题目的解析
- Javascript URI 解析介绍
- JS使用eval解析JSON的注意事项分析
- jQuery解析json格式数据简单实例
- Photoshop HD Photo 文件格式插件汉化绿色版 下载