   float G = NdotL / (NdotL * (1.0 - k) + k);
   G *= NdotV / (NdotV * (1.0 - k) + k);
 
-  light *= (1.0 - metalness);
-  light += lightColor.rgb * vec3((D * F * G) / (4.0 * NdotV));
+  color.rgb += lightColor.rgb * NdotL * diffuseColor.rgb * (1.0 - metalness);
+  color.rgb += lightColor.rgb * vec3((D * F * G) / (4.0 * NdotV));
   color.a = mix(diffuseColor.a, 1.0, FexpNV);
 #else // !USE_PHYSICAL_MAPPING
 

	materialColor.rgb *= mix(envColor0, envColor1, u_EnvironmentInterpolation).rgb;
#endif // USE_REFLECTIVE_SPECULAR

#if defined(r_specularMapping)
  // The minimal specular exponent should preferably be nonzero to avoid the undefined pow(0, 0)
  light += lightColor.rgb * materialColor.rgb * pow(NdotH, u_SpecularExponent.x * materialColor.a + u_SpecularExponent.y) * r_SpecularScale;
#endif // r_specularMapping
#endif // !USE_PHYSICAL_MAPPING

  color.rgb += light;
}

#if defined(TEXTURE_INTEGER)

  NdotL = clamp( NdotL, 0.0, 1.0 );
#endif

#if defined(USE_PHYSICAL_MAPPING)
  // Daemon PBR packing defaults to ORM like glTF 2.0 defines
  // https://www.khronos.org/blog/art-pipeline-for-gltf
