2 unstable releases

0.2.0 Mar 8, 2024
0.1.0 Jan 6, 2024

#379 in Game dev

Download history 10/week @ 2024-02-17 5/week @ 2024-02-24 87/week @ 2024-03-02 57/week @ 2024-03-09 4/week @ 2024-03-16 47/week @ 2024-03-30 10/week @ 2024-04-06

57 downloads per month

MIT/Apache

61KB
1K SLoC

bevy_generative

CodeSize License GitHub Actions Workflow Status Bevy tracking crates.io docs.rs

bevy_generative is a plugin written for the bevy engine that allows real-time procedural generation of maps, textures, terrain, planets and more!

Features

  • Allows procedural generation of assets which can be directly integrated in your bevy game
  • Handles real-time updating of image and mesh data as configuration for the asset changes
  • Builds on native as well as wasm targets
  • Allows saving generated assets (uses rfd for native, javascript blob for wasm)
  • Serializes and deserializes components using serde

Showcase

Check out Procedra [Source], a procedural generation web application that allows you to experiment with all the parameters and generate assets in real-time!

Installation

Add bevy_generative to your rust project

cargo add bevy_generative

Examples

Maps and Textures

use bevy::prelude::*;
use bevy_generative::map::{MapBundle, MapPlugin};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(MapPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2dBundle::default());
    commands.spawn(MapBundle::default());
}

Terrain

use bevy::prelude::*;
use bevy_generative::terrain::{TerrainBundle, TerrainPlugin};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(TerrainPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(PointLightBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
    commands.spawn(TerrainBundle::default());
}

Planets

use bevy::prelude::*;
use bevy_generative::planet::{PlanetBundle, PlanetPlugin};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(PlanetPlugin)
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(PointLightBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });
    commands.spawn(PlanetBundle::default());
}

Bevy Compatibility

bevy bevy_generative
0.13 0.2, main
0.12 0.1

Contributing

Not accepting pull requests at this time. Issues, feature requests and bug reports are appreciated.

License

All code in this repository is dual-licensed under either:

at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.

Dependencies

~48–89MB
~1.5M SLoC