 uniform vec3 u_Camera;
 uniform int u_MipCount;
 
+struct MaterialInfo
+{
+    float perceptualRoughness;      // roughness value, as authored by the model creator (input to shader)
+    vec3 f0;                        // full reflectance color (normal incidence angle)
+
+    float alphaRoughness;           // roughness mapped to a more linear change in the roughness (proposed by [2])
+    vec3 albedoColor;
+
+    vec3 f90;                       // reflectance color at grazing angle
+    float metallic;
+
+    vec3 normal; // getNormal()
+    vec3 baseColor; // getBaseColor()
+
+    float sheenIntensity;
+    vec3 sheenColor;
+    float sheenRoughness;
+
+    float clearcoatFactor;
+    vec3 clearcoatNormal;
+    float clearcoatRoughness;
+};
+
 vec4 getBaseColor()
 {
     vec4 baseColor = vec4(1, 1, 1, 1);

    return rangeAttenuation * spotAttenuation * light.intensity * light.color * shade;
}

void main()
{
    vec4 baseColor = getBaseColor();

#else // debug output

    #ifdef DEBUG_METALLIC
        g_finalColor.rgb = vec3(materialInfo.metallic);
    #endif

    #ifdef DEBUG_ROUGHNESS
        g_finalColor.rgb = vec3(materialInfo.perceptualRoughness);
    #endif

    #ifdef DEBUG_NORMAL
