         LOWP vec3 irradiance = texture(u_irradiance, N).rgb;
         LOWP vec3 diffuse = irradiance * albedo;
 
+        const float MAX_REFLECTION_LOD = 4.0;
+
         LOWP vec3 prefilteredColor = textureLod(u_prefilter, R, roughness * MAX_REFLECTION_LOD).rgb;
         LOWP vec2 brdf = texture(u_brdf, vec2(max(dot(N, V), 0.0), roughness)).rg;
         LOWP vec3 specular = prefilteredColor * (F * brdf.x + brdf.y);
 
         LOWP vec3 ambient = (kD * diffuse + specular) * ambientOcclusion;
     #else
-        LOWP vec3 ambient = vec3(u_ambient) * albedo;
-    #endif
-
-    color = ambient + Lo;
+        LOWP vec3 ambient = vec3(0.03) * albedo;
+    #endif
+
+    LOWP vec3 color = ambient + Lo;
 
     #ifdef defGammaCorrection
         color = color / (color + vec3(1.0));

            LOWP vec3 H = normalize(V + L);

            LOWP vec3 F = fresnelSchlick(max(dot(H, V), 0.0), F0);

            LOWP float NDF = distributionGGX(N, H, roughness);
            LOWP float G = geometrySmith(N, V, L, roughness);


            LOWP vec3 lightDirection = u_lightPositions[lightId] - v_position;
            LOWP float lightDistance = length(lightDirection);

            LOWP float lightAttenuation = clamp(1.0 - (lightDistance / lightRadius), 0.0, 1.0);
            lightAttenuation *= lightAttenuation;

            LOWP vec3 radiance = lightInfo.rgb;
