let graphics_max_pixel = 20;
colorMode(HSB, 360, 100, 100, 100);
for (let i = 0; i < graphics_num; i++) {
let g = createGraphics(graphics_max_pixel, graphics_max_pixel, P2D);
g.rect(0, 0, graphics_max_pixel, graphics_max_pixel);
g.rect(1, 1, graphics_max_pixel-2, graphics_max_pixel-2);
g.colorMode(HSB, 360, 100, 100, 100);
g.translate(g.width / 2, g.height / 2);
g.rotate(int(random(4)) * 360 / 4);
g.translate(-g.width / 2, -g.height / 2);
for (let j = 0; j <= i; j++) {
g.rect(int(x), y, int(w), h);
let step = int(random(2, 9));
for (let l = 0; l < sq(graphics_max_pixel); l++) {
g.point(l % graphics_max_pixel, int(l / graphics_max_pixel));
function separateGrid(x, y, d) {
let sepNum = int(random(1, 4));
for (let i = x; i < x + d - 1; i += w) {
for (let j = y; j < y + d - 1; j += w) {
if (random(100) < 90 && d > width / 5) {
let g = random(graphices);
translate(i + w / 2, j + w / 2);
scale((random(100) > 50 ? -1 : 1),
(random(100) > 50 ? -1 : 1))
let q = sqrt(sq(width) + sq(height));
for (let i = 0; i < 1; i++) {
separateGrid(-offset, -offset, width + offset * 2);
translate(width / 2, height / 2);
shearX(random(30 / 2) * (random(100) > 50 ? -1 : 1));
shearY(random(30 / 2) * (random(100) > 50 ? -1 : 1));
drawingContext.shadowColor = color(0, 0, 0, 50);
let shadow_blur = offset / 5;
drawingContext.shadowBlur = shadow_blur;
drawingContext.shadowOffsetX = shadow_blur / 3;
drawingContext.shadowOffsetY = shadow_blur / 3;
for (let r = -q; r <= q; r += q) {
for (let s = -q; s <= q; s += q) {