bnb({
w: 540,
h: 540,
webgl: true,
numFrames: 20,
record: true,
chromaticAberration: 1,
shutterAngle: 0.3,
framesPerSample: 16,
globals: {
r1: 300,
r2: 50
},
draw: (s, t, g) => {
s.camera(0, 0, 90, 0, 0, 0, 0, 1, 0)
s.background(22)
s.stroke(255, 200)
s.strokeWeight(1)
s.noFill()
s.rotateZ(-s.PI/2)
s.translate(-g.r1/2 + 10, 0, 0)
s.push()
s.rotateX(s.PI/2)
for(let i = 0; i < 40; i++) {
const angle = s.TAU / 40 * i + t * s.TAU / 20
const cos = s.cos(angle) * g.r2
const sin = s.sin(angle) * g.r2
s.push()
s.translate(0, 0, sin)
s.circle(0, 0, g.r1 + 2 * cos)
s.pop()
}
s.pop()
for(let i = 0; i < 20; i ++) {
s.push()
s.rotateY(s.TAU / 20 * i - t * s.TAU/10)
s.translate(g.r1 / 2, 0)
s.circle(0, 0, g.r2 * 2)
s.pop()
}
}
})