SOURCE

var N_LAYERS = 30;
var N_COLS = 20;
var nodes = [];
var timer = 0, step = 0, MAX_STEPS = N_LAYERS;
 
function newBrushStroke(layer, x, y) {
  var h = random(40, 50);
  var w = random(10, 30);
  var r = 10 + 20*abs(sin(millis()*0.001));
  var stepLayer = (step + layer);
  if(stepLayer > N_LAYERS) {
    stepLayer -= N_LAYERS;
  }
  fill(256/N_LAYERS * stepLayer + random(-1,1));
  
  var x1 = x - w/2 - random(-r, r);
  var y1 = y - h/2 - random(-r, r);
  var x2 = x + w/2 - random(-r, r);
  var y2 = y - h/2 - random(-r, r);
  var x3 = x + w/2 - random(-r, r);
  var y3 = y + h/2 - random(-r, r);
  var x4 = x - w/2 - random(-r, r);
  var y4 = y + h/2 - random(-r, r);
  
  quad(x1, y1, x2, y2, x3, y3, x4, y4);
}

function setup() {
  createCanvas(windowWidth, windowHeight);
  background(255);
  colorMode(RGB, 255, 255, 255, 1);
  noStroke();
  // noLoop();
}

function draw() {
  time = frameCount/100;
 
  if(millis() - timer
>= 50) {
   step += 1;
   if(step > MAX_STEPS) { 
    step = 0;
   }
  
  for(var i=0; i<N_LAYERS; i++) {
    strokeWeight(random(0,1));
    var y = windowHeight/N_LAYERS * i;
    
    for(var j=0; j<N_COLS; j++) {
      var x = 25 + windowWidth/N_COLS * j;
      
      newBrushStroke(i, x, y);
    }
  }
   timer = millis(); 
  }
}
* {
  margin: 0;
}
console 命令行工具 X clear

                    
>
console