numpy - 如何将 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)$ 在任何DAG中返回关节 $j$ 的父节点(通常 DAG 从根开始并指向末端 -效应器)$offset_j$ 表示关节 $j$ 相对于其父节点 $P(j)$(也称为连接肢体)的偏移量,$R_{P(j)}$ 是确定应该 $ 多少的 3D 旋转offset_j$ 从初始位姿(通常是 T 位姿)旋转。在 BVH 格式中,对于每个父 $P(j)$,我们需要存储 $R_{P(j)}^{-1}R_j$。
当时我遇到的主要问题是处理有多个孩子的关节,例如根关节,它与双腿和脊柱都有连接。我最终遇到了这个 repo并挖掘了他们forward_kinematics
内部的功能skeleton.py
,意识到该怎么做。基本上,对于有多个孩子的关节,我必须使用 $offset=0$ 制作副本,并将它们分配为相应链的父级。因此,我制作了 3 个根的副本:一个成为左腿链的父级,一个成为右腿链的父级,一个成为脊柱的父级。对于其他有多个孩子的父母也是如此。是的,可视化效果很好!
推荐阅读
- google-oauth - Nuxtjs 谷歌身份验证
- linux - 是否可以让 nvidia-smi 命令从任何位置(如 Linux)在 Windows 上运行?
- azure-hdinsight - HDInsight 群集如何作为 HDFS 映射到 Azure 存储?
- java - 我收到此错误原因:java.lang.ClassNotFoundException: javafx.scene.Node 在 Ubuntu Tomcat 服务器中部署战争
- node.js - 创建新项目时 JSON 输入错误意外结束
- reactjs - 我们应该为 Redux 状态使用 PropTypes 吗?
- python-3.x - 升级到 Ubuntu 20.04 后,python 3.7 venv 损坏
- javascript - 如何以在 javascript 中创建的表单中获取表单 foreach 循环选项值?
- python - Django 无法使用 ForeinKey 保存记录
- php - PHP 登录系统适用于本地,但不适用于 Hostgator PHP 7.2