 // Rendering  parameters
 uniform float radianceClamp;
 uniform float skipProbability;
+uniform float shadowStrength;
 uniform bool maxStepsIsMiss;
 
 // Length scales
-uniform float lengthScale;                      // UPLOAD!
 uniform float minLengthScale;
 uniform float maxLengthScale;
 

    return traceDistance(start, dir, maxMarchDist, hit, material);
}

vec3 normal(in vec3 pW, int material)
{
    // Compute normal as gradient of SDF

                float sunPdf;
                vec3 woutputW;
                vec3 Li = sampleSunAtSurface(basis, rnd, woutputW, sunPdf);
                if (averageComponent(Li) > RADIANCE_EPSILON)
                {
                    Li *= Transmittance(pW+dPw, woutputW);
                    Ldirect += f * Li/max(PDF_EPSILON, sunPdf) * abs(dot(woutputW, nW));
                }
            }
            RGB += Ldirect;
        }
        else if (envMapVisible)
            RGB += environmentRadiance(primaryDir);
    } // sample n
    RGB /= float(__MAX_SAMPLES_PER_FRAME__);

    vec3 XYZ = rgbToXyz(RGB);

    // Write updated radiance and sample count
    vec4 oldL = texture(Radiance, vTexCoord);
