2 个稳定版本
1.0.1 | 2024年5月20日 |
---|---|
1.0.0 | 2024年5月18日 |
#56 in 数据格式
每月下载 24 次
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”键也可以查看初始姿态及其全局旋转和位置。
代码库结构
src/types.rs
包含所有自定义结构和类型。src/parse.rs
包含所有涉及解析 bvh 文件和从中获取额外信息的函数。src/visualize.rs
是一个用于可视化加载的 .bvh 文件的bevy
应用程序。它的目的是确保 bvh 解析器产生合理的结果。
主要有两种结构:`BvhMetadata
`和`BvhData
`。`BvhData
`包含每个关节在每个帧的位置和旋转的数值数据(以一维和二维向量的形式),包括姿势和休息姿势。`BvhMetadata
`包含有关帧计数、帧率以及用于从`BvhData
`中提取数据的关节索引等信息。
约定
- 右手Y-up坐标系
假设(如果违反这些假设,则不会给出警告/错误!)
- 每个.bvh文件只允许一个动画(图例中说明,可以将多个动画嵌入到单个.bvh文件中)。
- 臀部的平移和旋转分量(6个通道),而其他所有关节只有旋转分量(3个通道)。
- 所有旋转分量具有相同的旋转顺序。例如,如果一个关节的顺序是YZX,而另一个关节的顺序是XYZ,那么解析器将错误地解析旋转。
- 非-ENDSITE关节名不能以正则表达式`'end*'`(不区分大小写)开头 - 这个模式用于识别ENDSITE。
- 每行一个`{`或`}`(即换行符很重要)。
常见问题解答
如何计算休息姿势的全局关节旋转?
请检查`__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