9 releases (breaking)
Uses new Rust 2024
0.9.0-rc.0 | Sep 13, 2025 |
---|---|
0.8.0 | May 28, 2025 |
0.7.0 | Mar 26, 2024 |
0.5.2 | Aug 14, 2023 |
0.1.0 | Jul 8, 2022 |
#122 in Graphics APIs
205 downloads per month
43KB
396 lines
Bevy Shader Utils
A utility package that provides a series of noise functions and other utilities for use in wgpu shaders.
Quick Start
Use the import at the top of your wgsl file and Bevy takes care of the rest.
#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);
}
The above shader is used by a material defined as such.
#[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()
}
}
Functions
Perlin noise
2-dimensional:
#import bevy_shader_utils::perlin_noise_2d::perlin_noise_2d
var value = perlin_noise_2d(vec2<f32>(5.0, 6.0))
3-dimensional:
#import bevy_shader_utils::perlin_noise_3d::perlin_noise_3d
var value = perlin_noise_3d(vec3<f32>(5.0, 6.0, 7.0))
Simplex noise
2-dimensional:
#import bevy_shader_utils::simplex_noise_2d::simplex_noise_2d
var value = simplex_noise_2d(vec2<f32>(5.0, 6.0))
3-dimensional:
#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 and Noise: https://iquilezles.org/articles/voronoise/
#import bevy_shader_utils::voronoise::voronoise
var value = voronoise(vec2<f32>(5.0, 6.0), 0.0, 1.0)
Dependencies
~20–33MB
~537K SLoC