let cp = ["#FFF8F0", "#9E2B25", "#51355A", "#2A0C4E", "#F5F8DE"];
w = min(windowWidth, windowHeight);
pg = createGraphics(w, w, WEBGL);
pg.directionalLight(255, 255, 255, 0, 1, 0);
for (let i = 0; i < num; i++) {
let pm = random([-1, 1]);
let mr = pm + random(random(random(1)));
pg.translate((w / 1.2) * mr * cos(a), (w / 1.2) * mr * sin(a), -w * 2);
pg.plane(random(r / 4, r), random(r / 4, r));
let mxpr = random(1, r / 10);
let snum = int(random(1, 6)) * 4;
for (let j = 0; j < snum; j++) {
let sq = sqrt(random(1));
pg.translate(((sq * r) / 2) * cos(b), ((sq * r) / 2) * sin(b));
let pr = random(1, mxpr);
for (let k = 0; k < int(num / 50); k++) {
translate(random(-w / 2, w / 2), random(-w / 2, w / 2));
let lr = random(1, w / 200);
stroke(random([120, random(cp)]));
drawingContext.shadowOffsetX = lr / 20;
drawingContext.shadowOffsetY = lr / 20;
drawingContext.shadowBlur = lr * 4;
drawingContext.shadowColor = "black";
if (int(random(2)) == 0) {
drawingContext.setLineDash([1, lr * 3]);
for (let l = 0; l < num; l++) {
let cx = map(noise(xn), 0, 1, -w, w);
let cy = map(noise(yn), 0, 1, -w, w);
rakkan(rw/2.5, w-rw/1.25, rw, 0);
function rakkan(posx, posy, r, csw) {
rect(0, 0, r / 1.4, r * 1.5, r / 5);
for (let i = 0; i < 10; i++) {
let z = random(lr / 20, lr / 2);
vertex(nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(random(-z, z), -nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), random(-z, z));
vertex(random(-z, z), nr / 2 + random(-z, z));
vertex(nr / 2 + random(-z, z), nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), random(-z, z));
vertex(nr / 2 + random(-z, z), random(-z, z));
vertex(nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(random(-z, z), -nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), random(-z, z));
vertex(random(-z, z), nr / 2 + random(-z, z));
vertex(nr / 2 + random(-z, z), nr / 2 + random(-z, z));
vertex(nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), nr / 2 + random(-z, z));
vertex(nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(nr / 2 + random(-z, z), nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), random(-z, z));
vertex(nr / 2 + random(-z, z), random(-z, z));
vertex(nr / 2 + random(-z, z), -nr / 2 + random(-z, z));
vertex(-nr / 2 + random(-z, z), nr / 2 + random(-z, z));