text: (function(Blotter) {
  
    Blotter.LiquidDistortMaterial = function() {
      Blotter.Material.apply(this, arguments);
    };
  
    Blotter.LiquidDistortMaterial.prototype = Object.create(Blotter.Material.prototype);
  
    Blotter._extendWithGettersSetters(Blotter.LiquidDistortMaterial.prototype, (function () {
  
      function _mainImageSrc () {
        var mainImageSrc = [
          Blotter.Assets.Shaders.Noise3D,
  
          "void mainImage( out vec4 mainImage, in vec2 fragCoord )",
          "{",
          "    // Setup ========================================================================",
  
          "    vec2 uv = fragCoord.xy / uResolution.xy;",
          "    float z = uSeed + uGlobalTime * uSpeed;",
  
          "    uv += snoise(vec3(uv, z)) * uVolatility;",
  
          "    mainImage = textTexture(uv);",
  
          "}"
        ].join("\n");
  
        return mainImageSrc;
      }
  
      return {
  
        constructor : Blotter.LiquidDistortMaterial,
  
        init : function () {
          this.mainImage = _mainImageSrc();
          this.uniforms = {
            uSpeed : { type : "1f", value : 1.0 },
            uVolatility : { type : "1f", value : 0.15 },
            uSeed : { type : "1f", value : 0.1 }
          };
        }
      };
  
    })());
  
  })(
    this.Blotter
  );
  