{
  "name": "Obsidian Dragon Egg",
  "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 eggSdf(vec3 p) {\n float yy=p.y/0.85;\n float w=0.60*(1.0-0.22*yy);\n return (length(vec3(p.x/w,yy,p.z/w))-1.0)*0.48;\n}\nvec3 scaleField(vec3 p) {\n float angle=atan(p.z,p.x);\n vec2 uv=vec2(angle*2.864789,(p.y+0.85)*8.0);\n uv.x+=0.045*sin(uv.y*4.7+sin(angle*6.0));\n uv.y+=0.045*sin(angle*18.0+uv.y*3.0);\n float row=floor(uv.y);\n float nearD=100.0; float nextD=100.0; float id=0.0;\n for(int j=0;j<3;j++) {\n  float ry=row+float(j)-1.0;\n  float shift=0.5*mod(ry,2.0);\n  float cx=floor(uv.x-shift);\n  for(int i=0;i<3;i++) {\n   vec2 cell=vec2(cx+float(i)-1.0+shift,ry);\n   vec2 q=uv-cell;\n   q.y*=0.85;\n   float d=length(q)+0.16*q.y;\n   if(d<nearD){nextD=nearD;nearD=d;id=rpw_hash(vec3(mod(cell.x,18.0),ry,5.0));}\n   else if(d<nextD){nextD=d;}\n  }\n }\n return vec3((nextD-nearD)*0.5,id,1.0-smoothstep(0.0,0.19,(nextD-nearD)*0.5));\n}\nfloat scaleHeight(vec3 p) {\n vec3 s=scaleField(p);\n return 0.012*smoothstep(0.015,0.15,s.x)+0.003*s.x;\n}\nvec4 object(vec3 ro, vec3 rd, float t0, float t1, float time, vec3 light, inout float depth) {\n float t=t0; bool hit=false;\n for(int i=0;i<80;i++){\n  vec3 p=ro+rd*t;\n  float d=eggSdf(p);\n  if(d<0.001){hit=true;break;}\n  t+=max(d,0.0007);\n  if(t>t1)break;\n }\n if(!hit)return vec4(0.0);\n depth=t;\n vec3 p=ro+rd*t;\n vec2 e=vec2(0.002,0.0);\n vec3 n=normalize(vec3(eggSdf(p+e.xyy)-eggSdf(p-e.xyy),eggSdf(p+e.yxy)-eggSdf(p-e.yxy),eggSdf(p+e.yyx)-eggSdf(p-e.yyx)));\n vec3 s=scaleField(p);\n float h=scaleHeight(p);\n vec3 grad=vec3(scaleHeight(p+e.xyy)-h,scaleHeight(p+e.yxy)-h,scaleHeight(p+e.yyx)-h)/e.x;\n n=normalize(n-(grad-n*dot(grad,n))*0.8);\n float crack=1.0-smoothstep(0.009,0.035,s.x);\n float bevel=1.0-smoothstep(0.025,0.13,s.x);\n float beat=pow(0.5+0.5*sin(time*1.65),8.0);\n float echo=pow(0.5+0.5*sin(time*1.65-0.85),14.0);\n float pulse=clamp(beat+0.4*echo,0.0,1.0);\n vec3 ld=normalize(vec3(0.4,0.8,0.3));\n float diff=max(dot(n,ld),0.0);\n float fres=pow(1.0-max(dot(n,-rd),0.0),3.0);\n float spec=pow(max(dot(n,normalize(ld-rd)),0.0),65.0);\n vec3 rock=vec3(0.018,0.021,0.031)*(0.45+diff*0.8)*(0.6+s.y*0.9);\n rock+=rpw_sky(reflect(rd,n))*(0.085+fres*0.30)*(0.65+0.35*(1.0-s.z));\n rock+=vec3(0.5,0.55,0.65)*spec*0.65;\n rock*=mix(1.0,0.35,bevel);\n rock*=light;\n vec3 fire=mix(vec3(0.95,0.065,0.004),vec3(3.5,1.35,0.12),pulse);\n float noise=rpw_noise(p*23.0+vec3(0.0,time*0.18,0.0));\n vec3 col=mix(rock,fire*(0.65+noise*0.45),crack);\n col+=vec3(0.20,0.012,0.001)*bevel*(0.4+pulse);\n return vec4(col,1.0);\n}",
    "prompt": "a dragon egg of black obsidian scales with cracks of molten magma that pulse brighter like a slow heartbeat",
    "size": 3,
    "summary": "A dragon egg armored in glossy black obsidian scales, with molten magma fissures that pulse from smoldering red to orange-gold in a slow heartbeat."
  }
}