{
  "name": "Radiant Atomic Dance",
  "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 TAU=6.2831853;\nfloat ballHit(vec3 ro,vec3 rd,vec3 c,float r,float lo,float hi) {\n vec3 o=ro-c; float b=dot(o,rd);float h=b*b-dot(o,o)+r*r;\n if(h<0.0)return hi;\n float t=-b-sqrt(h);if(t<lo)t=-b+sqrt(h);\n return t>=lo&&t<hi?t:hi;\n}\nvec3 orbitFrame(vec3 p,float f,float time) {\n p.xz=rpw_rot(f*2.0943951+time*0.10)*p.xz;\n p.xy=rpw_rot(1.02)*p.xy;return p;\n}\nvec4 object(vec3 ro,vec3 rd,float t0,float t1,float time,vec3 light,inout float depth) {\n float hit=t1;vec3 center=vec3(0.0);float material=0.0;\n vec3 nr=ro;vec3 nd=rd;\n nr.xz=rpw_rot(time*0.23)*nr.xz;nd.xz=rpw_rot(time*0.23)*nd.xz;\n nr.yz=rpw_rot(0.35)*nr.yz;nd.yz=rpw_rot(0.35)*nd.yz;\n for(int j=0;j<13;j++) {\n float f=float(j);float y=1.0-2.0*(f+0.5)/12.0;float r=sqrt(max(0.0,1.0-y*y));\n vec3 c=j==12?vec3(0.0):0.151*vec3(r*cos(f*2.399963),y,r*sin(f*2.399963));\n float t=ballHit(nr,nd,c,0.094,t0,hit);\n if(t<hit){hit=t;center=c;material=mod(f,2.0);}\n }\n vec3 surface=vec3(0.0);\n if(hit<t1){\n vec3 n=normalize(nr+nd*hit-center);vec3 key=normalize(vec3(-0.4,0.8,0.5));\n vec3 base=material<0.5?vec3(1.0,0.045,0.014):vec3(1.0,0.62,0.13);\n float diffuse=max(dot(n,key),0.0);float rim=pow(1.0-max(dot(n,-nd),0.0),3.0);\n float spec=pow(max(dot(reflect(nd,n),key),0.0),32.0);\n surface=base*(0.38+diffuse*0.72+rim*0.6)+vec3(1.0,0.87,0.6)*spec;\n }\n for(int j=0;j<3;j++) {\n float f=float(j);vec3 o=orbitFrame(ro,f,time);vec3 d=orbitFrame(rd,f,time);\n float phase=time*(2.65+f*0.32)+f*2.0943951;\n vec3 c=0.735*vec3(cos(phase),0.0,sin(phase));\n float t=ballHit(o,d,c,0.033,t0,hit);\n if(t<hit){hit=t;surface=vec3(1.6,2.1,2.5);}\n }\n vec3 glow=vec3(0.0);float coverage=0.0;float glowDepth=t1;\n for(int j=0;j<3;j++) {\n float f=float(j);vec3 o=orbitFrame(ro,f,time);vec3 d=orbitFrame(rd,f,time);\n float phase=time*(2.65+f*0.32)+f*2.0943951;\n vec3 ec=0.735*vec3(cos(phase),0.0,sin(phase));\n float et=clamp(dot(ec-o,d),t0,hit);float ed=length(o+d*et-ec);\n glow+=vec3(0.15,0.65,1.0)*0.55*exp(-ed*ed/0.0022);\n for(int k=0;k<16;k++) {\n float a=phase-float(k)*TAU/16.0;\n vec3 v0=0.735*vec3(cos(a),0.0,sin(a));\n vec3 v1=0.735*vec3(cos(a-TAU/16.0),0.0,sin(a-TAU/16.0));\n vec3 v=v1-v0;vec3 w=o-v0;\n float vv=dot(v,v);float dv=dot(d,v);float dw=dot(d,w);float vw=dot(v,w);\n float u=clamp((vw-dv*dw)/max(vv-dv*dv,0.000001),0.0,1.0);\n vec3 curve=normalize(v0+v*u)*0.735;\n float t=clamp(dot(curve-o,d),t0,hit);\n float dist=length(o+d*t-curve);\n float tail=(float(k)+u)*TAU/16.0;float strength=exp(-tail*1.1);\n float width=0.007+0.010*strength;\n float core=1.0-smoothstep(width*0.55,width*1.5,dist);\n float halo=exp(-dist*dist/(0.00013+strength*0.00035))*(0.035+0.25*strength);\n vec3 color=mix(vec3(0.025,0.24,0.48),vec3(0.35,1.15,1.65),strength);\n glow+=color*(core+halo);\n coverage+=core*0.82+halo*0.4;\n if(core>0.15)glowDepth=min(glowDepth,t);\n }\n }\n float ct=clamp(-dot(ro,rd),t0,hit);float radius=length(ro+rd*ct);\n glow+=vec3(1.0,0.2,0.03)*0.12*exp(-radius*radius/0.07);\n if(hit<t1){depth=min(hit,glowDepth);return vec4(surface+glow,1.0);}\n float alpha=clamp(max(coverage,max(glow.r,max(glow.g,glow.b))*0.7),0.0,1.0);\n if(alpha<0.003)return vec4(0.0);\n depth=glowDepth<t1?glowDepth:ct;\n return vec4(glow/max(alpha,0.0001),alpha);\n}",
    "prompt": "an atom: a glowing nucleus of clustered protons and neutrons with three electrons racing round tilted orbits that leave light trails",
    "size": 4,
    "summary": "A glowing cluster of red protons and golden neutrons rotates as three blue-white electrons race along tilted, slowly precessing orbits with fading light trails."
  }
}