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

bevy_procedural_grass

bevy的生成草插件

3个不稳定版本

0.2.0 2023年12月12日
0.1.2 2023年12月10日
0.1.1 2023年12月10日
0.1.0 2023年12月10日

#1049 in 游戏开发

30 每月下载量

MIT/Apache

55KB
1K SLoC

Rust 1K SLoC WebGPU Shader Language 219 SLoC

bevy_procedural_grass

crates.io Doc

一个为bevy生成网格上草的插件,版本为bevy 0.12

bevy_procedural_grass

用法

bevy_procedural_grass依赖项添加到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()
    });
}

特性

  • 基于网格生成的草位置
  • 风动画
  • 方向光的光照/阴影
  • GPU实例化
  • 视锥体/距离裁剪
  • LOD

待办事项

  • 点光和聚光灯的光照(目前仅支持方向光)。
  • 改进动画。
  • 减少均匀性的草簇生成。
  • 草交互,允许草避开其他实体。
  • 密度图。
  • 计算着色器,使用计算着色器在每一帧生成草实例数据以优化内存使用。

资源

依赖项

~50–88MB
~1.5M SLoC