 
       vec3 irradiance = sample_environment(environment_samplers[i], corrected_N, num_levels - 1.5, 0.5, 1.0);
 
-      const vec3 diffuse_environment = irradiance * albedo * environments[i].strength;
+      const vec3 diffuse_environment = irradiance * albedo_alpha.rgb * environments[i].strength;
 
       attenuation = (attenuation == 0.0) ? environment_attenuation(fragment.position, environments[i].position, environments[i].extent, environments[i].falloff) : 1.0 - attenuation;
 


    const vec3 kS = F;
    const vec3 kD = (vec3(1.0) - kS) * (1.0 - metallic);
    direct += (kD * albedo / PI + specular) * radiance * NdotL  * (1.0 - material.transmission) * shadow;
  }

  vec3 ambient = vec3(0.0, 0.0, 0.0);

  float ambient_occlusion_from_map = texture(material.ambient_occlusion_sampler, fragment.uv).r;
  float ambient_occlusion = material.ambient_occlusion * ambient_occlusion_from_map;

  const vec3 V = normalize(camera.position - fragment.position);
  const vec3 R = -reflect(fragment.camera_to_surface, N);

  const float NdotV = max(dot(N, V), 0.0);

  vec3 F0 = vec3(0.02);
  F0 = mix(F0, albedo_alpha.rgb, metallic);

  vec3 direct = shade_direct(spot_lights, fragment.proj_shadow, shadow_samplers, fragment.position, N, V, NdotV, albedo_alpha.rgb, metallic, roughness);

  //Directional light
  if (directional_light.strength > 0.0) {
