             vec3 lightPositions[lightCount];
             lightPositions[0] = vec3( 1., 1., -1. );
             lightPositions[1] = vec3( -1., 1., -1. );
-            /* lightPositions[2] = vec3( 0.0, -0.5, -2. ); */
-            lightPositions[2] = vec3( 0., 2., -3. );
+            lightPositions[2] = vec3( 0., 2., -0.5 );
 
             vec3 lightColors[lightCount];
-            lightColors[0] = vec3( 0.3, 0.6, 1.0 ) * 1.;
-            lightColors[1] = vec3( 1.0, 0.6, 0.3 ) * 1.;
-            lightColors[2] = vec3( 1., 1., 1. ) * 1.;
+            float colorLightScale = 0.8;
+            lightColors[0] = vec3( 0.3, 0.6, 1.0 ) * colorLightScale;
+            lightColors[1] = vec3( 1.0, 0.6, 0.3 ) * colorLightScale;
+            lightColors[2] = vec3( 1., 1., 1. ) * (5. - 2. * colorLightScale);
 
             vec3 totalColor = vec3( 0., 0., 0. );
             for( int i = 0; i < lightCount; ++i )


vec4 trace(vec3 pos, vec3 dir)
{
    float lastDist = 10000.0;
    int depth = 0;
    vec3 normal;
    /* vec3 color = vec3( 0., 0., 0. ); */
    vec3 color = vec3( 0., 0., 0. );
    const vec3 ambientColor = vec3( 0.05, 0.05, 0.1 );
    while( true ) {
        bool hit = false;
        float d = mindist(pos, hit, normal, color);

        if( hit ) {
            if( pos.z >= -1. ) {
                return vec4(1.,1.,0.,1.);
            }

    return pos;
}

struct HitInfo
{
    bool hit;
    float distance;
    vec3 normal;
    vec3 color;
};

void mindistSphere(vec3 spherePos, float sphereSize, bool deform, vec3 pos, inout HitInfo hit)
{
    vec3 localSpherePos = pos - spherePos;
    if( deform )
