7 forward_io::{VertexOutput, FragmentOutput}, 9 pbr_fragment::pbr_input_from_standard_material, 10 pbr_functions::{alpha_discard, apply_pbr_lighting, main_pass_post_lighting_processing}, 16 @builtin(front_facing) is_front: bool, 19 var pbr_input = pbr_input_from_standard_material(in, is_front); 22 pbr_input.material.base_color = alpha_discard(pbr_input.material, pbr_input.material.base_color); 25 clustered::apply_decals(&pbr_input); 29 let view_z = clustered::get_view_z(in.world_position.xyz); 30 let is_orthographic = clustered::view_is_orthographic(); 32 clustered_forward::view_fragment_cluster_index(in.position.xy, view_z, is_orthographic); 33 var clusterable_object_index_ranges = 34 clustered_forward::unpack_clusterable_object_index_ranges(cluster_index); 35 var decal_iterator = clustered::clustered_decal_iterator_new( 36 in.world_position.xyz, 37 &clusterable_object_index_ranges 39 while (clustered::clustered_decal_iterator_next(&decal_iterator)) { 40 var decal_base_color = textureSampleLevel( 41 mesh_view_bindings::clustered_decal_textures[decal_iterator.base_color_texture_index], 42 mesh_view_bindings::clustered_decal_sampler, 47 switch (decal_iterator.tag) { 50 decal_base_color = vec4( 51 mix(pbr_input.material.base_color.rgb, vec3(1.0, 0.0, 0.0), 0.5), 57 decal_base_color = vec4( 58 mix(pbr_input.material.base_color.rgb, vec3(0.0, 0.0, 1.0), 0.5), 65 pbr_input.material.base_color = vec4( 66 mix(pbr_input.material.base_color.rgb, decal_base_color.rgb, decal_base_color.a), 67 pbr_input.material.base_color.a + decal_base_color.a 72 var out: FragmentOutput; 73 out.color = apply_pbr_lighting(pbr_input); 78 out.color = main_pass_post_lighting_processing(pbr_input, out.color);