Project-03-Dynamic-Drawing

TIME 2 PARTY!

sketch

// Zoe Lin (ID: youlin)
// Section B

var x, y, r, g, b, rad;

function setup() {
  createCanvas(500, 500);
  noStroke();
  rectMode(CENTER);
}

function draw() {
  background(random(0, 15));
  
  //party lights!!!
  push();
  blendMode(SCREEN);
  r = random(255); //randomizes color
  g = random(50);
  b = random(255);
  x = random(width); //randomizes where lights spawn
  y = random(height);
  rad = random(2, 50); //randomizes size of circle
  noStroke();
  fill(r, g, b, random(75, 125)); //sets a random transparency
  circle(x, y, rad); //spawns a circle anywhere on canvas
  circle(mouseX, mouseY, rad*2); //spawns lights where the cursor is
  pop();
  
  let r1 = map(mouseX, 0, height/2, 0, width/2); //tracks horizontal location of mouse
  let r2 = width - r1;
  
  let up = map(mouseY, 0, height, 0, width); // tracks vertical location of mouse
  let down = height - up; //the other way

  //circle1
  let circle1X = width / 3 + r2 * 0.75 //x position of circle 1
  let circle1Y = height / 3 - r2 / 3.5 //y position of circle 1
  let circle1Mouth = up/4 //mouth location of circle 1
  
  //body
  noStroke();
  fill(up/3,r1/3,down/3,r2/3);
  ellipse(circle1X, circle1Y, down, r2); //fluid body
  
  //eye
  fill(0, r2);
  circle(circle1X - up/4, circle1Y - r2/10 , down/20);
  
  //eye
  fill(0, r2);
  circle(circle1X + up/4, circle1Y - r2/10 , up/12);
  
  //mouth
  noFill();
  stroke(0, r2);
  strokeWeight(4);
  arc(circle1X, circle1Y + r2/12, circle1Mouth, circle1Mouth, TWO_PI, PI);

  //circle2
  let circle2X = width / 2
  let circle2Y = height / 2 + down / 2
  let circle2Mouth = down/4
  
  noStroke();
  fill(r2/3,up/3,r1/3,down/3);
  ellipse(circle2X, circle2Y,  down*1.25, up*1.5);
  
  fill(0, r2)
  circle(circle2X - r2/4, circle2Y - down/10 , up/8);
  
  fill(0, r2)
  circle(circle2X + r2/4, circle2Y - down/10 , down/8);
  
  noFill();
  stroke(0, r2);
  strokeWeight(4);
  arc(circle2X, circle2Y + r2/20, circle2Mouth, circle2Mouth, TWO_PI, PI);
  
  //circle3
  let circle3X = width / 1.5 + r2 / 2
  let circle3Y = height / 2
  let circle3Mouth = down/10
  
  noStroke();
  fill(down/3,r2/3,up/3,r1/3);
  ellipse(circle3X, circle3Y, r2*1.5, r2*1.5);
  
  fill(0, r2)
  circle(circle3X - r2/4, circle3Y - r2/10 , r2/8);
  
  fill(0, r2)
  circle(circle3X + r2/4, circle3Y - up/10 , r2/8);
  
  noFill();
  stroke(0,r2 );
  strokeWeight(4);
  arc(circle3X, circle3Y + r2/12, circle3Mouth, circle3Mouth, TWO_PI, PI);
  
  //circle4
  let circle4X = width / 1.5 - r1/1.7
  let circle4Y = height / 4 + r2/4
  let circle4Mouth = down/10
  
  noStroke();
  fill(r1/3,down/3,r2/3,up/2.5);
  ellipse(circle4X, circle4Y, r1*1.25, down);
  
  fill(0, r2)
  circle(circle4X - r1/4, circle4Y - r2/15 , r1/8);
  
  fill(0, r2)
  circle(circle4X + r1/4, circle4Y - r1/10 , r1/8);
  
  noFill();
  stroke(0,r2);
  strokeWeight(4);
  arc(circle4X, circle4Y + r1/10, circle4Mouth, circle4Mouth, TWO_PI, PI);
  
  //circle5
  let circle5X = width / 3 - r2 / 1.5
  let circle5Y = height / 2.5
  let circle5Mouth = r2/4
  
  noStroke();
  fill(down/3,r2/2,r1/2,r2/3);
  ellipse(circle5X/1.5, circle5Y/2, up, up*1.25);
  
  fill(0, r2)
  circle(circle5X - up/4, circle5Y - up/3 , r1/8);
  
  fill(0, r2)
  circle(circle5X + r1/4, circle5Y - r1/3 , r1/8);
  
  noFill();
  stroke(0,r2);
  strokeWeight(4);
  arc(circle5X, circle5Y + r1/20, circle5Mouth, circle5Mouth, TWO_PI, PI);
  
  //circle6
  let circle6X = width / 5 + r1 / 2.5
  let circle6Y = height - 10
  let circle6Mouth = r1/5
  
  noStroke();
  fill(r2/3,up/4,r2/2,up/3);
  ellipse(circle6X, circle6Y, up*0.6, down*1.2);  
  
  fill(0, r2)
  circle(circle6X - up/5, circle6Y - up/10 , r1/10);
  
  fill(0, r2)
  circle(circle6X + r1/7, circle6Y - r1/10 , r1/10);
  
  noFill();
  stroke(0,r2);
  strokeWeight(4);
  arc(circle6X, circle6Y + r1/10, circle6Mouth, circle6Mouth, TWO_PI, PI);
 
  //circ7
  let circle7X = width - 10
  let circle7Y = height / 2 - up
  let circle7Mouth = up/4
  
  noStroke();
  fill(up/3,r1/4,down/2,r2/3);
  ellipse(circle7X, circle7Y, down*0.5, up);
  
  fill(0, r2)
  circle(circle7X - up/4, circle7Y - up/10, r1/8);
  
  fill(0, r2)
  circle(circle7X + r1/4, circle7Y - r1/10 , r1/8);
  
  noFill();
  stroke(0,r2);
  strokeWeight(4);
  arc(circle7X, circle7Y+r1/20, circle7Mouth, circle7Mouth, TWO_PI, PI);
}

