#bevy #wfc #bevy-plugin #algorithm #gamedev #2d-3d #procedural-gen


Bevy plugins for 2D & 3D procedural generation with WFC/Model synthesis

1 unstable release

0.1.0 Jan 19, 2024

#1526 in Game dev

28 downloads per month



Bevy Ghx Proc(edural) Gen(eneration)

Bevy tracking bevy_ghx_proc_gen on crates.io bevy_ghx_proc_gen on docs.io

Bevy plugins and utilities for ghx_proc_gen

Bevy quickstart

cargo add bevy_ghx_proc_gen

Steps 1 to 3 are the same as in the ghx_proc_gen Quickstart.

  1. To automatically spawn our assets for us, we use the ProcGenSimplePlugin
  app.add_plugins(ProcGenSimplePlugin::<Cartesian2D, PbrMesh>::new());
  1. To see something in the Bevy viewport, we setup assets in a RulesModelsAssets:
fn setup_generator(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
) {
  // ... Steps 1 to 3: Generator setup ...

  // Simple procedural cube mesh and materials.
  let cube_mesh = meshes.add(Mesh::from(shape::Cube { size: CUBE_SIZE }));
  let white_mat = materials.add(Color::WHITE.into());
  let black_mat = materials.add(Color::BLACK.into());*
  // We create our models asset here, in a separate collection for the sake of simplicity.
  // (We could also declare them with our models)
  let mut models_assets = RulesModelsAssets::<PbrMesh>::new();
  models_assets.add_asset(0, PbrMesh {
          mesh: cube_mesh.clone(),
          material: white_mat,
  models_assets.add_asset(1, PbrMesh {
          mesh: cube_mesh.clone(),
          material: black_mat,

  // ...
  1. Spawn an Entity with a GeneratorBundle:
  // The ProcGenSimplePlugin will detect this, generate and spawn the nodes. 
  commands.spawn(GeneratorBundle {
      spatial: SpatialBundle::from_transform(Transform::from_translation(Vec3::new(
          -grid.size_x() as f32 / 2., -grid.size_y() as f32 / 2., 0.,
      asset_spawner: AssetSpawner::new(models_assets, NODE_SIZE, Vec3::ONE),


For more information, check out the bevy_ghx_proc_gen crate documentation or the Examples.

Bevy plugins

  • Check out the GridDebugPlugin from bevy_ghx_grid which provides debug utilities for the grid-types used by ghx_proc_gen.

ghx_proc_gen does not need a plugin to work, but if you want a really quick way to get started, or are in need of some debug utilities for your generations, there are some ready-made plugins for this:

  • ProcGenSimplePlugin: Really simple, just here to generate and spawn the nodes assets. See its sources.

  • ProcGenDebugPlugin [Depends on GridDebugPlugin]: Just a bit more complex, and not focused on performance but rather on demos & debugging use-cases. You can view the generation one step at a time, see where the contradiction occurs and more. See its sources.

Both of those plugins start their work when you insert the components from a GeneratorBundle on an Entity.

Cargo features

Find the list and description in Cargo.toml

  • default-assets-bundle-spawners: This feature compiles simple AssetBundleSpawner impl for a few basic types. Disable the feature if you don't need them, or want to customize their implementation.
  • simple-plugin compiles the simple plugin and its systems.
  • debug-plugin compiles the debug plugin, the grid debug plugin and their systems.

See also the main crate cargo features

Compatible Bevy versions

Compatibility with Bevy versions:

bevy_ghx_proc_gen bevy
0.1 0.12


bevy-ghx-proc-gen is free and open source. All code in this repository is dual-licensed under either:

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~1.5M SLoC