#grass #bevy-plugin #bevy #graphics #gamedev #rendering

warbler_grass

用于在游戏中创建3D草的Bevy插件

10个版本 (6个破坏性更新)

0.6.1 2024年6月21日
0.6.0 2024年2月28日
0.5.0 2024年2月12日
0.4.0 2023年9月29日
0.3.1 2023年3月16日

#135 in 游戏开发

Download history 107/week @ 2024-04-14 300/week @ 2024-04-21 129/week @ 2024-04-28 88/week @ 2024-05-05 97/week @ 2024-05-12 126/week @ 2024-05-19 111/week @ 2024-05-26 138/week @ 2024-06-02 110/week @ 2024-06-09 237/week @ 2024-06-16 184/week @ 2024-06-23 79/week @ 2024-06-30 71/week @ 2024-07-07 112/week @ 2024-07-14 93/week @ 2024-07-21 190/week @ 2024-07-28

每月476次下载
用于 2 crates

MIT/Apache

2.5MB
1.5K SLoC

crates.io docs.io

一个用于在3D游戏中方便集成草的Bevy插件。

目前支持Bevy版本 0.13。也支持Wasm构建!

不要将此项目用于严肃的项目,它仍在积极开发中。目前,该项目除了用于辅助项目或学习目的之外,尚不准备使用

使用此crate的一个酷项目是foxtrot模板。查看它!

用法

warbler_grass 添加为项目的依赖项

[dependencies]
warbler_grass = "0.6"

将草添加到您的游戏中


use bevy::{prelude::*, render::primitives::Aabb};
use warbler_grass::prelude::*;

fn main() {
    App::new()
        .add_plugins((
        DefaultPlugins,
        // This plugin is needed to initialize everything for the grass render pipeline
        WarblersPlugin
        ))
        .add_systems(Startup, setup_grass)
        .run();
}
fn setup_grass(mut commands: Commands, asset_server: Res<AssetServer>) {
    // Loading the height map from an image
    let y_map_image = asset_server.load("grass_y_map.png");
    // Constructing the y map struct
    let y_map = YMap { y_map: y_map_image };

    // Loading the density map from an image
    let density_map = asset_server.load("grass_density_map.png");
    // Constructing the density map
    let density_map = DensityMap {
        density_map,
        // The density corresponds to how dense a dense area is supposed to be.
        // Be careful with this parameter since the blade count grows fast. 
        density: 2.,
    };
    commands.spawn(WarblersBundle {
        y_map,
        density_map,
        // The height of the blades
        height: WarblerHeight::Uniform(2.),
         // The aabb defines the area in which the chunk lives in
        aabb: Aabb::from_min_max(Vec3::ZERO, Vec3::new(100., 10., 100.)),
        ..default()
    });
}

示例

您可以在示例文件夹中找到它们

加载草

基本示例。如果您只是想看看如何使用此crate,就不必再看了

cargo run --example load_grass

草的颜色

您不喜欢默认的草色或您的游戏有多个季节?看看您如何可以更改草的颜色

cargo run --example grass_colors

草的网格

您不喜欢默认的草网格?不用担心,您可以轻松地交换网格。注意,您可以在演示中按 TAB 键更改网格

cargo run --example grass_mesh

许多块

您想看看这个crate能做什么?运行此演示以同时加载许多块。此示例也非常适合演示网格的视锥剔除

# I'd run this demo in release mode first to see how your hardware can keep up
cargo run -r --example many_chunks

压力测试

这不是一个很好的示例。它用于限制测试crate。当然,您也可以加载它并查看会发生什么。

# I'd run this demo in release mode first to see how your hardware can keep up
cargo run -r --example stress_test

版本表

warbler_grass Bevy
0.6 0.13
0.5 0.12
0.4 0.11

贡献

如果您阅读了这部分,您可能想考虑帮助这个项目成长。我认为这个项目非常适合初学者。由于用例清晰,相对容易理解其工作原理;即高效地绘制草。不要担心,如果您是Bevy或Rust的初学者!

目前,代码可以在许多地方进行优化,许多我希望拥有的功能部分或完全缺失。您总是可以创建一个问题并询问是否需要您想做的事情。

依赖项

~39–75MB
~1.5M SLoC