return love.graphics.newShader[[
  #define fog vec4( 0.85, 0.85, 1.0, 1.0 )
  #define fogHigh vec4( 1.0, 1.0, 0.9, 1.0 )
  varying float depth;
  varying vec3 normal;
  varying vec4 world;
#ifdef VERTEX
  uniform mat4 mdl;
  uniform mat4 view;
  uniform mat4 proj;
  attribute vec3 VertexNormal;
  vec4 position( mat4 _, vec4 pos ){
    normal = VertexNormal;
    world = mdl * pos;
    vec4 eye = view * world;
    depth = -eye.z;
    return proj*eye;
  }
#endif
#ifdef PIXEL
  uniform vec3 light;
  vec4 effect( vec4 color, Image tex, vec2 texuv, vec2 scruv) {
    vec3 norm  = normalize( normal );
    vec3 toLight = normalize( light - world.xyz );
    float diff = max( dot( norm, light ), 0.1 );
    
    vec4 mainColor = vec4( diff * color.rgb, color.a );
  
    return mix( mix( mainColor, fog,
    clamp( depth / 80.0, 0.0, 1.0)), fogHigh,
    clamp( world.y / 20.0, 0.0, 1.0)) ;
  }
#endif
]]