3 pbr_functions::alpha_discard, 4 pbr_fragment::pbr_input_from_standard_material, 5 decal::clustered::apply_decals, 10 prepass_io::{VertexOutput, FragmentOutput}, 11 pbr_deferred_functions::deferred_output, 15 forward_io::{VertexOutput, FragmentOutput}, 16 pbr_functions::{apply_pbr_lighting, main_pass_post_lighting_processing}, 17 pbr_types::STANDARD_MATERIAL_FLAGS_UNLIT_BIT, 21#ifdef VISIBILITY_RANGE_DITHER 22#import bevy_pbr::pbr_functions::visibility_range_dither; 25#ifdef MESHLET_MESH_MATERIAL_PASS 26#import bevy_pbr::meshlet_visibility_buffer_resolve::resolve_vertex_output 30#import bevy_core_pipeline::oit::oit_draw 34#import bevy_pbr::decal::forward::get_forward_decal_info 39#ifdef MESHLET_MESH_MATERIAL_PASS 40 @builtin(position) frag_coord: vec4<f32>, 42 vertex_output: VertexOutput, 43 @builtin(front_facing) is_front: bool, 46#ifdef MESHLET_MESH_MATERIAL_PASS 47 let vertex_output = resolve_vertex_output(frag_coord); 51 var in = vertex_output; 55#ifdef VISIBILITY_RANGE_DITHER 56 visibility_range_dither(in.position, in.visibility_range_dither); 60 let forward_decal_info = get_forward_decal_info(in); 61 in.world_position = forward_decal_info.world_position; 62 in.uv = forward_decal_info.uv; 66 var pbr_input = pbr_input_from_standard_material(in, is_front); 69 pbr_input.material.base_color = alpha_discard(pbr_input.material, pbr_input.material.base_color); 72 apply_decals(&pbr_input); 74#ifdef PREPASS_PIPELINE 76 let out = deferred_output(in, pbr_input); 80 var out: FragmentOutput; 81 if (pbr_input.material.flags & STANDARD_MATERIAL_FLAGS_UNLIT_BIT) == 0u { 82 out.color = apply_pbr_lighting(pbr_input); 84 out.color = pbr_input.material.base_color; 89 out.color = main_pass_post_lighting_processing(pbr_input, out.color); 93 let alpha_mode = pbr_input.material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_RESERVED_BITS; 94 if alpha_mode != pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_OPAQUE { 96 oit_draw(in.position, out.color); 102 out.color.a = min(forward_decal_info.alpha, out.color.a);