Fuck yes we got a good approximation of the effect working!

main
Elijah C. Voigt 2 years ago
parent b2dd8e4e3c
commit 5804f78d25

@ -11,6 +11,7 @@
struct MatExt {
step: u32,
// Cutoff (for animation)
}
@group(1) @binding(100)
@ -24,7 +25,7 @@ fn random(st: vec2<f32>) -> f32 {
fn noise(st: vec2<f32>) -> f32 {
var i = floor(st);
var f = floor(st);
var f = fract(st);
var a = random(i);
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;
}
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
fn fragment(
in: VertexOutput,
@builtin(front_facing) is_front: bool,
) -> FragmentOutput {
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;
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;
}

@ -25,8 +25,7 @@ fn setup(
) {
commands.spawn(MaterialMeshBundle {
mesh: meshes.add(
Mesh::try_from(shape::UVSphere {
radius: 1.0,
Mesh::try_from(shape::Box {
..default()
}).unwrap(),
),
@ -34,7 +33,7 @@ fn setup(
material: materials.add(ExtendedMaterial {
base: StandardMaterial {
base_color: Color::RED,
opaque_render_method: OpaqueRendererMethod::Forward,
opaque_render_method: OpaqueRendererMethod::Auto,
alpha_mode: AlphaMode::Mask(0.5),
..default()
},
@ -68,9 +67,6 @@ impl MaterialExtension for MatExt {
fn fragment_shader() -> ShaderRef {
"examples/shaders/dissolve.wgsl".into()
}
fn deferred_fragment_shader() -> ShaderRef {
"examples/shaders/dissolve.wgsl".into()
}
}
fn rotate(

Loading…
Cancel
Save