bnb({
w,
h,
fps: 20,
numFrames: 100,
chromaticAberration: .4,
shutterAngle: 1.3,
samplesPerFrame: 8,
shaderPass: [
shaders.radial(12, 0.7)
],
setup: (s, g) => {
g.circlesNumber = 1000;
g.offsetX = array(g.circlesNumber).map(d => random(0, w))
g.offsetY = array(g.circlesNumber).map(d => random(0, h))
g.colors = array(g.circlesNumber).map(d => randInt(1, palette.length))
g.offset = array(g.circlesNumber).map(d => random(-200, 200))
g.margin = array(g.circlesNumber).map(d => random(-100, 200))
g.radius = array(g.circlesNumber).map(d => random(1, 40))
},
draw: (s, t, g) => {
s.background(palette[0]);
s.noStroke();
s.blendMode(s.ADD);
for (let i = 1; i < g.circlesNumber; i++) {
t = (t + g.offset[i]) % 1;
const tt = easing.easeCubicIn(t);
const margin = g.margin[i]
const radius = g.radius[i]
s.push()
let col = s.lerpColor(s.color(palette[g.colors[i]]), s.color(palette[0]), tt);
s.fill(col);
s.translate(w/2, h/2);
s.translate(-w/2, -h/2);
s.ellipse(g.offsetX[i], g.offsetY[i] * t, radius, radius*t)
let y3 = s.map(tt, 0, 1, margin, h - margin)
let y4 = s.map(tt, 0, 1, h - margin, margin)
s.pop()
}
}
})