in src/elm_src/Algorithm/fractals.c [556:570]
float ambientOcclusion(vec3 p, vec3 n, float eps)
{
float o = 1.0; // Start at full output colour intensity
eps *= aoSpread; // Spread diffuses the effect
float k = aoIntensity / eps; // Set intensity factor
float d = 2.0 * eps; // Start ray a little off the surface
for (int i = 0; i < aoIterations; ++i) {
o -= (d - dE(p + n * d).x) * k;
d += eps;
k *= 0.5; // AO contribution drops as we move further from the surface
}
return clamp(o, 0.0, 1.0);
}