# Enhanced PBR effect with metallic texture support
# This effect extends the default PBR to support metallic textures
# Avoids redeclaring textures that are already in the base template

fragment:
    defines: |
        #define USE_METALLIC_TEXTURE 1

    inout: |
        uniform sampler2D p3d_Texture5;  // Metallic texture (not in default template)

    material: |
        // Enhanced material with metallic texture support
        #if USE_METALLIC_TEXTURE
            // Sample metallic texture
            float sampled_metallic = texture(p3d_Texture5, texcoord).x;
            
            // Apply all material properties
            // Use the sampled values from the base template for other textures
            m.basecolor = mInput.color * sampled_diffuse.xyz;
            m.specular_ior = blend_ior(mInput.specular_ior, sampled_ior);
            m.roughness = mInput.roughness * sampled_roughness;
            m.metallic = mInput.metallic * sampled_metallic;  // Now with metallic texture support!
            
            // Ensure valid ranges
            m.roughness = max(m.roughness, 0.01);
            m.metallic = clamp(m.metallic, 0.0, 1.0);
            
        #else
            // Fallback to standard material processing
            m.basecolor = mInput.color * sampled_diffuse.xyz;
            m.specular_ior = blend_ior(mInput.specular_ior, sampled_ior);
            m.roughness = mInput.roughness * sampled_roughness;
            m.metallic = mInput.metallic;  // No metallic texture
        #endif
        
        m.shading_model_param0 = mInput.arbitrary0;
