diff --git a/assets/shaders/array_texture.wgsl b/assets/shaders/array_texture.wgsl index 24eaa1b549648..161efadb18d24 100644 --- a/assets/shaders/array_texture.wgsl +++ b/assets/shaders/array_texture.wgsl @@ -25,11 +25,13 @@ fn fragment( pbr_input.material.base_color = pbr_input.material.base_color * mesh.color; #endif + let double_sided = (pbr_input.material.flags & STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u; + pbr_input.frag_coord = mesh.position; pbr_input.world_position = mesh.world_position; pbr_input.world_normal = fns::prepare_world_normal( mesh.world_normal, - (pbr_input.material.flags & STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u, + double_sided, is_front, ); @@ -38,6 +40,8 @@ fn fragment( pbr_input.N = fns::apply_normal_mapping( pbr_input.material.flags, mesh.world_normal, + double_sided, + is_front, #ifdef VERTEX_TANGENTS #ifdef STANDARDMATERIAL_NORMAL_MAP mesh.world_tangent, diff --git a/crates/bevy_pbr/src/render/pbr_prepass.wgsl b/crates/bevy_pbr/src/render/pbr_prepass.wgsl index 5af33bfc3e469..e17826a3f4430 100644 --- a/crates/bevy_pbr/src/render/pbr_prepass.wgsl +++ b/crates/bevy_pbr/src/render/pbr_prepass.wgsl @@ -24,15 +24,19 @@ fn fragment( #ifdef NORMAL_PREPASS // NOTE: Unlit bit not set means == 0 is true, so the true case is if lit if (material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_UNLIT_BIT) == 0u { + let double_sided = (material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u; + let world_normal = pbr_functions::prepare_world_normal( in.world_normal, - (material.flags & pbr_types::STANDARD_MATERIAL_FLAGS_DOUBLE_SIDED_BIT) != 0u, + double_sided, is_front, ); let normal = pbr_functions::apply_normal_mapping( material.flags, world_normal, + double_sided, + is_front, #ifdef VERTEX_TANGENTS #ifdef STANDARDMATERIAL_NORMAL_MAP in.world_tangent,