bevy_procedural_grass

Crates.iobevy_procedural_grass
lib.rsbevy_procedural_grass
version0.2.0
sourcesrc
created_at2023-12-10 01:53:52.950936
updated_at2023-12-12 02:20:42.694341
descriptionA plugin for bevy to generate grass
homepage
repositoryhttps://github.com/jadedbay/bevy_procedural_grass/
max_upload_size
id1063981
size164,099
(jadedbay)

documentation

https://docs.rs/bevy_procedural_grass/latest/bevy_procedural_grass/

README

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

Commit count: 78

cargo fmt