rsp1-SectionB-Project-02-VariableFace

sketch

//Rachel Park
//Section B @ 10:30 AM
//rsp1@andrew.cmu.edu
//Project-02-VariableFace


function setup() {
    createCanvas(480,640);

}
    //variables for the face
    var eyesize = 20; //a
    var facewidth = 155; //b
    var faceheight = 125; //c
    var earwidth = 30;
    var earheight = 60;
    var antwidth = 20;
    var armswidth = 20;
    var armsheight = 20;
    var armheight = 20;
    var handsheight = 440;
    var handswidth = 155/3;
    var bodywidth = d/2-20;
    var d = 480; //bodysize
    var e = 180; //medium gray fill color
    var f = 138; //dark gray fill color

function draw() {
    background(212,249,246);

    //robot face
    var faceX = width/2
    var faceY = height/3

    rectMode(CENTER);
    noStroke();
    fill(e);
    rect(faceX,faceY,facewidth,faceheight,10);

    fill(220);
    rect(faceX,faceY,facewidth-20,faceheight/2,10);

    //ear things
    var earX = width/3
    var earY = height/3

    noStroke();
    fill(f);
    rect(earX-10,earY,earwidth,earheight,5);

    noStroke();
    fill(f);
    rect(width/2+90,earY,earwidth,earheight,5);

    //antennae
    var antY = height/6

    noStroke();
    fill(f);
    rect(width/2,antY+20,antwidth/2,antwidth*2+10,10);

    noStroke();
    fill(255,41,41);
    ellipse(width/2,antY-10,antwidth,antwidth,10);

    //eyes
    var eyeLX = width/2-38.75;
    var eyeRX = width/2+38.75;
    var eyeY = height/3

    noStroke();
    fill(255);
    ellipse(eyeLX,eyeY,eyesize*2,eyesize*2);
    ellipse(eyeRX,eyeY,eyesize*2,eyesize*2);

    fill(203,35,35);
    ellipse(eyeLX,eyeY,eyesize+10,eyesize+10);
    ellipse(eyeRX,eyeY,eyesize+10,eyesize+10);

    //arms joints
    var armsY = height/2
    fill(f);
    ellipse(width/4,armsY,armswidth,armsheight);
    ellipse(width-120,armsY,armswidth,armsheight);

    //legs & feet
    var legsX = width/2
    var legsY = height-125-35
    var legsYX = height-125+35

    fill(f);
    rect(legsX+60,legsY,40,100);
    rect(legsX-60,legsY,40,100);

    fill(203,35,35);
    rect(legsX+60,legsYX,80,40);
    rect(legsX-60,legsYX,80,40);

    //body
    var bodyX = width/2
    var bodyY = height/2+40
    var bodywidth = d/2-20
    var bodyheight = d/3

    noStroke();
    fill(e);
    rect(bodyX,bodyY,bodywidth,bodyheight,10);

    //arms down

    fill(180);
    rect(width/5+5,armheight+340,21,125,5);
    rect(width-100,armheight+340,21,125,5);

    //hands down
    fill(203,35,35);
    arc(width/4-20,armheight+420,155/3,155/3,3*PI/4,PI/4,PIE);
    arc(width/2+155-15,armheight+420,155/3,155/3,3*PI/4,PI/4,PIE);
}

function mousePressed(){
  armheight = random([10,30]);
  armswidth = random([20,30]);
  eyesize = random(10,20);
  facewidth = random(155,160);
  faceheight = random(125,150);
  earwidth = random(30,55);
  earheight = random(25,60);
  antwidth = random(20,30);
  bodywidth = random([220,210]);
}

For my project, I wanted to make a visual of a small robot because I honestly that it was fun to change up of the possible movements of the figure along with the various facial feature sizes. I had an okay time creating the graphics within the code, but eventually got stuck on the actual functions that were used to make the arms and facial features vary in sizes and locations on the canvas. Overall, I thought that this was a very interesting project and thought that it was a good way to continue to practice the skills that we have learned thus far.

Image of the screenshot of my robot before I could figure out the solution to my function problem. I was able to make the arm shapes themselves, but couldn’t get them to appear separately so that it would make the robot look like its raising and lowering its arms with each click.
Variation on the sizes of the head, antenna, ears, and location of the arms.

 

 

 

 

 

 

 

 

 

