4 pbr_bindings::material, 7 pbr_functions::SampleBias, 9 mesh_view_bindings::view, 12#ifdef MESHLET_MESH_MATERIAL_PASS 13#import bevy_pbr::meshlet_visibility_buffer_resolve::resolve_vertex_output 16#ifdef PREPASS_FRAGMENT 19#ifdef MESHLET_MESH_MATERIAL_PASS 20 @builtin(position) frag_coord: vec4<f32>, 22 in: prepass_io::VertexOutput, 23 @builtin(front_facing) is_front: bool, 25) -> prepass_io::FragmentOutput { 26#ifdef MESHLET_MESH_MATERIAL_PASS 27 let in = resolve_vertex_output(frag_coord); 30 pbr_prepass_functions::prepass_alpha_discard(in); 33 var out: prepass_io::FragmentOutput; 35#ifdef DEPTH_CLAMP_ORTHO 36 out.frag_depth = in.clip_position_unclamped.z; 37#endif // DEPTH_CLAMP_ORTHO 41 if (material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_UNLIT_BIT) == 0u { 42 let double_sided = (material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u; 44 let world_normal = pbr_functions::prepare_world_normal( 50 var normal = world_normal; 54#ifdef STANDARD_MATERIAL_NORMAL_MAP 57#ifdef STANDARD_MATERIAL_NORMAL_MAP_UV_B 58 let uv = (material.uv_transform * vec3(in.uv_b, 1.0)).xy; 60 let uv = (material.uv_transform * vec3(in.uv, 1.0)).xy; 65#ifdef MESHLET_MESH_MATERIAL_PASS 66 bias.ddx_uv = in.ddx_uv; 67 bias.ddy_uv = in.ddy_uv; 68#else // MESHLET_MESH_MATERIAL_PASS 69 bias.mip_bias = view.mip_bias; 70#endif // MESHLET_MESH_MATERIAL_PASS 72 let Nt = pbr_functions::sample_texture( 73 pbr_bindings::normal_map_texture, 74 pbr_bindings::normal_map_sampler, 78 let TBN = pbr_functions::calculate_tbn_mikktspace(normal, in.world_tangent); 80 normal = pbr_functions::apply_normal_mapping( 88#endif // STANDARD_MATERIAL_NORMAL_MAP 89#endif // VERTEX_TANGENTS 92 out.normal = vec4(normal * 0.5 + vec3(0.5), 1.0); 94 out.normal = vec4(in.world_normal * 0.5 + vec3(0.5), 1.0); 96#endif // NORMAL_PREPASS 98#ifdef MOTION_VECTOR_PREPASS 99#ifdef MESHLET_MESH_MATERIAL_PASS 100 out.motion_vector = in.motion_vector; 102 out.motion_vector = pbr_prepass_functions::calculate_motion_vector(in.world_position, in.previous_world_position); 110fn fragment(in: prepass_io::VertexOutput) { 111 pbr_prepass_functions::prepass_alpha_discard(in); 113#endif // PREPASS_FRAGMENT