 
 	// normal
 
-	const float e = 0.01;
+	const float e = 0.001;
 
 	float nx = heightMap( vTexCoord3D + vec3( e, 0.0, 0.0 ) );
 	float ny = heightMap( vTexCoord3D + vec3( 0.0, e, 0.0 ) );
 	float nz = heightMap( vTexCoord3D + vec3( 0.0, 0.0, e ) );
 
-	vec3 normal = normalize( vNormal + 0.085 * vec3( n - nx, n - ny, n - nz ) / e );
+	vec3 normal = normalize( vNormal + 0.05 * vec3( n - nx, n - ny, n - nz ) / e );
 
 	vec3 worldToEye = eye - worldPosition.xyz;
 	vec3 eyeDirection = normalize(worldToEye);

	vec4 color = vec4( vec3( 0.001 *n, 0.015 * n, .125 * n )  , 1.0 );

	color.r = limitColor(0.0, 0.05, color.r);
	color.g = limitColor(0.025, 0.5, color.g);
	color.b = limitColor (0.15, 0.95, color.b);

	return color;
}


	// diffuse light

    vec3 vLightWeighting = vec3( 0.1 );

    vec4 lDirection = viewMatrix * vec4( normalize( vec3( 1.0, 0.0, 0.5 ) ), 0.0 );
    float directionalLightWeighting = dot( normal, normalize( lDirection.xyz ) ) * 0.25 + 0.75;
    vLightWeighting += vec3( 1.0 ) * directionalLightWeighting;

    // specular light

    vec3 dirHalfVector = normalize( lDirection.xyz + normalize( vViewPosition ) );

    float dirDotNormalHalf = dot( normal, dirHalfVector );

    float dirSpecularWeight = 0.0;
    if ( dirDotNormalHalf >= 0.0 )
        dirSpecularWeight = ( 1.0 - n ) * pow( dirDotNormalHalf, 5.0 );

    vLightWeighting += vec3( 1.0, 0.5, 0.0 ) * dirSpecularWeight * n * 2.0;

    gl_FragColor *= vec4( vLightWeighting, 1.0 );

	

