From 8689574e959e6d8d9e9d9ec5e26d6d756c8a6508 Mon Sep 17 00:00:00 2001 From: "Elijah C. Voigt" Date: Wed, 24 Jan 2024 21:00:32 -0800 Subject: [PATCH] Example works, not sure why gray in game. Going to move on to some smaller wins --- assets/examples/shaders/dissolve.wgsl | 2 +- assets/shaders/dissolve.wgsl | 1 + examples/shaders.rs | 50 ++++++++++++++++----------- src/display3d.rs | 11 +++--- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/assets/examples/shaders/dissolve.wgsl b/assets/examples/shaders/dissolve.wgsl index 63ef228..e8c1b9d 100644 --- a/assets/examples/shaders/dissolve.wgsl +++ b/assets/examples/shaders/dissolve.wgsl @@ -63,7 +63,7 @@ fn fragment( var out: FragmentOutput; out.color = apply_pbr_lighting(pbr_input); - var pos = vec2(in.uv * 2.0); + var pos = vec2(in.uv * 2.718); var n = fbm(pos); diff --git a/assets/shaders/dissolve.wgsl b/assets/shaders/dissolve.wgsl index fe54d38..e071e59 100644 --- a/assets/shaders/dissolve.wgsl +++ b/assets/shaders/dissolve.wgsl @@ -70,6 +70,7 @@ fn fragment( var cutoff = dissolve.percentage; if n > cutoff { + out.color = vec4(0.0, 0.0, 0.0, cutoff); discard; } diff --git a/examples/shaders.rs b/examples/shaders.rs index c407e0a..409df32 100644 --- a/examples/shaders.rs +++ b/examples/shaders.rs @@ -15,30 +15,16 @@ fn main() { )) .add_systems(Startup, setup) .add_systems(Update, rotate) + .add_systems(Update, setup_material) .run(); } fn setup( mut commands: Commands, - mut meshes: ResMut>, - mut materials: ResMut>, + assets: Res, ) { - commands.spawn(MaterialMeshBundle { - mesh: meshes.add( - Mesh::try_from(shape::Box { - ..default() - }).unwrap(), - ), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - material: materials.add(ExtendedMaterial { - base: StandardMaterial { - base_color: Color::RED, - opaque_render_method: OpaqueRendererMethod::Auto, - alpha_mode: AlphaMode::Mask(0.5), - ..default() - }, - extension: MatExt { cutoff: 0.5 }, - }), + commands.spawn(SceneBundle { + scene: assets.load("models/Martian Chess.glb#Scene0"), ..default() }); @@ -69,6 +55,30 @@ impl MaterialExtension for MatExt { } } +fn setup_material( + events: Query<(Entity, &Handle), Added>>, + standard_materials: Res>, + mut materials: ResMut>, + mut commands: Commands, +) { + events.iter().for_each(|(entity, handle)| { + // Extension we will add to existing gltf-sourced materials + let extension = MatExt { cutoff: 1.0 }; + // Base material we will extend for the duration of the dissolve effect + let mut base = standard_materials.get(handle).expect("Resolve material data").clone(); + + base.opaque_render_method = OpaqueRendererMethod::Auto; + base.alpha_mode = AlphaMode::Mask(0.5); + + commands.entity(entity).insert( + materials.add(ExtendedMaterial { + base, + extension, + }) + ).remove::>(); + }) +} + fn rotate( mut query: Query<&mut Transform, With>>, time: Res