#mesh-generation #voxel #grid #bevy #meshing #flexible #3d

bevy_meshem

一个提供从Voxel网格生成网格的灵活且高效的库

10个不稳定版本 (3个破坏性更新)

0.4.0 2024年5月20日
0.3.0 2023年11月5日
0.2.5 2023年11月1日
0.2.4 2023年10月25日
0.1.1 2023年8月13日

#362游戏开发

每月48次下载

MIT 许可证

9.5MB
2.5K SLoC

Bevy Meshem

展示(来自 minecraft_bevy

Screenshot 2023-11-05 at 16 41 53

Bevy 兼容性

Bevy 版本 bevy_meshem
0.12 0.3.x
0.11.x 0.2.x
0.11 0.1.1

Bevy Meshem 是一个Rust库,专为提供体素网格的网格化算法而设计,允许您从体素网格创建一致的三维网格结构。类似于Minecraft中的机制,Bevy Meshem 提供了一种强大且灵活的方法来以高效的网格生成来可视化基于体素的场景。目前处于预发布开发阶段。

功能

生成3D网格

只需定义一个实现简单 "VoxelRegistry" 特性的数据结构(请参阅示例和文档),您就可以将任何体素数组转换为3D网格。

O(1) 实时网格更新

0.2版本中添加的功能允许用户在生成网格后轻松更新网格,无需重新生成。请参阅新的 update_mesh_example。 更新网格视频

自定义阴影,类似于 "环境遮蔽"(平滑光照)

0.3版本中添加的功能允许用户在网格生成过程中添加类似环境遮蔽的效果,“平滑光照”:2023-11-05 16:36:06 的截图

“引入”块

在生成每个网格时,网格内部未使用的顶点正在被裁剪,但没有自动裁剪夹在两个分别生成的网格之间的顶点的方法,只能手动裁剪。现在 introduce_adjacent_chunks 将自动为您完成这项工作,并应用上述提到的阴影!

“天真法”

遍历网格并为每个体素生成匹配的立方体(也称为“默认”,因为这种方法不提供任何优化)示例:(来自 examples/simple_example.rs 的截图)天真法截图

10x10x10网格,每个体素由24个顶点组成,整个网格由24000个(预期,24 * 10 * 10 * 10)顶点组成

“裁剪”

一种稍微复杂的方法,在遍历网格时,我们不会添加任何隐藏在其他体素背后的顶点和索引。这大致是Minecraft在它的引擎中使用的方法,尽管具体的细节显然是未知的。示例:剪裁方法截图

10x10x10网格,但与朴素方法相比,只有2400个被渲染。

不支持:"贪婪网格化"。

贪婪网格化比剪裁更有效率,但它做出了非常限制性的妥协(特别是网格的纹理),使其有些不受欢迎。可能会在后期阶段添加对该方法的支持。

需求与安装

  • 你必须熟悉Bevy游戏引擎,当然还有Rust编程语言。
  • 你知道该怎么做 - 将这个咒语添加到你的项目的Cargo.toml文件中
    [dependencies]
    bevy_meshem = "0.3"
    

使用

examples/simple_example.rs中的示例展示了您需要做什么才能开始。

在0.1中,您提供一个体素注册表和一个体素网格,并得到一个网格。

Screenshot 2023-09-28 at 21 59 53

在0.2中,您还可以在MeshMD数据结构中记录体素更改,并使用MeshMD数据结构在运行时更新网格。

Screenshot 2023-09-28 at 22 05 47

设计目标

灵活性、稳定性、用户体验和性能。

贡献

非常欢迎贡献!该项目目前处于早期阶段,并与Bevy渲染API紧密合作。因此,它可能存在一些稳定性挑战。然而,您的贡献可以在增强和稳定项目方面发挥重要作用。

鸣谢

感谢mikollysenko撰写这篇信息丰富的文章!https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/ 以及Bevy社区,因为你们构建了一个了不起的项目!

依赖项

~19–46MB
~745K SLoC