BVH全称为“Biovision Hierarchy”,是一种用于描述人体骨骼动作的文件格式。在3D/BIM行业中,BVH文件主要被应用于动画制作、虚拟现实、人体运动分析等方面。
BVH文件采用ASCII编码格式,可以使用任何文本编辑器来查看和编辑。BVH文件由两部分组成:层次结构描述和关键帧数据。
BVH文件的开头部分是层次结构描述,它定义了人体骨骼结构的层次关系。BVH文件中的每一个部分都以关键词开始。
例如:
HIERARCHY
ROOT Hips
{
OFFSET 0 0 -0.07 // 骨骼坐标偏移量
CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation // 关键帧数据包括6个通道
JOINT LowerBack
{
OFFSET 0 0.14 0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Spine
{
OFFSET 0 0.25 0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftShoulder
{
OFFSET 0.15 0.2 0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftArm
{
OFFSET 0.28 0 0
CHANNELS 3 Yrotation Xrotation Zrotation
JOINT LeftForeArm
{
OFFSET 0.425 0 0
CHANNELS 3 Yrotation Xrotation Zrotation
JOINT LeftHand
{
OFFSET 0.325 0 0
CHANNELS 3 Yrotation Xrotation Zrotation
End Site
{
OFFSET 0.15 0 0
}
}
}
}
}
}
}
}
层次结构描述的最后部分是根节点(ROOT),它包含整个骨骼结构的根节点,并定义了根节点的偏移量。在根节点之下,可以定义一系列的节点和骨骼,它们的关系也由层次描述中的 JOINT 关键字定义。每个 JOINT 也都有它自己的属性,例如 OFFSET 和 CHANNELS。
关键帧数据是BVH文件的第二部分,它定义了每个时间节点上人体骨骼的状态以及各个骨骼在该时间节点上的旋转角度等信息。
关键帧数据的数量等于动画的帧数。每个关键帧由一行数字组成,每个数字对应于一个骨骼或根节点的旋转角度。例如:
Frame 1:
0.000 -0.004 0.004 72.657 -7.864 5.978 5.824 -90.000 -57.392 47.388 -0.316 -48.667 175.001 -130.722 92.458 0.000 2.402 -151.721 -16.358 -85.890 -21.527 22.398 -89.896 -184.541 -64.025 -176.288 -46.535 27.400 88.676
Frame 2:
0.000 -0.007 0.007 72.585 -9.146 3.221 3.934 -90.000 -57.410 47.312 -0.032 -48.918 177.167 -126.741 90.555 0.000 0.622 -151.931 -15.500 -85.371 -22.157 25.427 -89.010 -181.719 -63.345 -174.531 -44.743 27.303 88.708
BVH文件格式是开放的,可以在很多地方找到标准的文件描述。下面是一些通用的规范链接:
以下是一个简单的BVH文件示例,可以用来描述一个包括头部和手臂的人体骨骼结构。
HIERARCHY
ROOT Hips
{
OFFSET 0.0000 0.0000 0.0000
CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
JOINT Spine
{
OFFSET 0.0000 2.0000 0.0000
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT LeftArm
{
OFFSET 1.0000 0.0000 0.0000
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.0000 0.0000 0.0000
}
}
JOINT RightArm
{
OFFSET -1.0000 0.0000 0.0000
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.0000 0.0000 0.0000
}
}
}
JOINT Head
{
OFFSET 0.0000 4.0000 0.0000
CHANNELS 3 Zrotation Xrotation Yrotation
}
}
MOTION
Frames: 2
Frame Time: 0.033333
-0.1 0.0 0.0 0.0 0.0 0.0 -0.1 0.0 0.0 0.0 0.0 0.0
-0.1 0.2 0.0 0.0 5.0 0.0 -0.1 0.0 0.0 0.0 0.0 0.0
上述文件描述了一个人体骨骼结构,通过两个关键帧分别表现了该结构在运动过程中的状态变化。这种描述方法极大地方便了3D/BIM行业中的动画创作和人体运动分析。