# PBR effect with normal mapping support
# This effect ensures proper material color handling when only normal maps are applied

fragment:
    defines: |
        #define USE_NORMAL_MAPPING_ONLY 1

    material: |
        // Handle normal mapping without requiring diffuse texture
        #if USE_NORMAL_MAPPING_ONLY
            // Use material color directly, don't multiply with sampled_diffuse
            // This prevents the black color issue when no diffuse texture is present
            m.basecolor = mInput.color;
            
            // Handle other textures normally if they exist
            m.specular_ior = blend_ior(mInput.specular_ior, sampled_ior);
            m.roughness = mInput.roughness * sampled_roughness;
            m.metallic = mInput.metallic;
            
            // Ensure minimum roughness
            m.roughness = max(m.roughness, 0.01);
            
        #else
            // 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;
        #endif
        
        m.shading_model_param0 = mInput.arbitrary0;
