如何将 3D 姿势序列转换为 bvh 文件格式?



我对动画和渲染软件很陌生,所以如果我需要提供更多信息,请告诉我。我有一系列人体关节的3D位置(基本上是动作捕捉数据(,代表不同类型的行走。我已经设法使用 python 可视化序列,如我在本视频中所示。我拥有的每个数据都是大小为 TxJx3 的 numpy 数组,其中 T 是帧数,J 是关节数(在我的例子中为 21(,3 表示 3 个坐标值。所以我的问题是,如何将这些 3D 位置转换为 BVH 文件,以便加载到搅拌机中?或者将它们转换为任何其他格式,以便我可以在搅拌机中加载这些数据?

好的,自己找到了解决方案。在这里发布,以防其他人觉得这很有用。请原谅没有 LaTeX 渲染,显然,堆栈溢出(尚不支持它(,而且我在这里太新了,无法附加图像。

因此,在 BVH 格式中,关节之间存在以下关系:

$$pos_j = R_{P(j(}offset_j + pos_{P(j(}$$

其中$pos_j$表示关节$j$的3D位置,$P(j($返回关节$j$的父级,无论在何处建模位置(通常DAG从根开始并指向末端执行器( $offset_j$ 表示关节$j$相对于其父$P(j($(又名连接肢(的偏移量, $R_{P(j(}$ 是 3D 旋转,它决定了 $offset_j$ 应该从初始姿势(通常是 T 姿势(旋转多少。在 BVH 格式中,对于每个父级 $P(j($,我们需要存储 $R_{P(j(}^{-1}R_j$。

当时我遇到的主要麻烦是处理有多个孩子的关节,例如根关节,它与双腿和脊柱都有连接。我最终遇到了这个 repo 并在skeleton.py内部挖掘了它们的功能forward_kinematics,意识到该怎么做。基本上,对于有多个子链的关节,我必须制作 $offset=0$ 的副本,并将它们指定为相应链的父链。因此,我制作了3份根:一份成为左腿链的父项,一份成为右腿链的父项,一份成为脊柱的父项。对于其他有多个孩子的父母也是如此。是的,可视化效果很好!

最新更新