#noise #shaders #perlin #bevy #worley #bevy-plugin

bevy_compute_noise

使用计算着色器生成可平铺的2D/3D噪声纹理的Bevy插件

3个不稳定版本

0.2.0 2024年7月13日
0.1.1 2024年6月1日
0.1.0 2024年5月29日

6#shaders

Download history 80/week @ 2024-05-23 212/week @ 2024-05-30 20/week @ 2024-06-06 6/week @ 2024-06-13 1/week @ 2024-07-04 113/week @ 2024-07-11 5/week @ 2024-07-18 1/week @ 2024-07-25

每月120次下载

MIT/Apache

43KB
1K SLoC

Rust 845 SLoC WebGPU Shader Language 171 SLoC

bevy_compute_noise

crates.io Doc

一个用于使用计算着色器生成可平铺的2D/3D噪声纹理的bevy 0.14插件。

查看此插件的演示: https://jadedbay.com/demo/bevy_compute_noise (仅限Chrome)

bevy_compute_noise

用法

bevy_compute_noise依赖项添加到Cargo.toml

[dependencies]
bevy_compute_noise = "0.2.0"

添加噪声插件

use bevy_compute_noise::prelude::*;

App::default()
    .add_plugins(DefaultPlugins)
    .add_plugins(ComputeNoisePlugin::<Perlin2D>::default()) // add new plugin for each type of noise needed
    .run();

排队噪声生成

fn setup(
    mut images: ResMut<Assets<Image>>,
    mut perlin_2d_queue: ResMut<ComputeNoiseQueue<Perlin2D>>
) {
    // Create and queue noise image
    let noise_image: Handle<Image> = perlin_2d_queue.add(
        &mut images, 
        ComputeNoiseSize::D2(128, 128), // Use ComputeNoiseSize::D3 for 3D noise
        Perlin2d {
            seed: 0,
            frequency: 5,
            octaves: 4
        }
    );
}

或者,您可以将ComputeNoiseComponent<T: ComputeNoise>添加到实体中,每当它被更新时,它将自动排队

fn setup(
    commands: Commands,
    mut images: ResMut<Assets<Image>>,
) {
    // Manually create noise image, so it can be used elsewhere.
    let noise_image = ComputeNoiseImage::create_image(ComputeNoiseSize::D2(128, 128));
    
    commands.spawn(ComputeNoiseComponent::<Perlin2d> {
        image: noise_image.clone();
        noise: Perlin2d {
            seed: 0,
            frequency: 5,
            octaves: 4
        }
    });
}

噪声类型

  • Worley2D
  • Worley3D
  • Perlin2D

待办事项

  • 添加更多噪声类型。
  • 允许组合噪声。
  • 允许写入特定纹理通道。

读取回显

如果您需要将噪声纹理读取回CPU,您可以克隆readback分支并查看那里的示例。我对实现并不完全满意,而且最好还是使用另一个crate在CPU上生成噪声。

依赖项

~34–70MB
~1M SLoC