BVH(BioVision Hierarchy)是BioVision 等设备对人体运动进行捕获后产生文件格式的文件扩展名,是一种通用的人体特征动画文件格式。文件包含角色的骨骼和肢体关节旋转数据。
动画被分为 蒙皮 和 骨骼动作
BVH文件分为2个主要部分:骨架信息和数据块
骨架信息:按照层级关系,定义了如root leg 等位置和旋转分量,从而形成一个完整的骨架
数据块: 对应上面的骨架各部位标出每帧的数据信息
读取并保存运动数据
骨架层次信息保存了每个节点相对其父节点的位置信息,通过这些数据可以构造出骨架的初始姿态。BVH文件中使用的是右手坐标系,而DirectX中使用的是左手坐标系,在绘制图形的时候,需要将得到的数据坐标系转换成左手坐标系。
骨架中的各个关节节点相对父节点的位置读取并保存好之后,在渲染的时候,从根节点开始,依次求出每个关节在世界坐标中的位置,即可绘制出正确的骨架结构。
读取运动数据,首先从文件中读取运动的总帧数,然后建立动态数组保存运动数据。运动数据的每帧保存的信息是:根节点的平移量(X,Y,Z)+除了site 外所有节点的旋转信息(注意:旋转分量的次序是根据CHANNELS而定,旋转信息使用的是角度值表示的),每帧的旋转角度值,是相对于骨架的初始姿态的。
(世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前画面上所有点的坐标都是以该坐标系的原点来确定各自的位置的。
摄像机可安放在环境中的任意位置,在环境中选择一个基准坐标系来描述摄像机的位置,并用它描述环境中任何物体的位置,该坐标系称为世界坐标系。摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵与平移向量来描述。 相关的还有图像坐标系和摄像机坐标系。)
每帧相对初始姿态的数据保存好之后,在渲染时,将每一帧的旋转矩阵取出,乘以初始姿态在世界坐标系的变换矩阵,即可产生动画了。
BVH的骨架信息是以关键字“HIERARCHY”开头的,紧跟着‘ROOT’ 表示一个根节点,然后是根节点以下的关节‘JOINT’,然后逐级向下,递归定义父关节以下的子关节。‘OFFSET’表示的是子关节相对于父关节的偏移,也可表示对应父关节的长度和方向;当子关节不止一个时,采用第一个子关节的数据。接下来是‘CHANNELS’给出了关于channel的个数和名称。ROOT总是拥有6个channels,一般的JOINT只有3个,与ROOT相比缺少了XYZ的position信息。因为子关节只需要根据它相对于父关节的偏移就可以算出它在坐标系中的具体位置了。
rotation channel的顺序要注意,可能是Z、X、Y。‘End site’表示终结递归,该关节的定义到此为止,可看作一个终端效应器。