 // implementation of microfacet occlusion from “An Inexpensive BRDF Model for Physically based Rendering” by Christophe Schlick
 float geometricOcclusionSchlick(PBRInfo pbrInputs)
 {
-  float k = pbrInputs.roughness * 0.79788; // 0.79788 = sqrt(2.0/3.1415);
+  float k = pbrInputs.alpha * 0.79788; // 0.79788 = sqrt(2.0/3.1415);
   // alternately, k can be defined with
   // float k = (pbrInputs.roughness + 1)*(pbrInputs.roughness + 1)/8;
 


float geometricOcclusionSmithGGX(PBRInfo pbrInputs)
{
	return SmithG1_var2(pbrInputs.NdotL, pbrInputs.alphaG) * SmithG1_var2(pbrInputs.NdotV, pbrInputs.alphaG);
}

// The following equation(s) model the distribution of microfacet normals across the area being drawn (aka D())
// implementation from “Average Irregularity Representation of a Roughened Surface for Ray Reflection” by T. S. Trowbridge, and K. P. Reitz
float GGX(PBRInfo pbrInputs)
{
  float roughnessSq = pbrInputs.alphaG*pbrInputs.alphaG;
  float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;
  return roughnessSq / (M_PI * f * f);
}

  float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);
  vec3 specularEnvironmentR0 = specularColor.rgb;
  vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;

  // roughness is perceptual roughness; alpha is material roughness
  float alpha = roughness*roughness;

  PBRInfo pbrInputs = PBRInfo(
    NdotL,
