8 forward_io::{VertexOutput, FragmentOutput}, 10 pbr_fragment::pbr_input_from_standard_material, 11 pbr_functions::{alpha_discard, apply_pbr_lighting, main_pass_post_lighting_processing}, 18 @builtin(front_facing) is_front: bool, 21 var pbr_input = pbr_input_from_standard_material(in, is_front); 24 pbr_input.material.base_color = alpha_discard( 25 pbr_input.material.flags, 26 pbr_input.material.alpha_cutoff, 27 pbr_input.material.base_color, 31 clustered::apply_decals(&pbr_input); 35 let view_z = clustered::get_view_z(in.world_position.xyz); 36 let is_orthographic = clustered::view_is_orthographic(); 38 clustered_forward::view_fragment_cluster_index(in.position.xy, view_z, is_orthographic); 39 var clusterable_object_index_ranges = 40 clustered_forward::unpack_clusterable_object_index_ranges(cluster_index); 41 var decal_iterator = clustered::clustered_decal_iterator_new( 42 in.world_position.xyz, 43 &clusterable_object_index_ranges 45 while (clustered::clustered_decal_iterator_next(&decal_iterator)) { 46 var decal_base_color = textureSampleLevel( 47 mesh_view_bindings::clustered_decal_textures[decal_iterator.base_color_texture_index], 48 mesh_view_bindings::clustered_decal_sampler, 53 switch (decal_iterator.tag) { 56 decal_base_color = vec4( 57 mix(pbr_input.material.base_color.rgb, vec3(1.0, 0.0, 0.0), 0.5), 63 decal_base_color = vec4( 64 mix(pbr_input.material.base_color.rgb, vec3(0.0, 0.0, 1.0), 0.5), 71 pbr_input.material.base_color = vec4( 72 mix(pbr_input.material.base_color.rgb, decal_base_color.rgb, decal_base_color.a), 73 pbr_input.material.base_color.a + decal_base_color.a 78 var out: FragmentOutput; 79 out.color = apply_pbr_lighting(pbr_input); 84 out.color = main_pass_post_lighting_processing(pbr_input, out.color);