5 pbr_bindings::material, 8 pbr_functions::SampleBias, 10 mesh_view_bindings::view, 12 prepass::io as prepass_io, 15import bevy_render::bindless::{bindless_samplers_filtering, bindless_textures_2d}; 17@if(MESHLET_MESH_MATERIAL_PASS) 18import package::meshlet::visibility_buffer_resolve::resolve_vertex_output; 21import package::render::pbr_bindings::material_indices; 26@if(MESHLET_MESH_MATERIAL_PASS) 27 @builtin(position) frag_coord: vec4<f32>, 28@if(!MESHLET_MESH_MATERIAL_PASS) 29 in: prepass_io::VertexOutput, 30@if(!MESHLET_MESH_MATERIAL_PASS) 31 @builtin(front_facing) is_front: bool, 32) -> prepass_io::FragmentOutput { 33@if(MESHLET_MESH_MATERIAL_PASS) 34 let in = resolve_vertex_output(frag_coord); 35@if(MESHLET_MESH_MATERIAL_PASS) 38@if(!MESHLET_MESH_MATERIAL_PASS && BINDLESS) 39 let slot = mesh[in.instance_index].material_and_lightmap_bind_group_slot & 0xffffu; 40@if(!MESHLET_MESH_MATERIAL_PASS && BINDLESS) 41 let flags = pbr_bindings::material_array[material_indices[slot].material].flags; 42@if(!MESHLET_MESH_MATERIAL_PASS && BINDLESS) 43 let uv_transform = pbr_bindings::material_array[material_indices[slot].material].uv_transform; 44@if(!MESHLET_MESH_MATERIAL_PASS && !BINDLESS) 45 let flags = pbr_bindings::material.flags; 46@if(!MESHLET_MESH_MATERIAL_PASS && !BINDLESS) 47 let uv_transform = pbr_bindings::material.uv_transform; 51@if(!MESHLET_MESH_MATERIAL_PASS && VISIBILITY_RANGE_DITHER) 52 pbr_functions::visibility_range_dither(in.position, in.visibility_range_dither); 54@if(!MESHLET_MESH_MATERIAL_PASS) 55 pbr_prepass_functions::prepass_sample_color_and_alpha_discard(in); 57 var out: prepass_io::FragmentOutput; 59@if(UNCLIPPED_DEPTH_ORTHO_EMULATION) 60 out.frag_depth = in.unclipped_depth; 64 if (flags & pbr_types::STANDARD_MATERIAL_FLAGS_UNLIT_BIT) == 0u { 65 let double_sided = (flags & pbr_types::STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u; 66@if(MESHLET_MESH_MATERIAL_PASS) 67 let mesh_flags = in.mesh_flags; 69 let mesh_flags = mesh[in.instance_index].flags; 70 let is_logically_front = pbr_functions::winding_corrected_front_facing(mesh_flags, is_front); 72 let world_normal = pbr_functions::prepare_world_normal( 78 var normal = world_normal; 82@if(STANDARD_MATERIAL_NORMAL_MAP) { 85@if(STANDARD_MATERIAL_NORMAL_MAP_UV_B) 86 let uv = (uv_transform * vec3(in.uv_b, 1.0)).xy; 88 let uv = (uv_transform * vec3(in.uv, 1.0)).xy; 92@if(MESHLET_MESH_MATERIAL_PASS) { 94 let mip_scale = exp2(view.mip_bias); 95 bias.ddx_uv = in.ddx_uv * mip_scale; 96 bias.ddy_uv = in.ddy_uv * mip_scale; 98@if(!MESHLET_MESH_MATERIAL_PASS) 99 bias.mip_bias = view.mip_bias; 102 let texture = bindless_textures_2d[material_indices[slot].normal_map_texture]; 104 let texture = pbr_bindings::normal_map_texture; 106 let sampler_ = bindless_samplers_filtering[material_indices[slot].normal_map_sampler]; 108 let sampler_ = pbr_bindings::normal_map_sampler; 109@if(MESHLET_MESH_MATERIAL_PASS) 118@if(!MESHLET_MESH_MATERIAL_PASS) 126 let TBN = pbr_functions::calculate_tbn_mikktspace(normal, in.world_tangent); 128 normal = pbr_functions::apply_normal_mapping( 140 out.normal = vec4(normal * 0.5 + vec3(0.5), 1.0); 142 out.normal = vec4(in.world_normal * 0.5 + vec3(0.5), 1.0); 145@if(MOTION_VECTOR_PREPASS && MESHLET_MESH_MATERIAL_PASS) 146 out.motion_vector = in.motion_vector; 147@if(MOTION_VECTOR_PREPASS && !MESHLET_MESH_MATERIAL_PASS) 148 out.motion_vector = pbr_prepass_functions::calculate_motion_vector(in.world_position, in.previous_world_position); 154fn fragment(in: prepass_io::VertexOutput) { 155 pbr_prepass_functions::prepass_sample_color_and_alpha_discard(in);