#import bevy_pbr::{ forward_io::VertexOutput, mesh_view_bindings::view, } struct OutlineMaterial { color: vec4, rim_power: f32, rim_mix: f32, pass_kind: u32, } @group(#{MATERIAL_BIND_GROUP}) @binding(0) var material: OutlineMaterial; @fragment fn fragment(in: VertexOutput) -> @location(0) vec4 { let world_normal = normalize(in.world_normal); let view_dir = normalize(view.world_position.xyz - in.world_position.xyz); let fresnel = pow(1.0 - saturate(dot(world_normal, view_dir)), material.rim_power); var alpha = fresnel * material.rim_mix; if material.pass_kind == 1u { alpha *= 0.8; } return vec4(material.color.rgb, material.color.a * saturate(alpha)); }