I am using Schlick approximation to calculate the value of the Fresnel effect I found here
When I try to find corner cases for the formula I get the value of 1 when the angle between normal and viewing direction is 90° and 0,02 for 0° (I am using IOR 1 and 1.33). This means that when looking, for example, at a sphere its edges will reflect almost all of the light and its center will reflect just 2% of light.
But he doesn't make sense for me when I try to use it in the microfacet model for BRDF. 
This means that the reflectance when looking directly from above on the surface will be just 2% which is unrealistically low. 98% of the energy would be absorbed by the surface. So just after 3 bounces, the ray would transmit less than 0,0008% of the light. This would darken an image and I would have to increase its emitted light by a great amount.
Am I thinking in a bad way about it?
My second idea what that it means how much light is directly reflected as a perfect reflection without being scattered my microfacet to other directions. The rest is used for diffuse/glossy reflection. But I cannot find any evidence for it anywhere.
Or I don't simply have to use Fresnel when I am dealing with non-transparent materials.
UPDATE:
This is my code for now.
//Position of intersection is world space float3 hitpoint = ray.origin + ray.direction * ray.distance; //Direction towards camera float3 wo = -ray.direction; //Geometry normal float3 N = ray.worldNormal; //Microfacet normal float3 H = SampleMicrofacetNormal(roughness, &N, &ray); //New direction of ray float3 wi; // Add light emitted from surface ray.color += ray.mask * emission; float F = Fresnel(&H, &wi); float r1 = new_random(&ray.seed1); if (r1 <= F) { //Specular //Reflected direction float3 wi = reflect(&H, &wo); float D = D_ggx(roughness, &N, &H); float G = G_CookTorrance(roughness, &N, &H, &wo, &wi); float weight = fabs(dot(wo, H)) / fabs(dot(N, wo) * dot(N, H)); //Not using F because it is already taken into a count by //the probability of this IF/ELSE statement float reflectance = G * weight; ray.mask *= reflectance; //Check - new direction cannot point towards surface if (dot(wi, N) < 0) ray.mask = (float3)(0.0, 0.0, 0.0); } else { //Diffuse //Ray change color because light to through the material ray.mask *= color; //New random direction of diffuse ray wi = SampleDiffuseCosineWeighted(&N, &ray); //Importance sampling weight ray.mask *= dot(wi, N); } //Set new direction and position for next tracing ray.direction = wi; ray.origin = hitpoint + N * EPSILON; 
