首页 > 解决方案 > 使用 Bevy 渲染 Blender / gltf 模型,包括颜色

问题描述

我正在与Bevy一起迈出第一步,目标是“定居者”或“anno 18xx”类型的模拟。我有一个树模型,我从 Blender 导出为 gltf。这棵树有棕色的树干和绿色的叶子。我可以在基于 Web 的查看器中打开 gltf 文件,到目前为止一切看起来都很好。

在 Bevy 中,我设置了一个简单的相机、灯光……并且可以像这样加载树:

let tree = asset_server.load("tree.gltf#Scene0");
commands.spawn_scene(tree);

这工作正常。我可以看到颜色正确的树。但它是一个充满“世界”的“场景”。我想渲染许多具有不同变换的树,所以我尝试渲染“普通”网格。我发现模型是由两个网格组成的,所以我必须这样做:

let trunk = asset_server.load("tree.gltf#Mesh0/Primitive0");
let leaves = asset_server.load("tree.gltf#Mesh1/Primitive0");

commands.spawn_bundle(PbrBundle {
    mesh: leaves,
    material: materials.add(Color::rgb(0.0, 1.0, 0.0).into()),
    // ...

这“有点”有效:我从 gltf 文件中丢失了颜色,必须手动设置它们。树干和树叶之间的相对位置被破坏了,所以我可能丢失了文件中定义的一些转换。

根据https://bevyengine.org/news/bevy-0-5/#top-level-gltf-asset,Gltf处理在 Bevy 0.5 中得到了改进,但我不明白使用它的预期方式是什么我的情况。

有人可以给我一个最简单的例子,说明如何在 Blender 中定义我的游戏资产(树、房子、栅栏……)并在 Bevy 中多次渲染导出的 gltf 吗?包括指定的颜色/材料?我认为在我上面展示的两种方法之间一定有一些东西,但我不明白。

标签: rustbevy

解决方案


推荐阅读