{
  "name": "Molten Lava Orb",
  "dimension": "3d",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "world": {
    "glsl": "float lavaMin(float a, float b, float k) {\n    float h = max(k - abs(a - b), 0.0) / k;\n    return min(a, b) - h * h * k * 0.25;\n}\nfloat lavaField(vec3 p, vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g) {\n    float v = length(p - a.xyz) - a.w;\n    v = lavaMin(v, length(p - b.xyz) - b.w, 0.17);\n    v = lavaMin(v, length(p - c.xyz) - c.w, 0.17);\n    v = lavaMin(v, length(p - d.xyz) - d.w, 0.16);\n    v = lavaMin(v, length(p - e.xyz) - e.w, 0.14);\n    v = lavaMin(v, length(p - f.xyz) - f.w, 0.11);\n    return lavaMin(v, length(p - g.xyz) - g.w, 0.12);\n}\nvec4 object(vec3 ro, vec3 rd, float t0, float t1, float time, vec3 light, inout float depth) {\n    float t = time * 0.72;\n    vec4 a = vec4(0.04 * sin(t), 0.025 * cos(t * 0.8), 0.035 * cos(t), 0.325);\n    vec4 b = vec4(0.29 * cos(t * 0.63), 0.32 + 0.18 * sin(t), 0.24 * sin(t * 0.63), 0.245);\n    vec4 c = vec4(-0.43 - 0.16 * sin(t * 0.91), 0.05 + 0.14 * sin(t * 0.73), 0.15 * cos(t * 0.7), 0.235);\n    vec4 d = vec4(0.38 + 0.18 * sin(t * 0.7 + 1.4), -0.20 + 0.09 * cos(t), -0.13 + 0.22 * sin(t * 0.82), 0.225);\n    vec4 e = vec4(-0.13 + 0.2 * sin(t * 0.8), -0.41 - 0.16 * sin(t * 0.9 + 0.5), -0.06 + 0.14 * cos(t * 0.8), 0.215);\n    vec3 pearl = normalize(vec3(-0.63, 0.77, 0.11 + 0.1 * sin(t * 0.7)));\n    vec4 f = vec4(pearl * (0.765 + 0.055 * sin(t * 0.85 + 2.0)), 0.095);\n    vec3 drift = normalize(vec3(0.65, 0.20 + 0.23 * sin(t * 0.7), 0.75));\n    drift.xz = rpw_rot(t * 0.23) * drift.xz;\n    vec4 g = vec4(drift * (0.53 + 0.16 * sin(t * 0.9 + 1.3)), 0.145);\n    float rayT = t0;\n    float closest = 1.0;\n    float nearT = t0;\n    bool hit = false;\n    for (int i = 0; i < 80; i++) {\n        vec3 p = ro + rd * rayT;\n        float h = lavaField(p, a,b,c,d,e,f,g);\n        if (h < closest) { closest = h; nearT = rayT; }\n        if (h < 0.0012) { hit = true; break; }\n        rayT += max(0.001, h * 0.85);\n        if (rayT > t1) break;\n    }\n    if (!hit) {\n        float alpha = 0.24 * exp(-max(closest, 0.0) * 28.0);\n        alpha *= 1.0 - smoothstep(0.88, 0.98, length(ro + rd * nearT));\n        if (alpha < 0.003) return vec4(0.0);\n        depth = clamp(nearT, t0, t1);\n        return vec4(1.0, 0.16, 0.40, alpha);\n    }\n    vec3 p = ro + rd * rayT;\n    vec2 ep = vec2(0.0018, 0.0);\n    vec3 n = normalize(vec3(\n        lavaField(p + ep.xyy,a,b,c,d,e,f,g) - lavaField(p - ep.xyy,a,b,c,d,e,f,g),\n        lavaField(p + ep.yxy,a,b,c,d,e,f,g) - lavaField(p - ep.yxy,a,b,c,d,e,f,g),\n        lavaField(p + ep.yyx,a,b,c,d,e,f,g) - lavaField(p - ep.yyx,a,b,c,d,e,f,g)));\n    float facing = max(dot(n, -rd), 0.0);\n    float rim = pow(1.0 - facing, 2.1);\n    float flow = rpw_noise(p * 3.2 + vec3(0.12 * time, -0.16 * time, 0.0));\n    float pigment = smoothstep(-0.55, 0.65, sin(p.y * 4.8 + p.x * 3.0 + flow * 3.5 - t * 0.5));\n    vec3 orange = vec3(1.25, 0.36, 0.015);\n    vec3 pink = vec3(1.15, 0.065, 0.62);\n    vec3 base = mix(orange, pink, pigment);\n    vec3 key = normalize(vec3(-0.4, 0.8, 0.5));\n    float diffuse = max(dot(n, key), 0.0);\n    float inner = pow(facing, 2.0);\n    vec3 col = base * (0.68 + 0.27 * diffuse) + vec3(0.38, 0.24, 0.025) * inner * (1.0 - pigment * 0.55);\n    col = mix(col, vec3(1.25, 0.11, 0.69), rim * 0.6);\n    vec3 halfV = normalize(key - rd);\n    float spec = pow(max(dot(n, halfV), 0.0), 85.0);\n    float broad = pow(max(dot(n, halfV), 0.0), 10.0);\n    col += vec3(1.0, 0.68, 0.62) * (spec * 0.52 + broad * 0.10) * (vec3(0.5) + light * 0.5);\n    col += rpw_sky(reflect(rd,n)) * rim * 0.04;\n    depth = clamp(rayT, t0, t1);\n    return vec4(col, 1.0);\n}",
    "prompt": "a floating ball of lava lamp blobs that merge and split, glowing orange and pink",
    "size": 4,
    "summary": "A floating cluster of glowing orange and pink liquid blobs slowly merges, stretches, and splits, with glossy molten surfaces and drifting droplets."
  }
}