LIA’s mechanical plotter drawings demonstrate how generative art can be used to create expressive works that still retain the signature of the artist. Using code written in Processing (a software program developed for the arts) and Micron pen fastened to a plotter, LIA creates beautiful works that vary in shape and composition. Not only do I admire LIA as a female creative programmer, but these “drawn” prints feel eloquently reminiscent of traditional printmaking practices. Much like in printmaking, the art of printing the work is equally as important as the image itself, and the copies that result from this process are inherently one-of-a-kind. Though created with code and executed by machine, the shapes and compositions of these works show evidence of human thought and creativity. While these drawings may lack the nuances of traditional art, LIA’s personality and expressiveness still clearly shines through.
Author: Eliza
Eliza Pratt – Project 02
/*
Eliza Pratt
Section E
elpratt@andrew.cmu.edu
Project-02
*/
var eyeSize = 30;
var eyeWidth = 1;
var blu = 100;
var faceWidth = 250;
var faceHeight = 300;
var skin = 30;
var glasses = 20;
var cut = 120;
var brow = 0;
function setup() {
createCanvas(640, 480);
}
function draw() {
noStroke();
background(200, 222, 230);
//hair
fill(224, 72, 72);
rect(width / 2 - faceWidth/2 - 20, height / 2 - 45, faceWidth + 40, cut, 0, 0, 10, 10);
fill('rgba(0,0,0, 0.25)');
rect(width / 2 - faceWidth/2, height / 2 - 45, faceWidth, cut);
////////HEAD/////////
fill(242-skin, 194-skin, 131-skin);
//ears
ellipse(width/2 - faceWidth/2, height/2 + 10, 55, 65);
ellipse(width/2 + faceWidth/2, height/2 + 10, 55, 65);
fill('rgba(0,0,0, 0.25)');
ellipse(width/2 - faceWidth/2, height/2 + 12, 35, 45);
ellipse(width/2 + faceWidth/2, height/2 + 12, 35, 45);
//neck
fill(242-skin, 194-skin, 131-skin);
rect(width/2 - 25, height/2 + faceHeight/3, faceWidth/5, faceHeight + 50);
beginShape();
curveVertex(width/2 - faceWidth/3, 600);
curveVertex(width/2 - faceWidth/3, 480);
curveVertex(width/2, height*0.8);
curveVertex(width/2 + faceWidth/3, 480);
curveVertex(width/2 + faceWidth/3, 600);
endShape();
//face
ellipse(width / 2, height / 2, faceWidth, faceHeight);
////////NOSE////////
noFill();
stroke('rgba(0,0,0, 0.25)');
var noseLine = height/2 + 40;
beginShape();
curveVertex(width/2 - 20, noseLine);
curveVertex(width/2 - 20, noseLine);
curveVertex(width/2, noseLine + 10);
curveVertex(width/2 + 20, noseLine);
curveVertex(width/2 + 20, noseLine);
endShape();
////////////EYES//////////
var eyeLX = width / 2 - faceWidth * 0.25;
var eyeRX = width / 2 + faceWidth * 0.25;
//eyes
fill(255);
ellipse(eyeLX, height / 2, eyeSize*eyeWidth, eyeSize);
ellipse(eyeRX, height / 2, eyeSize*eyeWidth, eyeSize);
//irises
fill(26, blu, 138);
stroke(0);
strokeWeight(3);
ellipse(eyeLX, height / 2, eyeSize/2, eyeSize/2);
ellipse(eyeRX, height / 2, eyeSize/2, eyeSize/2);
//pupilS
fill(0);
ellipse(eyeLX, height / 2, eyeSize/5, eyeSize/5);
ellipse(eyeRX, height / 2, eyeSize/5, eyeSize/5);
//reflection
fill(255);
noStroke();
ellipse(eyeLX + 3, 1 + height / 2, eyeSize/5, eyeSize/5);
ellipse(eyeRX + 3, 1 + height / 2, eyeSize/5, eyeSize/5);
//eyelids
fill(242-skin, 194-skin*1.5, 131-skin);
stroke(0);
strokeWeight(3);
arc(eyeLX, height / 2, eyeSize*eyeWidth, eyeSize, PI, 0, CHORD);
arc(eyeRX, height / 2, eyeSize*eyeWidth, eyeSize, PI, 0, CHORD);
////////EYEBROWS////////
noFill();
stroke(224, 72, 72);
strokeWeight(brow + 3);
if (brow < 1) {
arc(eyeLX, height/2 - 30, eyeSize + 30, 15, PI, 0);
arc(eyeRX, height/2 - 30, eyeSize + 30, 15, PI, 0);
}
else if (brow < 2) {
arc(eyeLX, height/2 - 30, eyeSize + 30, 15, 0, PI);
arc(eyeRX, height/2 - 30, eyeSize + 30, 15, PI, 0);
}
else if (brow < 3) {
arc(eyeLX, height/2 - 30, eyeSize + 30, 15, PI, 0);
arc(eyeRX, height/2 - 30, eyeSize + 30, 15, 0, PI);
}
else {
arc(eyeLX, height/2 - 30, eyeSize + 30, 15, 0, PI);
arc(eyeRX, height/2 - 30, eyeSize + 30, 15, 0, PI);
}
///////GLASSES////////
noFill();
stroke(0);
strokeWeight(3);
rect(width/2 - 120 , height/2 - 25, 100, 60, glasses);
rect(width/2 + 20, height/2 - 25, 100, 60, glasses);
line(width/2 - 20, height/2 - 10, width/2 + 20, height/2 - 10);
/////////MOUTH/////////
noStroke();
var lipLine = height/2 + faceHeight/4;
//upper lip
fill(92,13,58);
arc(width/2 - 10, lipLine, 30, 25, PI, 0);
arc(width/2 + 10, lipLine, 30, 25, PI, 0);
//bottom lip
fill(155, 0, 55);
arc(width/2, lipLine, 50, 40, 0, PI);
///////BANGS///////////
noStroke();
fill(224, 72, 72);
var hair = height/3;
arc(width / 2, height / 2 - 45, faceWidth + 40, faceHeight, PI, 0);
/////SHIRT///////
fill(40, 16, blu);
rect(width/2 - faceWidth/3, height*0.85, 2*faceWidth/3, 100, 20);
fill(242-skin, 194-skin, 131-skin);
arc(width/2, height*0.85, 80, 30, 0, PI);
}
function mousePressed() {
eyeSize = random(30, 40);
eyeWidth = random(1,2);
blu = random(0,255);
skin = random(1, 100);
glasses = random(1, 50);
cut = random(90, 260);
brow = random(4);
}
With this project, I had a lot of fun messing with the sizes, colors, and shapes of different features. In fact, I had to restrain myself from making every object changeable for the sake of time. I also spent a solid chunk of my afternoon trying to get the eyes to move with the mouse before giving up out of frustration. Maybe next time?
Eliza Pratt – Looking Outwards 01
Limbo is a puzzle-based video game developed by a small, Denmark-based studio known as Playdead. Beginning in a dark forest without any introduction or tutorial, the game details the terrifying challenges of a young boy as he travels through “the edge of hell.” Though I rarely show interest in video games and get motion sickness from 3D animations, I fell in love with the minimalist nature of this game and its stunning 2-dimensional visuals. With eerie, film-noir style graphics and intuitive controls, Limbo has influenced both my own artistic style as well as my admiration for interactive media design.
Starting as a one-man project by concept artist Arnt Jensen in 2004, the game development expanded to a team of 16 by the time of its release in 2010. Much of the artistic direction and concepts for Limbo derived from Jensen’s admiration for the film noir genre and his desire for minimalistic controls. The absence of text, arrows, and buttons keep you fully immersed in the game and encourage the user to decipher the platform on their own. While the original designs were created using Visual Basic, the team moved to Visual Studio during the development process. After overwhelming success following the game’s release, Playdead expanded to a company of 35 programmers and designers and has released its second game, Inside, which has received even greater praise.
Eliza Pratt Project 01
/*
Eliza Pratt
Section E
elpratt@andrew.cmu.edu
Project-01
*/
function setup() {
createCanvas(400, 450);
background(202, 219, 180);
}
function draw() {
noStroke();
//hair
fill(77,47,23);
ellipse(200, 200, 281, 310);
//face
fill(222,172,115);
ellipse(200, 245, 253, 253);
//EARS
arc(80, 240, 60, 70, HALF_PI, PI + HALF_PI);
arc(320, 240, 60, 70, PI + HALF_PI, HALF_PI);
fill(161,114,50);
arc(78, 240, 35, 45, HALF_PI, PI + HALF_PI);
arc(322, 240, 35, 45, PI + HALF_PI, HALF_PI);
ellipse(120, 275, 8, 8);
//eyebrows
fill(77,47,23);
rect(100,190,66,5);
rect(234,190,66,5);
//eyes
fill(255,255,255);
ellipse(130, 225, 67, 30);
ellipse(270, 225, 67, 30);
fill(63,69,31);
ellipse(138, 223, 25, 25);
ellipse(278, 223, 25, 25);
fill(0,0,0);
ellipse(138, 223, 15, 15);
ellipse(278, 223, 15, 15);
fill(255,255,255);
ellipse(144, 220, 5, 5);
ellipse(284, 220, 5, 5);
//glasses
noFill();
stroke(0,0,0);
strokeWeight(3);
rect(75, 200, 100, 60, 25);
rect(225, 200, 100, 60, 25);
line(175, 230, 225, 230);
arc(130, 225, 67, 30, PI, 0);
arc(270, 225, 67, 30, PI, 0);
noStroke();
//nose
fill(161,114,50);
ellipse(200, 278, 35, 35);
fill(222,172,115);
ellipse(200, 270, 35, 35);
//lips
fill(153,24,97);
arc(200, 318, 50, 40, 0, PI);
fill(92,13,58);
arc(188, 318, 26, 20, PI, 0);
arc(212, 318, 26, 20, PI, 0);
//more hair
fill(77,47,23);
arc(319, 100, 284, 208, HALF_PI, PI, CHORD);
arc(334, 80, 284, 208, HALF_PI, PI, CHORD);
}
This was fun, and took me less time to figure out than I thought it would! I found it difficult to arrange everything just by guessing random positions, so I did a quick sketch on Illustrator and then pulled the coordinates from there.
fake project post!
function setup() {
createCanvas(500, 500);
background(220, 0, 0);
}
function draw() {
background(220, 0, 0);
fill(255, 1500, 180);
stroke(100, 115, 215);
ellipse(mouseX, mouseY, 150, 50);
}
Fake post!
Nice