svg`<svg width="${w}" height="${h}">
<rect width="${w}" height="${h}" fill="black" stroke="blue" />
<g transform="translate(${w/2}, ${h/2})">
${array(2).map(k => {
const color = ['red', 'green', 'blue'][k % 3]
const noiseOffset = k * 10000
return array(N).map(i => {
const offset = random(TAU * 2)
return `<path
fill="none"
stroke="white"
stroke-width="0.5"
opacity="0.5"
d="${array(map(i, 0, N - 1, 200, 6000) | 0).map((d, j, arr) => {
const angle = TAU / arr.length * j + offset
const v = PVector.fromAngle(angle).setMag(map(i, 0, N - 1, 30, h / 2 - 50))
const u = PVector.fromAngle(modularDist(angle, PI / 3)).setMag(map(i, 0, N - 1, 50, h / 2 - 50))
const n = simplex.noise2D(noiseOffset + u.x / scale, u.y / scale)
v.setMag(map(i, 0, N - 1, 50, h / 2 - 50) + n * map(i, 0, N - 1, 0, 70))
return `${j === 0 ? 'M' : 'L'}${v.x},${v.y}`
}).join(' ')} Z"
/>`
}).join('\n')
}).join('\n')}
</g>
</svg>`