     {
         // sheen mapping
         float alpha = roughness * roughness;
-        sinTheta = pow(u, alpha / (2.0*alpha + 1.0));
+        sinTheta = pow(xi.y, alpha / (2.0*alpha + 1.0));
         cosTheta = sqrt(1.0 - sinTheta * sinTheta);
-        phi = 2.0 * MATH_PI * v;
+        phi = 2.0 * MATH_PI * xi.x;
     }
 
     // transform the hemisphere sample to the normal coordinate frame

        // 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);
        cosTheta = ggx.cosTheta;
        sinTheta = ggx.sinTheta;
        phi = ggx.phi;

    {
        // Cosine weighted hemisphere sampling
        // http://www.pbr-book.org/3ed-2018/Monte_Carlo_Integration/2D_Sampling_with_Multidimensional_Transformations.html#Cosine-WeightedHemisphereSampling
        cosTheta = sqrt(1.0 - xi.y);
        sinTheta = sqrt(xi.y); // equivalent to `sqrt(1.0 - cosTheta*cosTheta)`;
        phi = 2.0 * MATH_PI * xi.x;

        pdf = cosTheta / MATH_PI; // evaluation for solid angle, therefore drop the sinTheta
    }
