用途:在 Bevy 0.19 中搭建 Minecraft 风格的体素世界,实现分块网格生成(chunked meshing),并选择 greedy_quads 或 visible_block_faces 两种网格化策略。
主要能力:演示如何用 block-mesh-rs 处理带填充的区块(18×18×18,实际可见区块 16×16×16),把 GreedyQuadsBuffer 翻译成 Bevy 0.19 的 Mesh;提供纯 worker 侧的网格构建原语,配合 AsyncComputeTaskPool 做非阻塞完成轮询与任务所有权展示。
必要用法:为 BlockId 实现 Voxel(空/不透明可见性)与 MergeVoxel;用 ConstShape3u32<18,18,18> 定义形状;调用 greedy_quads(blocks,&ChunkShape{},[0;3],[17,17,17],&RIGHT_HANDED_Y_UP_CONFIG.faces,&mut buffer);空区块返回 None。遍历 quads 生成 indices/positions/normals,用 Mesh::new(PrimitiveTopology::TriangleList, RenderAssetUsages::default())、try_insert_attribute 与 insert_indices 写入。
适用场景:分块体素地形;编辑频繁的区块适合 visible_block_faces,稳定地形适合 greedy_quads。
限制与注意:填充不可省略,相邻区块可见性依赖填充;block-mesh 不产出 UV,需自行计算(常用纹理图集加每面偏移);不要为单个区块并行化,并行收益在区块之间;任务池不是调度器,不要每次编辑都生成任务,应按坐标复用,生产环境需用 bevy-voxel-runtime 做修订校验、批处理、优先级与背压;try_insert_attribute 返回 Result<(), MeshAccessError>,应在 Bevy 0.19 中处理;block-mesh-rs 为 0.2.0(2022 年最后更新),不依赖 Bevy。