三维建模 运动捕捉BVH骨骼文件详解

Xsens动作捕捉 2022-10-20 13981

唯一的缺点是缺乏完整的基础姿势定义(这种格式只有子段与父段的平移偏移,没有定义旋转偏

移),它也缺乏如何绘制段的明确信息,但这对运动的定义没有影响。

一个 ROOT 定义一个pose,原则上,一个BVH文件可以包含任意数量的骨架层次结构。

缩进主要是为了让文件更容易被人阅读,但是有一些BVH文件解析器会期待tab字符,所以如果你创建一个BVH文件,一定要把它们变成tab字符,而不仅仅是空格。(python - like)

段的第一条信息是该段与其父对象的偏移量,或者在根对象的情况下,偏移量通常为零。偏移量

是由关键字 "OFFSET "指定的,后面是该段与父段的X、Y、Z偏移量(段 segment)

三维建模 运动捕捉BVH骨骼文件详解  第1张



I have never encountered a BVH file that didnt have 6 channels for the root object and 3 channels for every other object in the hierarchy.

旋转通道的顺序显得有些奇怪,它先是Z旋转,然后是X旋转,最后是Y旋转。这并不是一个错误,

BVH格式使用的旋转顺序有些不寻常

BVH层次结构的最后一点说明,世界空间被定义为右手坐标系,Y轴为世界向上矢量。因此,你通

常会发现BVH的骨骼段是沿着Y轴或负Y轴排列的

"Frame Time: "定义,这表示数据的采样率。在BVH文件的例子中,采样率为0.033333,这是BVH文

件中通常的采样率,即每秒30帧。

文件的其余部分包含实际的运动数据。每一行是一个运动数据的样本。数字是按照通道规格的顺

序出现的,因为骨架层次结构被解析了。


通常来说,子关节的平移信息存储在OFFSET里面,而旋转信息是Motion部分存储的,

跟关节的话,平移量=OFFSET+Motion存储的XYZ。部

创建旋转矩阵的简单方法是创建3个独立的旋转矩阵,每个旋转轴一个。然后将矩阵从左到右分别为Y、X和Z。

vR = vYXZ

另一种方法是直接计算旋转矩阵。在Graphics Gems II, p 322中描述了一种计算方法。

添加偏移信息很简单,只需将X、Y和Z转换数据插入矩阵的适当位置。一旦局部变换被创建,那么就将它与它父级的局部变换连接起来,然后是它的大父级,以此类推。

vM = vMchildMparentMgrandparent...。


用 blender 读取

三维建模 运动捕捉BVH骨骼文件详解  第2张

没东西, 滚轮向后滑、

三维建模 运动捕捉BVH骨骼文件详解  第3张

example文件

The End