4 pbr_functions::alpha_discard, 5 pbr_fragment::pbr_input_from_standard_material, 7 decal::clustered::apply_decals, 12 prepass::io::{VertexOutput, FragmentOutput}, 13 deferred::functions::deferred_output, 16import package::render::{ 17 forward_io::{VertexOutput, FragmentOutput}, 18 pbr_functions::{apply_pbr_lighting, main_pass_post_lighting_processing}, 19 pbr_types::STANDARD_MATERIAL_FLAGS_UNLIT_BIT, 22@if(VISIBILITY_RANGE_DITHER) 23import package::render::pbr_functions::visibility_range_dither; 25@if(MESHLET_MESH_MATERIAL_PASS) 26import package::meshlet::visibility_buffer_resolve::resolve_vertex_output; 28@if(MATERIAL_OIT_ENABLED) 29import bevy_core_pipeline::oit::draw::oit_draw; 32import package::decal::forward::get_forward_decal_info; 36@if(MESHLET_MESH_MATERIAL_PASS) 37 @builtin(position) frag_coord: vec4<f32>, 38@if(!MESHLET_MESH_MATERIAL_PASS) 39 vertex_output: VertexOutput, 40@if(!MESHLET_MESH_MATERIAL_PASS) 41 @builtin(front_facing) is_front: bool, 43@if(MESHLET_MESH_MATERIAL_PASS) 44 let vertex_output = resolve_vertex_output(frag_coord); 45@if(MESHLET_MESH_MATERIAL_PASS) 48 var in = vertex_output; 52@if(VISIBILITY_RANGE_DITHER) 53 visibility_range_dither(in.position, in.visibility_range_dither); 56 let forward_decal_info = get_forward_decal_info(in); 58 in.world_position = forward_decal_info.world_position; 60 in.uv = forward_decal_info.uv; 63 var pbr_input = pbr_input_from_standard_material(in, is_front); 66 pbr_input.material.base_color = alpha_discard( 67 pbr_input.material.flags, 68 pbr_input.material.alpha_cutoff, 69 pbr_input.material.base_color 73 apply_decals(&pbr_input); 77 let out = deferred_output(in, pbr_input); 81 var out: FragmentOutput; 83 if (pbr_input.material.flags & STANDARD_MATERIAL_FLAGS_UNLIT_BIT) == 0u { 84 out.color = apply_pbr_lighting(pbr_input); 86 out.color = pbr_input.material.base_color; 92 out.color = main_pass_post_lighting_processing(pbr_input, out.color); 94@if(MATERIAL_OIT_ENABLED) { 95 let alpha_mode = pbr_input.material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_RESERVED_BITS; 96 if alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_BLEND { 98 oit_draw(in.position, vec4(out.color.rgb * out.color.a, out.color.a)); 102 if alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_PREMULTIPLIED 103 || alpha_mode == pbr_types::STANDARD_MATERIAL_FLAGS_ALPHA_MODE_ADD { 105 oit_draw(in.position, out.color); 111 out.color.a = min(forward_decal_info.alpha, out.color.a);