33个版本
0.8.9 | 2021年2月19日 |
---|---|
0.8.6 | 2020年11月5日 |
0.8.2 | 2020年7月12日 |
0.6.2 | 2020年3月24日 |
0.0.1 | 2018年7月8日 |
#52 in 数据格式
136 每月下载量
在 2 crates中使用
105KB
2K SLoC
Landon
一组工具、数据结构和方法,用于导出Blender数据(如网格和骨骼)并为您的渲染管线做准备。
初始背景/动机
在此模块之前,我会使用blender的COLLADA导出器将blender网格/骨骼数据导出为COLLADA,然后将该COLLADA解析为JSON。
这基本上效果不错 - 但有时我会遇到一些模型导出不正确,我不得不四处查找原因。
经过一年或两年偶尔发生这种情况后,我最终决定花些时间自己编写一些东西,知道我还会在这里和那里遇到问题,但这些问题我会知道如何解决。
landon的目标是一个经过大量测试、文档完善的工具集,用于从Blender中提取数据,以及一组用于预处理这些数据的函数,以便您可以在渲染管线中使用它们。
从一开始,landon就针对我的游戏Akigi的需求,但请随时自由地提交问题/PR,包括您认为可能适合landon的问题/想法/功能。
目标是使从Blender中提取数据并将其放入您的渲染管线变得像吃馅饼一样容易。
入门
Landon手册是一个正在进行的工作指南,包含如何使用landon库的示例。
查看 mesh-visualizer 目录以查看使用 landon
导出模型的骨骼动画实现的完整示例。
快速入门
以下是一个示例,我们将下载一个Blender文件,将网格导出为JSON,然后使用 jq CLI从JSON中提取每个边界框。
# Install landon
cargo install -f landon
landon install --mesh-to-json --armature-to-json
# Download a Blender file to try landon with
BLEND_FILE='https://github.com/chinedufn/landon/blob/master/crates/blender-export-test/src/tests/multiple_meshes.blend?raw=true'
curl -L $BLEND_FILE > /tmp/multiple-meshes.blend
# Export meshes and armatures to stdout and redirect stdout to a file
landon export -f /tmp/multiple-meshes.blend > exported.json
# List all of the mesh names and bounding boxes
cat exported.json | jq -r '.meshes | to_entries[] | .value | to_entries[] | "\(.key), \(.value | .bounding_box)"'
# Second_Mesh, {"min_corner":[-1.3121787,0.44901967,0.67399526],"max_corner":[0.7619256,2.523124,2.7480996]}
# AMesh, {"min_corner":[-3.2487504,-3.3098261,1.2566323],"max_corner":[-1.2487504,-1.3098261,3.2566323]}
# Mesh3, {"min_corner":[-1.2058887,-2.4149196,-1.8447866],"max_corner":[0.86821556,-0.3408153,0.22931767]}
安装
安装Blender
最低支持的Blender版本是2.80。
Blender命令行可执行文件应在您的shell路径中可用。
MacOS
# Add Blender to your path
export PATH="$PATH:/Applications/blender.app/Contents/MacOS"
要验证Blender是否在您的路径中,请在您的shell中运行 blender --version
。
安装Landon
cargo install -f landon
landon install --mesh-to-json --armature-to-json
# FIXME: landon install --ik-to-fk
npm install -g ik2fk && ik2fk --install
# More info
landon install --help
API
Landon提供了一个Rust API,用于以编程方式导出数据。
未来我们还将提供C和Wasm API,作为Rust API的轻量级包装器,以便与其他语言进行互操作。
CLI用法
# Help on all of the subcommands
landon --help
本地运行网格可视化器
TODO:重写此示例并删除watchexec作为依赖项。
# Install a static server that sets the application/wasm mime type
npm install -g http-server
# Watcher
cargo install watchexec
git clone https://github.com/chinedufn/landon
watchexec -r -w mesh-visualizer --ignore mesh-visualizer/out ./mesh-visualizer/build.sh
http-server ./mesh-visualizer/out --open
您的网页浏览器应打开一个允许您可视化测试套件中所有模型的应用程序。
贡献
请打开问题,说明您的预期用例,并让我们看看是否应该或不应该使 landon
支持它。
也可以自由地就您的问题/想法打开问题!
测试
cargo test --all
TODO
- BlenderMesh的triangulate函数可以处理ngons。目前只处理3个或4个面
另请参阅
许可证
MIT
lib.rs
:
Blender文件可以包含圆形、立方体、圆柱体、龙或任何其他3D形状的网格。
网格可以表示为顶点集合及其数据,例如法线或UV坐标。
网格还可以具有元数据,例如其父骨骼名称(对顶点皮肤很有用)。
blender-mesh-to-json旨在成为Blender网格元数据的经过良好测试和文档的导出器。
您可以将数据写入stdout或文件。最初它将针对@chinedufn的需求进行调整,但如果您有未满足的需求,请随时打开问题。
@see https://docs.blender.org/manual/en/dev/modeling/meshes/introduction.html - 网格介绍 @see https://github.com/chinedufn/blender-actions-to-json - 导出Blender骨骼/动作
依赖项
~5MB
~102K SLoC