render = svg`<svg width="${w}" height="${h}">
<rect x="0" y="0" width="${w}" height="${h}" stroke="none" fill="black"></rect>
${array(10).reverse().map(j => array(map(j, 0, 9, 300, 2800)|0).map((d,i,arr) => {
const n = arr.length
const angle = TAU * i / n
let pos = PVector(w/2, h/2).add(PVector().setMag(100 + j * 30).rotateBy(angle))
const rad = simplex.noise3D(pos.x/noiseScale, pos.y/noiseScale, seed + 1 / 100000) * (15 + j * 20) * (j+1)/10 + 15
pos = PVector(w/2, h/2).add(PVector().setMag(100 + j * 30 + rad).rotateBy(angle))
return `<circle
cx="${pos.x}"
cy="${pos.y}"
r="${rad}"
stroke="${colorScale(rad/200)}"
opacity="${map(j, 0, 9, 0.7, 0.1)}"
fill="none"
/>`
}).join('\n')).join('\n')}
</svg>`