{
  "name": "Water",
  "dimension": "text",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "effect": {
    "glsl": "// A letter as a tank: the liquid's surface, in glyph texels from the top.\nfloat tankSurface(Fx f, float level, float speed) {\n    float x = f.o.x + f.q.x;\n    return f.size.y * (1.0 - level)\n         + sin(x * 0.55 - f.t * speed) * 0.7\n         + sin(x * 0.23 + f.t * speed * 0.6) * 0.5;\n}\nvec4 effect(Fx f) {\n    float a = G(f.p);\n    float surf = tankSurface(f, 0.56 + 0.06 * sin(f.t * 0.9), 3.2);\n    float depth = f.q.y - surf;\n    vec3 c;\n    if (depth < 0.0) {\n        c = G(f.p - vec2(0.0, 1.0)) < 0.5 ? vec3(0.44, 0.47, 0.56) : vec3(0.27, 0.29, 0.37);\n    } else {\n        c = mix(vec3(0.16, 0.5, 0.98), vec3(0.06, 0.24, 0.72), clamp(depth / 5.0, 0.0, 1.0));\n        if (depth < 1.0) c = vec3(0.42, 0.74, 1.0);\n        // Caustics: light that wanders through the water.\n        float k = vnoise(vec2((f.o.x + f.q.x) * 0.5 + f.t * 0.8, f.q.y * 0.7 - f.t * 0.5));\n        if (depth >= 1.0 && k > 0.72) c = mix(c, vec3(0.5, 0.8, 1.0), 0.45);\n        if (depth >= 1.0 && h3(vec3(floor(f.g.x), floor(f.g.y + f.t * 3.0), 2.0)) > 0.95) c = vec3(0.75, 0.9, 1.0);\n    }\n    return over(vec4(c, a), vec4(0.03, 0.04, 0.08, G(f.p - 1.0) * 0.85));\n}\n",
    "pad": [
      0,
      0,
      1,
      1
    ],
    "prompt": "",
    "preset": "fishtank",
    "sample": "WATER"
  }
}