#simplex-noise #bevy #wgpu #perlin-noise #shader #3d #utilities

bevy_shader_utils

一个提供一系列噪声函数和其他工具的实用程序包,用于在 wgpu 着色器中使用

7 个版本 (4 个破坏性版本)

0.7.0 2024 年 3 月 26 日
0.5.2 2023 年 8 月 14 日
0.3.0 2022 年 9 月 18 日
0.2.0 2022 年 9 月 12 日
0.1.0 2022 年 7 月 8 日

#309图形 API

Download history 30/week @ 2024-04-22 25/week @ 2024-05-20 21/week @ 2024-05-27 40/week @ 2024-06-03 24/week @ 2024-06-10 17/week @ 2024-06-17 19/week @ 2024-06-24 7/week @ 2024-07-01 57/week @ 2024-07-08 111/week @ 2024-07-29 15/week @ 2024-08-05

每月 129 次下载

MIT 许可证

36KB
394

Bevy Shader Utils

一个提供一系列噪声函数和其他工具的实用程序包,用于在 wgpu 着色器中使用。

快速入门

在 wgsl 文件的顶部使用导入,Bevy 会处理其余部分。

#import bevy_pbr::forward_io::VertexOutput

#import bevy_shader_utils::simplex_noise_3d::simplex_noise_3d

struct Material {
    scale: f32
};

@group(2) @binding(0)
var<uniform> material: Material;

@fragment
fn fragment(
    mesh: VertexOutput
) -> @location(0) vec4<f32> {
    let f: f32 = simplex_noise_3d(material.scale * mesh.world_position.xyz);

    let color_a = vec3(0.282, 0.51, 1.0);
    let color_b = vec3(0.725, 0.816, 0.698);
    let mixed = mix(color_a, color_b, f);
    return vec4(mixed, 1.0);
}

上述着色器由以下方式定义的材料使用。

#[derive(Asset, AsBindGroup, Debug, Clone, Reflect)]
pub struct ScreenshotSimplex3dMaterial {
    #[uniform(0)]
    scale: f32,
}

impl Material for ScreenshotSimplex3dMaterial {
    fn fragment_shader() -> ShaderRef {
        "shaders/screenshot_simplex3d_material.wgsl".into()
    }
}

函数

Perlin 噪声

二维

#import bevy_shader_utils::perlin_noise_2d::perlin_noise_2d

var value = perlin_noise_2d(vec2<f32>(5.0, 6.0))

三维

#import bevy_shader_utils::perlin_noise_3d::perlin_noise_3d

var value = perlin_noise_3d(vec3<f32>(5.0, 6.0, 7.0))

Simplex 噪声

二维

#import bevy_shader_utils::simplex_noise_2d::simplex_noise_2d

var value = simplex_noise_2d(vec2<f32>(5.0, 6.0))

三维

#import bevy_shader_utils::simplex_noise_3d::simplex_noise_3d

var value = simplex_noise_3d(vec3<f32>(5.0, 6.0, 7.0))

Voronoise

Voronoi 和噪声:https://iquilezles.org/articles/voronoise/

#import bevy_shader_utils::voronoise::voronoise

var value = voronoise(vec2<f32>(5.0, 6.0), 0.0, 1.0)

依赖项

~18–45MB
~719K SLoC