2 个稳定版本

1.0.1 2024年5月20日
1.0.0 2024年5月18日

#56 in 数据格式

每月下载 24

MIT 许可证

690KB
698

解析 .bvh 动画文件 💀

一个用于解析 .bvh 文件的 Rust 库。它不仅解析 HIERARCHY 和 MOTION,还计算隐含属性,如全局关节位置和旋转,包括姿态(MOTION 部分)和初始姿态(HIERARCHY 部分)。

安装

基本包
cargoadd bvh_anim_parser

要使用 bevy 应用程序启用可视化
cargoadd bvh_anim_parser --功能可视化

使用/文档

请参阅 examples/example.rs 了解完整的使用方法。此crate提供的功能不超出该文件中所示。

目前不支持修改和编写 .bvh 文件(如果您需要此功能,请告知我)。

可视化(《bevy》应用程序)

3 个红色、绿色、蓝色向量可以与全局姿态旋转相关联(3x3 旋转矩阵的3列向量)。它们的起点是全局姿态位置。按“R”键也可以查看初始姿态及其全局旋转和位置。anim rest_pose

代码库结构

  • src/types.rs 包含所有自定义结构和类型。
  • src/parse.rs 包含所有涉及解析 bvh 文件和从中获取额外信息的函数。
  • src/visualize.rs 是一个用于可视化加载的 .bvh 文件的 bevy 应用程序。它的目的是确保 bvh 解析器产生合理的结果。

主要有两种结构:`BvhMetadata`和`BvhData`。`BvhData`包含每个关节在每个帧的位置和旋转的数值数据(以一维和二维向量的形式),包括姿势和休息姿势。`BvhMetadata`包含有关帧计数、帧率以及用于从`BvhData`中提取数据的关节索引等信息。

约定

  • 右手Y-up坐标系

假设(如果违反这些假设,则不会给出警告/错误!)

  1. 每个.bvh文件只允许一个动画(图例中说明,可以将多个动画嵌入到单个.bvh文件中)。
  2. 臀部的平移和旋转分量(6个通道),而其他所有关节只有旋转分量(3个通道)。
  3. 所有旋转分量具有相同的旋转顺序。例如,如果一个关节的顺序是YZX,而另一个关节的顺序是XYZ,那么解析器将错误地解析旋转。
  4. 非-ENDSITE关节名不能以正则表达式`'end*'`(不区分大小写)开头 - 这个模式用于识别ENDSITE。
  5. 每行一个`{`或`}`(即换行符很重要)。

常见问题解答

如何计算休息姿势的全局关节旋转?

请检查`__get_tail_offset(...)`函数,在`src/parse.rs`中。它返回“前向”向量,然后用于计算旋转(使用叉乘等)。

其他仓库

  • https://github.com/Wasserwecken/bvhio(Python) - 我经常使用的一个优秀的.bvh解析库,也是我编写自己的.bvh解析器灵感的来源。然而,对于大数据集处理,它并不像我希望的那样快。
  • https://github.com/burtonageo/bvh_anim/tree/master(Rust) - 星标最高的Rust .bvh解析器。看起来过于复杂,并且没有提供HIERARCHY或MOTION部分中已有的任何内容(即不计算休息姿势的方向,不做前向动力学,因此无法获取全局关节位置/旋转等)

贡献

欢迎每个人。点击“新建问题”按钮。

路线图

  • 修改和编写.bvh文件
  • 快速序列化和反序列化到磁盘
  • 多线程解析(尤其是在进行前向动力学或解析MOTION部分时)
  • ...你的想法呢? :)

依赖

~71–110MB
~2M SLoC