3 unstable releases
0.2.0 | Dec 12, 2023 |
---|---|
0.1.2 | Dec 10, 2023 |
0.1.1 | Dec 10, 2023 |
0.1.0 |
|
#1151 in Game dev
55KB
1K
SLoC
bevy_procedural_grass
A plugin for bevy 0.12
that generates grass on top of any mesh.
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