     #ifdef MATERIAL_CLEARCOAT
         f_clearcoat += getSpecularIBLContribution(materialInfo.clearcoatNormal, view, materialInfo.clearcoatRoughness, materialInfo.clearcoatF0);
     #endif
+
+    #ifdef MATERIAL_SHEEN
+        f_sheen += getSheenIBLContribution(normal, view, materialInfo.sheenRoughness, materialInfo.sheenColor);
+    #endif
 #endif
 
 vec3 punctualColor = vec3(0.0);

// Estevez and Kulla http://www.aconty.com/pdf/s2017_pbs_imageworks_sheen.pdf
float charlieDistribution(float sheenRoughness, float NdotH)
{
    //float alphaG = sheenRoughness * sheenRoughness;
    float invR = 1.0 / sheenRoughness;
    float cos2h = NdotH * NdotH;
    float sin2h = 1.0 - cos2h;
    return (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * M_PI);

    return clamp(1.0 / (4.0 * (NdotL + NdotV - NdotL * NdotV)),0.0,1.0);
}

// f_sheen
vec3 evaluateSheen(vec3 sheenColor, float sheenIntensity, float sheenRoughness, float NdotL, float NdotV, float NdotH)
{
    float sheenDistribution = charlieDistribution(sheenRoughness, NdotH);
    float sheenVisibility = neubeltVisibility(NdotL, NdotV);
    vec3 sheenTerm = sheenColor * sheenIntensity * sheenDistribution * sheenVisibility;
    return sheenTerm * M_PI;
}

//https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#acknowledgments AppendixB
