Search across packages, versions, files, declarations, and comments. Use multiple terms to narrow results (AND), and add @vertex, @fragment, or @compute to filter by shader stage.
1#import bevy_sprite::mesh2d_view_bindings::globals
2#import bevy_sprite::mesh2d_functions::{
3 get_world_from_local,
4 mesh2d_position_local_to_clip,
5}
6#import noisy_bevy::fbm_simplex_2d_warp_seeded
8struct NoiseMaterial {
9 num_warps: i32
12@group(2) @binding(0) var<uniform> material: NoiseMaterial;
14struct VertexInput {
15 @builtin(instance_index) instance_index: u32,
16 @location(0) position: vec3<f32>,
17 @location(1) blend_color: vec4<f32>,
18};
20struct VertexOutput {
21 @builtin(position) clip_position: vec4<f32>,
22 @location(0) object_position: vec2<f32>,
23};
25@vertex
26fn vertex(vertex: VertexInput) -> VertexOutput {
27 var out: VertexOutput;
28 let model = get_world_from_local(vertex.instance_index);
29 out.clip_position = mesh2d_position_local_to_clip(model, vec4<f32>(vertex.position, 1.0));
30 out.object_position = vertex.position.xy;
31 return out;
34const frequency_scale = 0.005;
35const octaves = 10;
36const lacunarity = 2.9;
37const gain = 0.4;
38const seed = 324.0;
39const scale = vec2(0.4, 0.4);
40const faloff = 0.1;
42@fragment
43fn fragment(
44 in: VertexOutput,
45) -> @location(0) vec4<f32> {
46 var position = in.object_position * frequency_scale;
47 position.x += globals.time * 0.001;
49 let warp_result = fbm_simplex_2d_warp_seeded(
50 position,
51 octaves,
52 lacunarity,
53 gain,
54 seed,
55 material.num_warps,
56 scale,
57 faloff
58 );
60 // Palette 1 - frost
61 // let base_color_a = vec4(74./255., 98./255., 138./255., 1.);
62 // let base_color_b = vec4(185./255., 229./255., 232./255., 1.);
63 // let base_color_c = vec4(122./255., 178./255., 211./255., 1.);
64 // let base_color_d = vec4(223./255., 242./255., 235./255., 1.);
66 // Palette 2 - bath bomb
67 let base_color_a = vec4(9./255., 18./255., 44./255., 1.);
68 let base_color_b = vec4(135./255., 35./255., 65./255., 1.);
69 let base_color_c = vec4(190./255., 49./255., 68./255., 1.);
70 let base_color_d = vec4(225./255., 117./255., 100./255., 1.);
72 // Palette 3 - toxic
73 // let base_color_a = vec4(26./255., 26./255., 25./255., 1.);
74 // let base_color_b = vec4(49./255., 81./255., 30./255., 1.);
75 // let base_color_c = vec4(133./255., 159./255., 61./255., 1.);
76 // let base_color_d = vec4(246./255., 252./255., 223./255., 1.);
78 let color1 = mix(
79 base_color_a,
80 base_color_d,
81 smoothstep(0.0, 1.0, warp_result.noise_value)
82 );
84 let color2 = mix(
85 color1,
86 base_color_b,
87 smoothstep(0.0, 3.0, length(warp_result.positions[0]))
88 );
90 let color3 = mix(
91 color2,
92 base_color_c,
93 warp_result.positions[1].y
94 );
96 return color3;
Contents