return love.graphics.newShader[[
  #define fog vec4( 0.85, 0.85, 1.0, 1.0 )
  #define fogHigh vec4( 1.0, 1.0, 0.85, 1.0 )
  varying float depth;
  varying float height;
  varying float instanceColor;
#ifdef VERTEX
  //per instance: (uniform) scale and xz position
  attribute vec4 bellInstance;
  uniform mat4 view;
  uniform mat4 proj;
  vec4 position( mat4 _, vec4 pos ){
    instanceColor = bellInstance.a;
    pos.xyz *= bellInstance.r;
    pos.xz += bellInstance.gb;
    height = pos.y;
    vec4 eye = view * pos;
    depth = -eye.z;
    return proj*eye;
  }
#endif
#ifdef PIXEL
  vec4 effect( vec4 color, Image tex, vec2 texuv, vec2 scruv) {
    vec4 bellColor = mix( vec4(1.0,1.0,1.0,1.0), vec4(0.2,0.0,0.0,1.0), instanceColor );
    return vec4(
    mix( mix( bellColor * color * Texel( tex, texuv ), fog,
    clamp( depth / 20.0, 0.0, 1.0)), fogHigh,
    clamp( height / 20.0, 0.0, 1.0)).rgb,
    1.0 );
  }
#endif
]]