         // Trowbridge-Reitz / GGX microfacet model (Walter et al)
         // https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html
 
-        MicrofacetDistributionSample ggx = GGX(vec2(u, v), roughness);
+        MicrofacetDistributionSample ggx = GGX(xi, roughness);
         cosTheta = ggx.cosTheta;
         sinTheta = ggx.sinTheta;
         phi = ggx.phi;

{
    // 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

    {
        // sheen mapping
        float alpha = roughness * roughness;
        sinTheta = pow(xi.y, alpha / (2.0*alpha + 1.0));
        cosTheta = sqrt(1.0 - sinTheta * sinTheta);
        phi = 2.0 * MATH_PI * xi.x;
    }

    // transform the hemisphere sample to the normal coordinate frame
