     return;
 #endif
 
-    perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);
+    perceptualRoughness = clamp(perceptualRoughness, 0.0, 1.0);
     metallic = clamp(metallic, 0.0, 1.0);
 
     // Roughness is authored as perceptual roughness; as is convention,

float solveMetallic(vec3 diffuse, vec3 specular, float oneMinusSpecularStrength) {
    float specularBrightness = getPerceivedBrightness(specular);

    if (specularBrightness < c_MinRoughness) {
        return 0.0;
    }

    float diffuseBrightness = getPerceivedBrightness(diffuse);

    float a = c_MinRoughness;
    float b = diffuseBrightness * oneMinusSpecularStrength / (1.0 - c_MinRoughness) + specularBrightness - 2.0 * c_MinRoughness;
    float c = c_MinRoughness - specularBrightness;
    float D = b * b - 4.0 * a * c;

    return clamp((-b + sqrt(D)) / (2.0 * a), 0.0, 1.0);

};

const float M_PI = 3.141592653589793;
const float c_MinReflectance = 0.04;

vec4 getVertexColor()
{
