#grass #bevy #bevy-plugin #generate #mesh #gpu #position

bevy_procedural_grass

A plugin for bevy to generate grass

3 unstable releases

0.2.0 Dec 12, 2023
0.1.2 Dec 10, 2023
0.1.1 Dec 10, 2023
0.1.0 Dec 10, 2023

#1151 in Game dev

MIT/Apache

55KB
1K SLoC

Rust 1K SLoC WebGPU Shader Language 219 SLoC

bevy_procedural_grass

crates.io Doc

A plugin for bevy 0.12 that generates grass on top of any mesh.

bevy_procedural_grass

Usage

Add bevy_procedural_grass dependency to Cargo.toml:

[dependencies]
bevy_procedural_grass = "0.2.0"

Generate grass on top of entity:

use bevy::prelude::*;
use bevy_procedural_grass::prelude::*;

fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            ProceduralGrassPlugin::default(), // add grass plugin
        ))
        .add_systems(Startup, setup)
        .run();
}

fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
) {
    let plane = commands.spawn(
        PbrBundle {
            mesh: meshes.add(Mesh::from(shape::Plane::default())),
            ..default()
        }, 
    ).id();

    // spawn grass
    commands.spawn(GrassBundle {
        mesh: meshes.add(GrassMesh::mesh(7)), // how many segments you want in the mesh (no. of verts = segments * 2 + 1)
        grass: Grass {
            entity: Some(plane.clone()), // set entity that grass will generate on top of.
            ..default()
        },
        lod: GrassLODMesh::new(meshes.add(GrassMesh::mesh(3))), // optional: enables LOD
        ..default()
    });
}

Features

  • Grass positions generated based of mesh
  • Wind Animation
  • Lighting/Shadows for directional lights
  • GPU Instancing
  • Frustum/Distance Culling
  • LOD

TODO

  • Lighting for point and spot lights (Currently only supports directional lights).
  • Improve Animation.
  • Grass Clumping for less uniform grass generation.
  • Grass Interaction, allow grass to move out of the way of other entites.
  • Density Map.
  • Compute Shaders, use compute shaders to generate grass instance data each frame to optimize memory usage.

Resources

Dependencies

~43–78MB
~1.5M SLoC