async function setup() { createCanvas(1000, 1000, WEBGL); noLoop(); randomSeed(93619); noiseSeed(93619); brush.scaleBrushes(1.2); } function draw() { translate(-width / 2, -height / 2); // Warm cream ground with subtle warmth background(255, 252, 245); // Establish a loose, atmospheric hibiscus presence // Deep warm underpainting washes brush.set("marker", color(180, 60, 80, 40), 80); brush.fillBleed(0.7, "out"); brush.fillTexture(0.3, 0.2); brush.line(250, 300, 600, 200); brush.line(300, 400, 650, 350); brush.line(200, 350, 500, 500); // First petal mass - deep crimson rose brush.set("marker", color(195, 35, 70), 45); brush.fillBleed(0.5, "out"); brush.fillTexture(0.4, 0.3); brush.fill(color(210, 50, 85), 180); brush.circle(380, 350, 180, 0.3); // Second petal sweep - magenta warmth brush.set("marker", color(175, 25, 95), 50); brush.fillBleed(0.6, "out"); brush.fillTexture(0.3, 0.2); brush.fill(color(190, 45, 110), 160); brush.circle(450, 280, 150, 0.4); // Third petal - coral bridge brush.set("marker", color(220, 100, 90), 40); brush.fillBleed(0.5, "out"); brush.fillTexture(0.4, 0.3); brush.fill(color(240, 120, 100), 170); brush.circle(320, 420, 140, 0.35); // Upper petal reaching right - hot pink brush.set("marker", color(210, 55, 120), 35); brush.fillBleed(0.4, "out"); brush.fillTexture(0.3, 0.2); brush.fill(color(225, 75, 135), 190); brush.circle(520, 320, 130, 0.3); // Lower left petal - deep wine brush.set("marker", color(140, 25, 60), 42); brush.fillBleed(0.5, "out"); brush.fillTexture(0.35, 0.25); brush.fill(color(160, 40, 75), 150); brush.circle(350, 480, 120, 0.35); // Staminal column - bright yellow-gold center brush.set("HB", color(250, 210, 50), 12); brush.fillTexture(0.2, 0.1); brush.fill(color(255, 220, 60), 220); brush.circle(400, 360, 55, 0.2); // Stamens radiating from center brush.set("HB", color(240, 190, 40), 6); brush.fillTexture(0.15, 0.1); for (let i = 0; i < 12; i++) { let angle = (TWO_PI / 12) * i + random(-0.1, 0.1); let cx = 400 + cos(angle) * 30; let cy = 360 + sin(angle) * 30; let ex = 400 + cos(angle) * random(55, 80); let ey = 360 + sin(angle) * random(55, 80); brush.line(cx, cy, ex, ey); // Anther dots at tips brush.set("HB", color(200, 130, 30), 8); brush.fill(color(220, 150, 40), 200); brush.circle(ex, ey, random(4, 8), 0.3); brush.set("HB", color(240, 190, 40), 6); } // Pistil emerging from center brush.set("HB", color(180, 200, 60), 5); brush.fill(color(200, 220, 80), 200); brush.line(400, 360, 405, 310); brush.circle(405, 308, 8, 0.2); // Petal vein details - darker marks on petals brush.set("2B", color(160, 20, 55), 3); brush.fillTexture(0.5, 0.4); // Veins on first petal push(); for (let i = 0; i < 5; i++) { let a = random(PI * 0.8, PI * 1.4); let len = random(60, 120); brush.line(380, 350, 380 + cos(a) * len, 350 + sin(a) * len); } pop(); // Veins on second petal for (let i = 0; i < 4; i++) { let a = random(PI * 1.3, PI * 1.8); let len = random(50, 100); brush.line(450, 280, 450 + cos(a) * len, 280 + sin(a) * len); } // Soft edge dissolution - charcoal diffusing petal edges brush.set("charcoal", color(180, 60, 80, 25), 25); brush.fillBleed(0.8, "out"); brush.fillTexture(0.6, 0.5); brush.line(250, 300, 350, 280); brush.line(500, 260, 600, 290); brush.line(280, 500, 350, 530); brush.line(550, 380, 620, 400); // Lighter coral highlights - translucent petal tips brush.set("marker", color(255, 170, 150), 30); brush.fillBleed(0.4, "out"); brush.fillTexture(0.3, 0.2); brush.fill(color(255, 180, 160), 100); brush.circle(300, 280, 60, 0.3); brush.circle(500, 260, 50, 0.25); brush.circle(480, 400, 55, 0.3); // Shadow depth in petal overlaps brush.set("2B", color(100, 15, 40, 60), 20); brush.fillTexture(0.5, 0.4); brush.line(370, 310, 390, 340); brush.line(440, 310, 420, 350); brush.line(350, 430, 380, 400); // Loose leaf suggestion below brush.set("marker", color(60, 120, 50), 35); brush.fillBleed(0.6, "out"); brush.fillTexture(0.4, 0.3); brush.fill(color(75, 140, 60), 140); brush.circle(500, 600, 100, 0.4); brush.set("marker", color(50, 100, 40), 30); brush.fillBleed(0.5, "out"); brush.fill(color(65, 125, 55), 120); brush.circle(580, 550, 80, 0.35); // Leaf veins brush.set("2B", color(30, 70, 25), 3); brush.line(480, 600, 520, 580); brush.line(490, 600, 510, 630); brush.line(570, 550, 600, 540); // Atmospheric scatter - small pigment flecks brush.set("charcoal", color(190, 70, 90, 35), 8); brush.fillTexture(0.3, 0.2); for (let i = 0; i < 15; i++) { let px = random(200, 650); let py = random(220, 520); brush.circle(px, py, random(4, 12), 0.4); } // Final accent - a single bold dark mark for contrast brush.set("rotring", color(80, 10, 30), 4); brush.line(395, 355, 390, 335); brush.line(405, 355, 408, 340); // Corner breathing space wash - very faint brush.set("marker", color(255, 248, 235), 60); brush.fillBleed(0.9, "out"); brush.fillTexture(0.2, 0.1); brush.fill(color(255, 250, 240), 30); brush.circle(800, 800, 200, 0.3); brush.circle(150, 100, 180, 0.3); }