{
  "name": "Giant Watchful Eye",
  "dimension": "3d",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "world": {
    "glsl": "const float EYE_PI = 3.14159265;\n\nvec3 eyeFrame(vec3 p, float time) {\n    p.xz = rpw_rot(0.24 * sin(time * 0.39) + 0.12 * sin(time * 0.17)) * p.xz;\n    p.yz = rpw_rot(0.15 * sin(time * 0.31 + 0.55)) * p.yz;\n    return p;\n}\n\nfloat eyeVeins(vec3 n) {\n    float theta = acos(clamp(n.z, -1.0, 1.0));\n    float phi = atan(n.y, n.x);\n    float sector = 2.0 * EYE_PI / 13.0;\n    float cell = floor(phi / sector + 0.5);\n    float vessel = 0.0;\n    for (int j = 0; j < 3; j++) {\n        float k = cell + float(j) - 1.0;\n        float id = mod(k, 13.0);\n        float h = rpw_hash(vec3(id, 3.0, 7.0));\n        float base = k * sector + 0.065 * sin(theta * 7.0 + id * 2.3) + 0.035 * sin(theta * 17.0 + id);\n        float start = 0.58 + h * 0.52;\n        float grow = smoothstep(start, start + 0.20, theta);\n        float d = abs(phi - base) * max(sin(theta), 0.10);\n        float width = 0.0030 + 0.0055 * smoothstep(0.6, 2.5, theta);\n        float trunk = (1.0 - smoothstep(width, width * 2.3, d)) * grow;\n        float join1 = 1.35 + h * 0.65;\n        float path1 = base + 0.34 * (join1 - theta) + 0.020 * sin(theta * 24.0 + id * 3.0);\n        float d1 = abs(phi - path1) * max(sin(theta), 0.10);\n        float branch1 = (1.0 - smoothstep(width * 0.44, width * 1.35, d1)) * smoothstep(start + 0.12, start + 0.30, theta) * (1.0 - smoothstep(join1 - 0.08, join1 + 0.02, theta));\n        float join2 = 2.05 + h * 0.43;\n        float path2 = base - 0.32 * (join2 - theta) + 0.025 * sin(theta * 20.0 + id);\n        float d2 = abs(phi - path2) * max(sin(theta), 0.10);\n        float branch2 = (1.0 - smoothstep(width * 0.36, width * 1.1, d2)) * smoothstep(1.0 + h * 0.3, 1.3 + h * 0.3, theta) * (1.0 - smoothstep(join2 - 0.1, join2, theta));\n        vessel = max(vessel, max(trunk, max(branch1, branch2)));\n    }\n    return vessel * (1.0 - smoothstep(2.85, 3.10, theta));\n}\n\nvec4 object(vec3 ro, vec3 rd, float t0, float t1, float time, vec3 light, inout float depth) {\n    vec3 center = vec3(0.0, 0.045 * sin(time * 0.70), 0.0);\n    vec3 o = ro - center;\n    float radius = 0.79;\n    float b = dot(o, rd);\n    float c = dot(o, o) - radius * radius;\n    float discriminant = b * b - c;\n    float t = t1 + 1.0;\n    if (discriminant >= 0.0) {\n        float root = sqrt(discriminant);\n        t = -b - root;\n        if (t < t0) t = -b + root;\n    }\n    vec3 localO = eyeFrame(o, time);\n    vec3 localD = eyeFrame(rd, time);\n    vec3 lensO = localO - vec3(0.0, 0.0, 0.40);\n    float cb = dot(lensO, localD);\n    float cd = cb * cb - dot(lensO, lensO) + 0.25;\n    float lens = 0.0;\n    vec3 lensNormal = vec3(0.0, 0.0, 1.0);\n    if (cd > 0.0) {\n        float ct = -cb - sqrt(cd);\n        vec3 cp = localO + ct * localD;\n        if (ct >= t0 && ct < t && cp.z > 0.6676) {\n            t = ct;\n            lens = 1.0;\n            lensNormal = normalize(cp - vec3(0.0, 0.0, 0.40));\n        }\n    }\n    if (t < t0 || t > t1) return vec4(0.0);\n    depth = t;\n    vec3 n = normalize(o + rd * t);\n    vec3 e = eyeFrame(n, time);\n    vec3 localView = -localD;\n    if (lens > 0.5) {\n        vec3 lp = localO + t * localD;\n        vec3 refracted = refract(localD, lensNormal, 0.77);\n        float ib = dot(lp, refracted);\n        float innerD = ib * ib - dot(lp, lp) + radius * radius;\n        if (innerD > 0.0) e = normalize(lp + refracted * (-ib - sqrt(innerD)));\n        vec3 wn = lensNormal;\n        wn.yz = rpw_rot(-0.15 * sin(time * 0.31 + 0.55)) * wn.yz;\n        wn.xz = rpw_rot(-0.24 * sin(time * 0.39) - 0.12 * sin(time * 0.17)) * wn.xz;\n        n = wn;\n    }\n    float r = length(e.xy);\n    float ang = atan(e.y, e.x);\n    float front = smoothstep(0.66, 0.79, e.z);\n    float iris = (1.0 - smoothstep(0.515, 0.53, r)) * front;\n    float pupilRadius = 0.177 + 0.009 * sin(time * 0.65);\n    float pupil = (1.0 - smoothstep(pupilRadius, pupilRadius + 0.006, r)) * front;\n    float vein = eyeVeins(e);\n    float noise = rpw_noise(e * 18.0);\n    vec3 sclera = mix(vec3(0.90, 0.91, 0.89), vec3(1.0, 0.98, 0.95), noise);\n    float pink = smoothstep(0.68, 1.8, acos(clamp(e.z, -1.0, 1.0)));\n    sclera = mix(sclera, vec3(0.83, 0.46, 0.46), pink * 0.12);\n    sclera = mix(sclera, vec3(0.40, 0.013, 0.035), vein * 0.90);\n    vec3 key = normalize(vec3(-0.38, 0.76, 0.55));\n    float diffuse = max(dot(n, key), 0.0);\n    vec3 shading = vec3(0.26, 0.30, 0.38) + vec3(0.78, 0.75, 0.66) * diffuse;\n    shading += vec3(0.10, 0.07, 0.04) * max(-n.y, 0.0);\n    vec3 color = sclera * shading * light;\n    color += vein * vec3(0.52, 0.012, 0.031) * (0.84 + 0.16 * sin(time * 1.2 + e.y * 5.0));\n    float irisR = clamp((r - pupilRadius) / (0.525 - pupilRadius), 0.0, 1.0);\n    vec2 radial = vec2(cos(ang), sin(ang));\n    float strands = rpw_noise(vec3(radial * 27.0, r * 14.0));\n    float fine = rpw_noise(vec3(radial * 68.0, r * 30.0));\n    float warp = (strands - 0.5) * 0.24 + 0.016 * sin(r * 55.0 + ang * 11.0);\n    float fiber1 = pow(0.5 + 0.5 * sin(ang * 113.0 + warp * 18.0 + r * 12.0), 3.0);\n    float fiber2 = pow(0.5 + 0.5 * sin(ang * 187.0 - r * 21.0 + warp * 12.0), 7.0);\n    float fibers = 0.19 + (0.72 * fiber1 + 0.32 * fiber2) * (0.32 + strands) + 0.23 * fine;\n    float collarette = 0.24 + 0.07 * sin(ang * 17.0) + 0.045 * sin(ang * 29.0 + 0.8);\n    float gold = 1.0 - smoothstep(collarette - 0.10, collarette + 0.11, irisR);\n    vec3 irisColor = mix(vec3(0.025, 0.56, 0.34), vec3(0.025, 0.75, 1.0), smoothstep(0.15, 0.8, irisR));\n    irisColor = mix(irisColor, vec3(1.0, 0.59, 0.085), gold * 0.90);\n    float outer = 1.0 - smoothstep(0.88, 1.0, irisR);\n    float crypts = 1.0 - 0.53 * exp(-abs(irisR - collarette - 0.10) * 28.0) * smoothstep(0.43, 0.69, fine);\n    irisColor *= fibers * crypts * (1.58 + 0.12 * sin(time * 0.95)) * outer;\n    irisColor += vec3(0.025, 0.25, 0.30) * exp(-abs(irisR - 0.915) * 70.0);\n    color += front * vec3(0.015, 0.14, 0.13) * exp(-abs(r - 0.53) * 42.0);\n    color = mix(color, irisColor + vec3(0.006, 0.017, 0.023), iris);\n    color = mix(color, vec3(0.0015, 0.003, 0.006), pupil);\n    float fresnel = 0.026 + 0.30 * pow(1.0 - max(dot(n, -rd), 0.0), 5.0);\n    vec3 reflected = rpw_sky(reflect(rd, n));\n    color = mix(color, reflected * light, fresnel * (1.0 - iris * 0.45));\n    vec3 halfVector = normalize(key - rd);\n    float spec = pow(max(dot(n, halfVector), 0.0), 140.0);\n    float softSpec = pow(max(dot(n, halfVector), 0.0), 30.0);\n    color += (vec3(1.0, 0.96, 0.84) * spec * 1.3 + vec3(0.25, 0.35, 0.43) * softSpec * 0.19) * light;\n    float irisGlint = pow(max(dot(e, normalize(localView + normalize(vec3(-0.35, 0.65, 0.7)))) , 0.0), 200.0);\n    color += iris * irisGlint * vec3(0.75, 1.0, 1.0) * 0.65;\n    return vec4(color, 1.0);\n}",
    "prompt": "a giant floating eyeball that slowly looks around, with a glowing iris and veins",
    "size": 10,
    "summary": "A giant glossy eyeball floats and slowly looks around, with a glowing turquoise-and-gold iris, a raised glassy cornea, and gently pulsing red veins."
  }
}