         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));

}

void main() {
    // Nota: NON SETTARE MAI METALNESS O ROUGHNESS A 0.0
    LOWP vec3 color;

    #ifdef defAlbedo
        LOWP vec3 albedo = texture(u_albedo, v_texCoord).rgb;
    #else
        LOWP vec3 albedo = vec3(1.0);
    #endif

    #ifdef defMetalness
        LOWP float metalness = texture(u_metalness, v_texCoord).r;
    #else
        LOWP float metalness = 0.5;
    #endif

    #ifdef defRoughness
        LOWP float roughness = texture(u_roughness, v_texCoord).r;
    #else
        LOWP float roughness = 0.1;
    #endif

    #ifdef defAmbientOcclusion

#endif

#define M_PI 3.14159265359

out vec4 fragmentColor;

uniform LOWP int u_graphicsWidth;
uniform LOWP int u_graphicsHeight;
uniform HIGHP mat4 u_viewMatrix;
