1#define_import_path bevy_pbr::pbr_prepass_functions 4 prepass_io::VertexOutput, 5 prepass_bindings::previous_view_uniforms, 6 mesh_view_bindings::view, 12const PREMULTIPLIED_ALPHA_CUTOFF = 0.05; 15fn prepass_alpha_discard(in: VertexOutput) { 18 var output_color: vec4<f32> = pbr_bindings::material.base_color; 21#ifdef STANDARD_MATERIAL_BASE_COLOR_UV_B 23#else // STANDARD_MATERIAL_BASE_COLOR_UV_B 25#endif // STANDARD_MATERIAL_BASE_COLOR_UV_B 27 let uv_transform = pbr_bindings::material.uv_transform; 28 uv = (uv_transform * vec3(uv, 1.0)).xy; 29 if (pbr_bindings::material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_BASE_COLOR_TEXTURE_BIT) != 0u { 30 output_color = output_color * textureSampleBias(pbr_bindings::base_color_texture, pbr_bindings::base_color_sampler, uv, view.mip_bias); 34 let alpha_mode = pbr_bindings::material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_RESERVED_BITS; 35 if alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_MASK { 36 if output_color.a < pbr_bindings::material.alpha_cutoff { 39 } else if (alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_BLEND || 40 alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_ADD || 41 alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_ALPHA_TO_COVERAGE) { 42 if output_color.a < PREMULTIPLIED_ALPHA_CUTOFF { 45 } else if alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_PREMULTIPLIED { 46 if all(output_color < vec4(PREMULTIPLIED_ALPHA_CUTOFF)) { 54#ifdef MOTION_VECTOR_PREPASS 55fn calculate_motion_vector(world_position: vec4<f32>, previous_world_position: vec4<f32>) -> vec2<f32> { 56 let clip_position_t = view.unjittered_clip_from_world * world_position; 57 let clip_position = clip_position_t.xy / clip_position_t.w; 58 let previous_clip_position_t = previous_view_uniforms.clip_from_world * previous_world_position; 59 let previous_clip_position = previous_clip_position_t.xy / previous_clip_position_t.w; 66 return (clip_position - previous_clip_position) * vec2(0.5, -0.5); 68#endif // MOTION_VECTOR_PREPASS