render = svg`<svg width="${w}" height="${h}">
<rect x="0" y="0" width="${w}" height="${h}" stroke="none" fill="black"></rect>
<g>
${array(n).map(i => {
const angle = TAU * i / n
const pos = PVector(w/2, h/2).add(PVector().setMag(w/3 + 80 * simplex.noise3D(Math.cos(angle), Math.sin(angle), seed)).rotateBy(angle))
return `<circle
cx="${pos.x}"
cy="${pos.y}"
r="${simplex.noise3D(pos.x/noiseScale, pos.y/noiseScale, seed) * 100 + 80}"
stroke="${colorScale(i/n)}"
opacity="0.5"
fill="none"
/>`
}).join('\n')}
</g>
</svg>`