Correct way to think about Fresnel effect 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, &amp;N, &amp;ray);

//New direction of ray
float3 wi;      

// Add light emitted from surface
ray.color += ray.mask * emission;

float F = Fresnel(&amp;H, &amp;wi);

float r1 = new_random(&amp;ray.seed1);

if (r1 &lt;= F) {
    //Specular

    //Reflected direction
    float3 wi = reflect(&amp;H, &amp;wo);    

    float D = D_ggx(roughness, &amp;N, &amp;H);
    float G = G_CookTorrance(roughness, &amp;N, &amp;H, &amp;wo, &amp;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) &lt; 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(&amp;N, &amp;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;
I will answer based on my experience with Fresnel models. Due to Kirchhoff's law of thermal radiation, in an opaque material the emissivity plus reflectivity plus absorptivity equals to one for every direction in thermal equilibrium. If the BRDF model you are using is physically-based, it should preserve energy conservation. That means that for a given viewing angle, the integral of the equation for the entire hemisphere should be equal to 1. It may be possible the reflectivity value near the normal is low, but that means that most of its contribution is elsewhere. For example, for a near-normal viewing direction, you can have a really low specular reflectivity but a much higher diffuse component. That may be the case of your model.