My process included a lot of trial and error. Initially, I wanted the arms of the robot to translate upwards, making it look like it was waving its arms like a “hurrah!”, but eventually I came up with a code with slight changes to the image itself, making the robot look like it’s shrugging instead.

rsp1-SectionB-LookingOutwards-01

So my research began with the simple search of the words “new media art installations interactive” which led me to discover a project gallery called Teknopolis hosted by a group call BAM. In Teknopolis, a collection of 10 different new media art is displayed, many of them being interactive. One project that caught my eye was the project call Lumarca created by Matt Parker, a new media artist and game designer in collaboration with Albert Hwang. According to his bio, his interests are deeply settled into the exploration of the intersection between both the physical and digital worlds. Lumarca, Latin for “lightbox” is an installation which uses only a computer, a projector, and yard as the projected screen in order to showcase a three dimensional volumetric display of images and motion. And since the materials used were so simple, the cost for the completion of this project was very cheap and affordable.

           

Below is a short documentary about the project:

According to the documentary, Parker was inspired by his desire to create something three dimensional, something in which the user can experience it instead of viewing solely from a flat two dimensional screen.

In contrast, what inspired me about the project was that this project is cable for any artist to use and create their own versions of new media art using the software and system that Parker and Hwang had developed.

Here are some of the examples of different artists’ works inspired by Lumarca as documented on Parker’s website:

http://lumarca.info/gallery.html

Some critiques that I might have about this project would be that maybe this project was too static? If the creators really wanted to make this a truly three dimensional experience, I feel that it would have been beneficial to incorporate different animations or projections that look like the real world, kind of like the images that one sees in the Oculus rift, but outside of the bulky goggles.

rsp1-project01-face

My process included starting out researching some inspiration and I happened to stumble upon the works of Stanley Chow. I really liked how simple and straight forward his portraits looked, and wanted to emulate that to some extent. This was my first time coding anything, but found that the more I continue to use the lines of code for the specific shapes, the easier it became to remember what I needed in order to fulfill the tasks that I had in mind. I found that the hard part was the tedious task of trying to find the exact coordinates and calculations that I needed to find the right placements for my shapes.

sketch

function setup() {
    createCanvas(500,500);
    background(105);		//background(246,223,255);
}

function draw() {
  //hair
  noStroke();
  fill(57,26,14);
  ellipse(250,160,180,180);
  rect(160,150,180,100);

  //ears
  noStroke();
  fill(249,228,205);
  ellipse(305,190,50,50)

  noStroke();
  fill(249,228,205);
  ellipse(192,190,50,50)

  //face
  noStroke();
  fill(249,228,205);
  rect(185,100,130,165,57);

 //chin
  noStroke();
  fill(249,228,205);
  triangle(250,275,285,258,213,257);  

  //ears(inside)
  noStroke();
  fill(210,195,172);
  arc(185,190,20,20,PI/2,3*PI/2,OPEN); 

  noStroke();
  fill(210,195,172);
  arc(313,190,20,20,3*PI/2,PI/2,OPEN); 
  
  //eyes
  noStroke();
  fill(0,0,0);
  ellipse(285,180,20,20);

  noFill();
  strokeWeight(1);
  stroke(0,0,0);
  arc(286,180,30,30,PI,PI+TWO_PI);

  noFill();
  stroke(0,0,0);
  arc(220,180,30,30,PI,PI+TWO_PI);

  noStroke();
  fill(249,228,205);
  ellipse(300,175,7,13);

  noStroke();
  fill(249,228,205);
  ellipse(206,175,7,13);

  noStroke();
  fill(0,0,0);
  ellipse(220,180,20,20);
	
  triangle(293,174,300,176,290,185);

  translate(-85,-3);
  triangle(290,178,300,175,295,182);

  //nose
  noStroke();
  fill(210,195,172);
  ellipse(338,215,20,10);

  //lips
  strokeWeight(2);
  fill(202,119,107);
  arc(338,240,25,25,7*PI/6,11*PI/6);

  fill(249,228,205);
  triangle(338,232,325,225,350,225);

  //eyebrows
  noStroke();
  fill(0);
  rect(347,155,28,7,10);

  triangle(300,162,299,155,293,163);

  noStroke();
  fill(0);
  rect(297,155,28,7,10);

  triangle(372,162,373,155,379,163);

   //bangs
 noStroke();
 fill(57,26,14);
 arc(280,110,98,100,106,2,CHORD);

}