LO-03: Computational Fabrication

Quayola’s Unfinished Sculptures (“non-finito”) are a series of “unfinished” physical sculptures that seamlessly merges the digital and modern with classical sculptural styles of the Renaissance. Created by a generative system that carved out blocks of marble with a mechanical arm, these sculptures explore the tension and equilibrium between form and matter, man-made objects of perfection, as well as chaotic yet complex forms of nature. In programming this system, Quayola also took inspiration from Michelangelo’s unfinished series “Prigioni” (1513-1534). As an artist, I find the technique of which Quayola chose to employ in the making of this series to be especially admirable. Algorithmically, the system is composed of mathematical functions that processed geological formations which evolve infinitely, morphing eventually into the classical figures on display. Quayola’s code, then, essentially turns from an extension of his hand to an extension of the hardware which, in the end, results in an extension of the sum of ideas generated from both Quayola and Michelangelo’s brain – timeless, human and artificial.

Quayola, Unfinished Sculptures (2014 – ongoing)

Project-02-Variable-Face

The hardest part of my project was attempting to debug the randomizer function.

sketch
// Zoe Lin (ID: youlin)
// Section B

var eyeSize = 20;
var faceWidth = 100;
var faceHeight = 150;
var faceType;
var noseType = 3;
var mouthType = 1;
var earType;
var pupilSize;
var browType;
var stuffType;
var r;
var g;
var b;
 
function setup() {
    createCanvas(300, 300);
    rectMode(CENTER);
}
 
function draw() {
    background(r, g, b);
    face();
    nose();
    eyes();
    //brows();
    pupils();
    mouth();
    //ears();
    //stuffs();
  
}
 
 //face shape   
function face() {
    if (faceType < 0.7) {
      ellipse(width / 2, height / 2, faceWidth,  faceHeight);
    } else {
      rect(width / 2, height / 2, faceWidth, faceHeight/1.05, 30)
    }
  
}

//eye shape
function eyes() {
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);
}
  
//pupil size
function pupils() {
    push();
    //strokeWeight(9);
    //pupilSize = strokeWeight(1);
    if (pupilSize >= 1 & pupilSize <= 2) {
      strokeWeight(4);
    } else if (pupilSize >= 2 & pupilSize <= 3) {
      strokeWeight(5);
    } else if (pupilSize >= 3 & pupilSize <= 4) {
      strokeWeight(6);
    } else if (pupilSize >= 4 & pupilSize <= 5) {
      strokeWeight(7);
    } else if (pupilSize >= 5 & pupilSize <= 6) {
      strokeWeight(8);
    } else if (pupilSize >= 6 & pupilSize <= 7) {
      strokeWeight(9);
    } else if (pupilSize >= 7 & pupilSize <= 8) {
      strokeWeight(10);
    } else {
      strokeWeight(11);
    }
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    point(eyeLX, height / 2, eyeSize);
    point(eyeRX, height / 2, eyeSize);
    //strokeWeight(random(1, 7));
    pop();
}

