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 pbr_input.material.base_color = clustered::apply_decal_base_color( 26 in.world_position.xyz, 28 pbr_input.material.base_color 33 let view_z = clustered::get_view_z(in.world_position.xyz); 34 let is_orthographic = clustered::view_is_orthographic(); 36 clustered_forward::fragment_cluster_index(in.position.xy, view_z, is_orthographic); 37 var clusterable_object_index_ranges = 38 clustered_forward::unpack_clusterable_object_index_ranges(cluster_index); 39 var decal_iterator = clustered::clustered_decal_iterator_new( 40 in.world_position.xyz, 41 &clusterable_object_index_ranges 43 while (clustered::clustered_decal_iterator_next(&decal_iterator)) { 44 var decal_base_color = textureSampleLevel( 45 mesh_view_bindings::clustered_decal_textures[decal_iterator.texture_index], 46 mesh_view_bindings::clustered_decal_sampler, 51 switch (decal_iterator.tag) { 54 decal_base_color = vec4( 55 mix(pbr_input.material.base_color.rgb, vec3(1.0, 0.0, 0.0), 0.5), 61 decal_base_color = vec4( 62 mix(pbr_input.material.base_color.rgb, vec3(0.0, 0.0, 1.0), 0.5), 69 pbr_input.material.base_color = vec4( 70 mix(pbr_input.material.base_color.rgb, decal_base_color.rgb, decal_base_color.a), 71 pbr_input.material.base_color.a + decal_base_color.a 76 var out: FragmentOutput; 77 out.color = apply_pbr_lighting(pbr_input); 82 out.color = main_pass_post_lighting_processing(pbr_input, out.color);