|
|
|
@ -11,6 +11,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
struct MatExt {
|
|
|
|
struct MatExt {
|
|
|
|
step: u32,
|
|
|
|
step: u32,
|
|
|
|
|
|
|
|
// Cutoff (for animation)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@group(1) @binding(100)
|
|
|
|
@group(1) @binding(100)
|
|
|
|
@ -24,7 +25,7 @@ fn random(st: vec2<f32>) -> f32 {
|
|
|
|
|
|
|
|
|
|
|
|
fn noise(st: vec2<f32>) -> f32 {
|
|
|
|
fn noise(st: vec2<f32>) -> f32 {
|
|
|
|
var i = floor(st);
|
|
|
|
var i = floor(st);
|
|
|
|
var f = floor(st);
|
|
|
|
var f = fract(st);
|
|
|
|
|
|
|
|
|
|
|
|
var a = random(i);
|
|
|
|
var a = random(i);
|
|
|
|
var b = random(i + vec2(1.0, 0.0));
|
|
|
|
var b = random(i + vec2(1.0, 0.0));
|
|
|
|
@ -36,22 +37,48 @@ fn noise(st: vec2<f32>) -> f32 {
|
|
|
|
return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
|
|
|
|
return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const octaves: i32 = 6;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn fbm(st: vec2<f32>) -> f32 {
|
|
|
|
|
|
|
|
var _st = st;
|
|
|
|
|
|
|
|
var value = 0.0;
|
|
|
|
|
|
|
|
var amplitude = 0.5;
|
|
|
|
|
|
|
|
var frequency = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0 ; i < octaves; i++) {
|
|
|
|
|
|
|
|
value += amplitude * noise(_st);
|
|
|
|
|
|
|
|
_st *= 2.0;
|
|
|
|
|
|
|
|
amplitude *= 0.5;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@fragment
|
|
|
|
@fragment
|
|
|
|
fn fragment(
|
|
|
|
fn fragment(
|
|
|
|
in: VertexOutput,
|
|
|
|
in: VertexOutput,
|
|
|
|
@builtin(front_facing) is_front: bool,
|
|
|
|
@builtin(front_facing) is_front: bool,
|
|
|
|
) -> FragmentOutput {
|
|
|
|
) -> FragmentOutput {
|
|
|
|
var pbr_input = pbr_input_from_standard_material(in, is_front);
|
|
|
|
var pbr_input = pbr_input_from_standard_material(in, is_front);
|
|
|
|
pbr_input.material.base_color.b = pbr_input.material.base_color.r;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var out: FragmentOutput;
|
|
|
|
var out: FragmentOutput;
|
|
|
|
out.color = apply_pbr_lighting(pbr_input);
|
|
|
|
out.color = apply_pbr_lighting(pbr_input);
|
|
|
|
|
|
|
|
|
|
|
|
var pos = vec2(in.uv * 5.0) + vec2(globals.time);
|
|
|
|
var pos = vec2(in.uv * 2.0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var n = fbm(pos);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// out.color *= n;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var cutoff = abs(sin(globals.time));
|
|
|
|
|
|
|
|
|
|
|
|
var n = noise(pos);
|
|
|
|
if n > cutoff {
|
|
|
|
|
|
|
|
discard;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
out.color = vec4(vec3(n), abs(sin(globals.time)));
|
|
|
|
if n > (cutoff - 0.01) {
|
|
|
|
|
|
|
|
out.color = vec4(0.0, 1.0, 1.0, 1.0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return out;
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
}
|