//nose shape
function nose() {
    var noseW = width / 2 - faceWidth * 0.04
    var noseH = height / 2 + faceHeight * 0.07
    //noseType = random(1, 5);
    if (noseType >= 1 & noseType <= 2) {
      rect(noseW+4, noseH, 7, 18, 10);
    } else if (noseType >= 2 & noseType <= 3) {
      arc(noseW+4, noseH, 10, 10, PI + TWO_PI, TWO_PI);
    } else if (noseType >= 3 & noseType <= 4) {
      push();
      strokeWeight(4);
      point(noseW+2, noseH+5);
      point(noseW+10, noseH+5);
      pop();
      //triangle(noseW-3, noseH, noseW, noseH-4, noseW+3, noseH)
    } else if (noseType >= 4 & noseType <= 5) {
     ellipse(noseW+4, noseH+3, 10, 10);
    } else if (noseType >= 5 & noseType <= 6) {
      triangle(noseW+2, noseH, noseW+5, noseH-4, noseW+8, noseH)
    }
}
  
//mouth shape
function mouth() {
    var mouthW = width / 2
    var mouthH = height / 2 + faceHeight * 0.1
    if (mouthType >= 1 && mouthType <= 2) {
      push();
      fill(0);
      ellipse(mouthW, mouthH+20, 10, 10);
      pop();
    } else if (mouthType >= 2 & mouthType <= 3) {
      push();
      noFill();
      arc(mouthW, mouthH+25, 25, 18, PI + TWO_PI, TWO_PI);
      pop();
    } else if (mouthType >= 3 & mouthType <= 4) {
      push();
      noFill();
      arc(mouthW, mouthH+2, 60, 40, PI*0.1, PI*0.9, OPEN);
      pop();
    } else if (mouthType >= 4 & mouthType <= 5) {
      line(mouthW-15, mouthH+20, mouthW+15, mouthH+20);
    }
}
 
function mousePressed() {
    faceWidth = random(100, 170);
    faceHeight = random(100, 165);
    eyeSize = random(10, 30);
    pupilSize = random(1, 9);
    faceType = random(0, 2);
    noseType = random(1, 6);
    mouthType = random(1, 5);
    r = random(20, 230);
    g = random(120, 200);
    b = random(50, 255);
    strokeWeight(random(1.5, 3));
}

LO: My Inspiration

PANDEMIC (2020-2022) is an in-progress 1st-person 3D simulation game where the player acts as a virus, experiencing an abstract version of the 2020 COVID-19 outbreak. An immersive art piece designed to commentate on the xenophobia and political turmoil brought forth by the pandemic, the game grows in intensity as the player progresses through the reality imagined by Chanhee Choi, a multidisciplinary interactive artist and Ph.D. candidate in the UW Digital Arts and Experimental Media department. PANDEMIC has been under development since 2020, and is set to release this year. The inspiration for the game stemmed from Choi’s personal experience with being the victim of an anti-Asian hate crime during the outbreak.

To create this unreal experience and environment, Choi used custom scripts to enable player control, created a multitude of 3D models as objects with unique in-game behavior, and programmed interactions with the player-controlled virus (I speculate that Unreal Engine was used to create PANDEMIC). She was possibly inspired by other immersive art games with the purpose of creating social commentary and raising awareness for real world problems that need mainstream discussion and attention.

https://chaneec.com/PANDEMIC

Chanhee Choi, 2020-present, PANDEMIC

LO: Generative Art

aDiatomea is a complex artificial life system produced by Markos R. Kay, a multidisciplinary artist focused on exploring biology and conducting a-life research through screen-based media & generative art. Fully generated with a mathematical equation capable of reproducing organic lifeforms, Kay’s microscopic organisms – also known as Diatoms – are injected with granular sound to act as their external force of life as they interact with the environment as well as one another. At its very core, aDiatomea is an evolutionary algorithm made up of particles placed randomly within 3 dimensions, each with a confining parameter that limits how far they can spread from their initial number. Driven by sound and randomness, the diatoms grow, evolve, and interact with the conditions of the environment, enabling the process that we know as artificial life.

Aside from being an (r)evolutionary artist, Markos Kay is a digital scientist and “genetic engineer.” His works are often beyond even the scope of both modern art and science. As a digital artist mesmerized by the integration of generative visual media with other fields of research, I am beyond envious of both Kay’s abilities as a programmer as well as his imagination as an artist.

https://www.mrkism.com/adiatomea.html

Markos R. Kay, aDiatomea, 2008