 float PDF(vec3 H, vec3 N, float roughness)
 {
     float NdotH = dot(N, H);
-    if(u_distribution == cLambertian)
-    {
-        return max(NdotH * (1.0 / MATH_PI), 0.0);
-    }
-    else if(u_distribution == cGGX)
-    {
-        float D = D_GGX(NdotH, roughness);
-        return max(D, 0.0);
-    }
-    else if(u_distribution == cCharlie)
+
+    if(u_distribution == cCharlie)
     {
         float D = D_Charlie(roughness, NdotH);
         return max(D, 0.0);

    return mat3(tangent, bitangent, normal);
}

// NDF
float D_GGX(float NdotH, float roughness)
{
    float alpha = roughness * roughness;

    float alpha2 = alpha * alpha;

    float divisor = NdotH * NdotH * (alpha2 - 1.0) + 1.0;

    return alpha2 / (MATH_PI * divisor * divisor);
}

// NDF

vec4 getImportanceSample(int sampleIndex, vec3 N, float roughness)
{
    // generate a quasi monte carlo point in the unit square [0.1)^2
    vec2 xi = hammersley2d(sampleIndex, u_sampleCount);
    float u = xi.x;
    float v = xi.y;

    // declare importance sample parameters
    float phi = 0.0; // theoretically there could be a distribution that defines phi differently
