A plugin for bevy 0.12
that generates grass on top of any mesh.
Add bevy_procedural_grass
dependency to Cargo.toml
:
[dependencies]
bevy_procedural_grass = "0.2.0"
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()
});
// create object that displaces grass
commands.spawn((
PbrBundle {
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
material: materials.add(StandardMaterial::from(Color::WHITE)),
..default()
},
));
}
- Grass positions generated based of mesh
- Wind Animation
- Lighting/Shadows for directional lights
- GPU Instancing
- Frustum/Distance Culling
- LOD
- 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.