Jaclyn Saik Looking Outwards 02

After exploring a bunch of generative artist’s portfolios and the websites of a lot of different design and art firms, I found a generative art project that really grabbed my attention. The design studio “Nervous System” created and exhibited a project called “Growing Objects” which, simply put, explored patterns that occur in nature and then simulated them. This caught my eye particularly because the project was hosted by the Simons Center for Geometry and Physics, but the images of the objects and visuals they created were beautifully delicate and artistic.   The above picture is just one of the many digitally fabricated sculptures in the series, called “Laplacian Cave.” Laplacian growth is one of the four computational systems that the studio featured and explored: this one particularly “involves a structure which expands at a rate proportional to the gradient of a laplacian field.” This type of growing and the resulting pattern can be found in nature in crystallization effects and with different types of fungi and algae.

The studio produced a variety of both 2D and 3D models that used a similar algorithm. They made sure to specify why they were not trying to recreate exactly something that is found in nature, but rather explore how synthetically building objects using these algorithms brings up similarities in the natural world.

I think this project is a really interesting combination of math and art, and I think it is fitting and very “full-circle” that the mimicking of nature and living organisms brings about such an elegant synthesis.

Jaclyn’s Variable Face

jsaik

/* Jaclyn Saik 
Project-02 
Section E 
*/


//face and hair variables 
var eyeSize = 20;
var pupilSize = 10
var faceWidth = 150;
var faceHeight = 170;
var bunWidth = 100
var bunHeight = 100
var armLW = 160
var armRW = 480
var toungeL = 40
var toothL = 10
var eyebrowH = 155
var bluehair = 50
var redskin = 238




    

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

function draw() {
    background(140, 120, 170);
    noStroke();

    //colors
    s = color(redskin, 216, 193) //skin
    r = color(206, 20, 110)
    b = color(223, 140, bluehair)

    //body
    fill(s)
    //arms
    
    triangle(245, (height / 2) + 20, 240, 380, armLW, 600);
    triangle(235 + (width / 4), (height / 2) + 20, 235 + (width / 4), 380, armRW, 600);
    fill(r)
    rect(240, height / 2, width / 4, height*(2/3), 20)

    //hair
    fill(b)
    ellipse(width / 2, height / 3 + 5, faceWidth + 20, faceHeight + 40)
    ellipse(width / 2 - faceWidth * .6, height / 3 + 50, bunWidth, bunHeight)
    ellipse(width / 2 + faceWidth * .6, height / 3 + 50, bunWidth, bunHeight)


    //face
    fill(s)
    ellipse(width / 2, height / 3 + 25, faceWidth,  faceHeight);
    //eyes
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    var pupilLX = width / 2 - faceWidth * 0.25;
    var pupilRX = width / 2 + faceWidth * 0.25;
    fill(255);
    ellipse(eyeLX, height / 3 + 15, eyeSize, eyeSize); 
    ellipse(eyeRX, height / 3 + 15, eyeSize, eyeSize);
    fill(0)
    //pupils
    ellipse(eyeLX, height / 3 + 15, pupilSize, pupilSize); 
    ellipse(eyeRX, height / 3 + 15, pupilSize, pupilSize);
    
    
    //tounge
    fill(237, 106, 169)
    ellipse(width / 2, height / 3 + 65, 30, toungeL)
    //teeth
    fill(255)
    rect(width / 2 - 5, height / 3 + 60, 15, toothL)
    //mouth
    fill(s)
    rect(width / 2 - 25, height / 3 + 50, 50, 10)

    //nose
    var noseWL = 300
    var noseWR = 340
    fill(247, 208, 95)
    triangle(width / 2, height / 3 + 10, noseWL, height / 3 + 50, noseWR, height / 3 + 50);

    //eyebrows
    noFill();
    strokeWeight(3)
    stroke(218, 130, 55)
    arc(eyeLX, eyebrowH, 40, 25, PI*1.2, 0, OPEN)
    arc(eyeRX, eyebrowH, 40, 25, PI, TWO_PI*.9, OPEN)


    

}

function mousePressed() {
    
    faceWidth = random(125, 150);
    eyeSize = random(20, 50);
    pupilSize = random(10, 15)
    bunHeight = random(60, 120);
    bunWidth = random(60, 120);
    armLW = random(120, 200);
    armRW = random(440, 520);
    toungeL = random(30, 90);
    toothL = random(10, 17)
    eyebrowH = random(160, 145)
    bluehair = random(20, 200)
    redskin = random(100, 255)


 
}

This was an interesting task, and definitely very fun to research. I especially liked looking into how artists like Moka create algoritm-generated faces, and how the randomization tools of computers really highlight the odd ways our brains look and recognize facial expressions. Instead of working in a sketchbook, my main method of “sketching” for this project was first creating the static elements of my figure, so originally the arms and torso, and then playing with different features layered on top of each other to see what type of expressions come out. I found it especially interesting how much power the pupils and eyebrows have over a person’s expression.

Liz Maday Project 2

sketch lizm

//Elizabeth Maday
//Section A
//emaday@andrew.cmu.edu
//Project-02

var eyeSize = 20;
var faceWidth = 100;
var faceHeight = 100;
var eyeBrowHeight = 0;
var mouthWidth = 27;
var bodySize = 114; 

var a = 3;
var b = 20;
var c = 17;
var d = 15;
var e = 28;

var r = 203;
var g = 129;
var B = 51;



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

function draw() {
    background(255, 173, 184);
    ellipseMode(CENTER);

    //grass
    strokeWeight(2);
    fill(0, 182, 15);
    ellipse(width/2, 480, 900, 250);

    //tail
    strokeWeight(7);
    noFill();
    bezier(width/2 + bodySize/4, height/2 + bodySize/1.4, width/2 + bodySize/1.45, height/2 + bodySize/2.1, width/2 + bodySize/1.3, height/2 + bodySize/4.5, width/2 + bodySize/1.3, height/2 - bodySize/6);

    //body
    strokeWeight(3);
    fill(r, g, B);
    ellipse(width / 2, 340, bodySize, bodySize);

    //front feet
    fill(r, g, B);
    line(width / 2, 397, width / 2, 368);
    line(width / 2 - 15, 397, width / 2 - 15, 368);
    line(width / 2 + 15, 397, width / 2 + 15, 368);
    arc(width / 2 - 15, 397, 30, 30, PI, 0, CHORD);
    arc(width / 2 + 15, 397, 30, 30, PI, 0, CHORD);

    //ears
    fill(r, g, B);
    triangle(width / 2 + (faceWidth * 0.20), height / 2 - (faceHeight * 0.4), width / 2 + (faceWidth * 0.40), height / 2 - (faceWidth * 0.2), width / 2 + (faceWidth * 0.45), height / 2 - (faceHeight * 0.60));
    triangle(width / 2 - (faceWidth * 0.20), height / 2 - (faceHeight * 0.4), width / 2 - (faceWidth * 0.40), height / 2 - (faceWidth * 0.2), width / 2 - (faceWidth * 0.45), height / 2 - (faceHeight * 0.60));

    //head
    fill(r, g, B);
    ellipse(width / 2, height / 2, faceWidth, faceHeight);

    //stripes
    line(width/2, height/2 - faceHeight/2, width/2, height/2 - faceHeight/2.6);
    line(width/2 - 8, height/2 - faceHeight/2, width/2 - 8, height/2 - faceHeight/2.45);
    line(width/2 + 8, height/2 - faceHeight/2, width/2 + 8, height/2 - faceHeight/2.45);

    //eyebrows
    line(width/2 + faceWidth/6, height/2 - eyeSize + eyeBrowHeight, width/2 + faceWidth/3.4, height/2 - eyeSize + eyeBrowHeight);
    line(width/2 - faceWidth/6, height/2 - eyeSize + eyeBrowHeight, width/2 - faceWidth/3.4, height/2 - eyeSize + eyeBrowHeight);

    //eyes
    var eyeLX = width / 2 - faceWidth * 0.25;
    var eyeRX = width / 2 + faceWidth * 0.25;
    fill(255, 255, 255);
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);

    //pupil
    fill(0);
    ellipse(eyeLX, height / 2, eyeSize / 4, eyeSize / 4);
    ellipse(eyeRX, height / 2, eyeSize / 4, eyeSize / 4);

    //nose
    triangle((width / 2) - a, (height / 2) + c, width / 2, (height / 2) + b, (width / 2) + a, (height / 2) + c);

    //whiskers 
    strokeWeight(2);
    line((width / 2) - faceWidth * 0.6, (height / 2) + d, (width / 2) - 9, (height / 2) + 20);
    line((width / 2) - faceWidth * 0.6, (height / 2) + e, (width / 2) - 9, (height / 2) + 23);
    line((width / 2) + 9, (height / 2) + 20, (width / 2) + faceWidth * 0.6, (height / 2) + d);
    line((width / 2) + 9, (height / 2) + 23, (width / 2) + faceWidth * 0.6, (height / 2) + e);

    //mouth
    ellipseMode(CORNER);
    noFill();
    arc(width / 2, (height / 2) + b - 13, mouthWidth, mouthWidth, 0, PI);
    arc((width / 2) - mouthWidth, (height / 2) + b - 13, mouthWidth, mouthWidth, 0, PI);    

    //twitching whiskers
    if (mouseIsPressed) {
        d = 10;
        e = 33;
    } else {
        d = 15;
        e = 28;
    }
}

function mousePressed() {
    faceWidth = random(75, 165);
    faceHeight = random(100, 200);
    eyeSize = random(10, 40);
    mouthWidth = random(18, 34);
    bodySize = random(85, 140);
    eyeBrowHeight = random(-5, 5);

    a = random(1, 5);
    b = random(18, 23);
    c = random(13, 19);
    d = random(10, 15);

    r = random(18, 215);
    g = random(110, 160);
    B = random(35, 265);
}

This project was really fun for me to work on because I had to figure out how to do a lot of new commands. Being successful after working on it for a long time was really satisfying. It was also interesting for me to start using more difficult things to work with such as ‘bezier’.

Looking Outwards 02: Miraj

When prompted with the idea of generative art for this Looking Outwards, I immediately thought of Miraj— an interactive work that generates animated visuals with your voice. It was originally conceived as a response to the new Apple tvOS open to developers in 2016.  Essentially they created an algorithm to fragment the images and collage them, while animating the shapes based on your voice. It was coded using both Swift and C++ and eventually integrating it using CV into the Apple TV.

I liked this project in particular because it went through several prototyping phases and had a large focus on user experience. It also heavily engages the user and creates a unique and lasting memory. Additionally because they were running it on Apple TV’s platform, they took some visual cues from Apple’s exisitng UI( (this was just an interesting fact I learned and appreciated about branding).

Eunice Choe – Project-02

sketch1

/*Eunice Choe
Section E
ejchoe@andrew.cmu.edu
Project-02
*/

// face shape
var faceW = 200;
var faceH = 250;
// eyes
var eyeSize = 30;
var eyePupil = 10;
// egg color
var eggColorR = 186;
var eggColorG = 215;
var eggColorB = 241;
// mouth
var mouthW = 40;
var mouthH = 15;
// nest
var nestW = 250;
var nestH = 70;
// brows
var browW = 20;
var browH = 5



function setup() {
    createCanvas(480, 640);
}
// background
function draw() {
    background(230, 160, 160);

// nest back
    noStroke();
    fill(106, 80, 71);
    ellipse(width / 2, height / 2 + 80, nestW, nestH);

// face
    noStroke();
    fill(eggColorR, eggColorG, eggColorB);
    ellipse(width / 2, height / 2, faceW, faceH);

// eye whites
    var leftEyeX = width / 2 - faceW*.2;
    var rightEyeX = width / 2 + faceW*.2;
    fill(255, 255, 255);
    ellipse(leftEyeX, height / 2, eyeSize, eyeSize);
    ellipse(rightEyeX, height / 2, eyeSize, eyeSize);

// eye pupils
    stroke(65, 44, 24);
    strokeWeight(7);
    ellipse(leftEyeX, height / 2, eyePupil, eyePupil);
    ellipse(rightEyeX, height / 2, eyePupil, eyePupil);

// mouth
    stroke(85, 85, 85);
    strokeWeight(4);
    fill(200, 120, 70);
    arc(width / 2, height / 2 + 30, mouthW, mouthH, 0, PI, OPEN);

// brows
    var leftBrowX = width / 2 - faceW*.3;
    var rightBrowX = width / 2 + faceW*.2;
    var browY = height / 2 - faceH*.15;
    fill(162, 114, 135);
    noStroke();
    rect(leftBrowX, browY, browW, browH);
    rect(rightBrowX, browY, browW, browH);


// nest front
    stroke(163, 136, 127);
    fill(124, 103, 95);
    arc(width / 2, height / 2 + 80, nestW, nestH + 100, 0, PI, OPEN);

// caption
    noStroke();
    textFont('Georgia');
    textSize(20);
    textAlign(CENTER);
    text('eggs for days!', width / 2, height / 2 + 200);

}

function mousePressed(){
    // face
    faceW = random(175, 225);
    faceH = random(225, 275);
    // eye
    eyeSize = random(20, 40);
    eyePupil = random(1, 20);
    // egg color
    eggColorR = random(225, 255);
    eggColorG = random(225, 255);
    eggColorB = random(225, 255);
    // mouth
    mouthW = random(10, 100);
    mouthH = random(5, 30);
    // brows
    browW = random(15, 40);
    browH = random(1, 10);


}

For this project, I was inspired by my love of eggs. I began experimenting with egg sketches on illustrator and ultimately decided to put my eggs in a nest. I also decided to change the color, eyes, brows, and mouth so that a new egg would appear on every click. This project was more challenging than the last one, but I still had a lot of fun.

Mimi Jiao – Looking Outwards 2 – Section E

Still Life (RGB-AV A) from Casey REAS on Vimeo.

Casey Reas is an artist who observes art through a technological and contemporary lense through coding, software, installations, and prints. As one of the creators of Processing, Reas has expressed interest in software and programming for artistic application starting from his undergraduate days. All of his works illustrate his interest in the intersection between technology and art, and his Still Life (RBG-AV A) and Still Life (HSB A)/Still Life (HSB B), created with custom written software, have caught my attention in particular. I am intrigued by the way technology is implemented to portray something that seems so primitive. The visuals of the pieces convey an aesthetic resembling to that of computers made in the early 2000’s or even before, with pixelated and “glitchy” visuals. Reas has taken visuals that occur as a result of technological imperfection and appropriated that into generative artwork and makes viewers begin to appreciate the beauty of the digital realm. His use of colors also further strengthen the sense of primitive technology, and he portrays a realistic rendering of such aesthetic. One thing that I thought he could’ve developed further upon was bringing technology into the experience of his video pieces such as his Still Life (RBG-AV A). As the sensory experiences also contribute to the presentation of his artwork, it would be interesting to see him play around with the technology of generative audio in tandem with his generated visuals. This type of work is something that I am really interested in creating, and I would love to learn more about his process behind it.

Alice Fang- Project 02 Variable Face

dancing bird

/*
Alice Fang
Section E
acfang@andrew.cmu.edu
Project-02
*/

var R = 255; //RGB color
var G = 255;
var B = 255;

var HeadW = 300; //width of head
var HeadH = 200; //height of head
var HeadX = 320; //x position of head
var HeadY= 200; //y position of head

var beakA = 80; //length of beak

var t = "chirp";
var tX = 600; //text position
var tY = 440;
var ran = 300; //affecting variable

var kneeA = 300; //x position for knee
var kneeB = 390; //y position for knee

var wingW = 30; //wing width
var wingL = 120; //wing length
var degW = 260; //angle of wing

var featherA = 20; //width of first head feather
var featherB = 80; //height of first head feather
var featherC = 10; //width of second head feather
var featherD = 75; //height of second head feather
var deg = 50; //angle of head feather

function setup() {
    createCanvas(640, 480);
    angleMode(DEGREES);
}

function draw() {
	background(20, 30, 50);

	//bird legs
	stroke(117, 53, 18);
	strokeWeight(6);
	//left leg
	line(HeadX, HeadY, kneeA, kneeB);
	line(kneeA, kneeB, HeadX - 40, 480);
	//rightlig
	line(HeadX, HeadY, kneeA + 100, kneeB);
	line(kneeA + 100, kneeB, HeadX + 40, 480);

	//"chirp" text
	noStroke();
	textSize(20);
	textStyle(BOLD);
	fill(B - 120, G - 80, R - 100);
	text(t, tX, tY);
	fill(R - 20, B - 80, G - 120);
	text(t, mouseX, mouseY);
	fill(G - 100, B - 120, R - 10);
	text( t, tX + ran, tY + ran);

	//bird body
	noStroke();
	fill(R, G, B);
	ellipse(HeadX, HeadY, HeadW, HeadH);

	//left wing
	fill(R, G, B);
	push();
	translate(HeadX - HeadW/2, HeadY);
	rotate(180 + degW);
	ellipseMode(CORNER);
	ellipse(0, 0, wingW, wingL);
	pop();
	//right wing
	push();
	translate(HeadX + HeadW/2, HeadY);
	rotate(180 - degW);
	ellipseMode(CORNER);
	ellipse(-20, 0, wingW, wingL);
	pop();

	//head feathers
	fill(R, G, B);
	push();
	translate(HeadX, HeadY - HeadH/2);
	rotate(180 + deg);
	ellipseMode(CORNER);
	if (HeadY - HeadH/2 <= 80) {
		ellipse(0, 0, featherA, 40);
	} else {
		ellipse(0, 0, featherA, featherB);
	}
	pop();

	push();
	translate(HeadX, HeadY - HeadH/2);
	rotate(180+ deg + 40);
	ellipseMode(CORNER);
	if (HeadY - HeadH/2 <= 80) {
		ellipse(0, 0, featherC, 40);
	} else {
		ellipse(0, 0, featherC, featherD);
	}
	pop();

	//bird beak
	fill(193, 86, 27);
	triangle(HeadX, HeadY - 10, HeadX + beakA, 
		    HeadY, HeadX, HeadY + 5);

	//bird eyes
	fill(0);
	ellipse(HeadX - 32, HeadY - 15, 8, 8);
	ellipse(HeadX + 32, HeadY - 15, 8, 8);

}

function mousePressed() {
	R = random(180, 255);
	G = random(180, 255);
	B = random(180, 255);

	//head
	HeadW = random(120, 200);
	HeadH = random(150, 180);
	HeadX = random(300, 320);
	HeadY = random(150, 200);

	beakA = random(-70, 80);

	//knee joint
	kneeA = random(220, 300);
	kneeB = random(320, 370);

	//text position
	tX = random(110, 550);
	tY = random(20, 440);
	ran = random(-300, 300);

	//wing size and angle
	wingL = random(80, 120);
	wingW = random(10, 30);
	degW = random(200, 260);

	//head feather size and angle
	featherA = random(10, 20);
	featherB = random(50, 80);
	featherC = random(5, 10);
	featherD = random(20, 75);
	deg = random(-50, 50);


}

This dancing bird was inspired by a doodle that I tend to draw in my notes (and in my friends’ notes too…). Working with variables was a bit of a struggle for me, especially if something went wrong in the position or rotation, because then I had to figure out which variable the problem occurred with, as opposed to just toggling numbers, but this was a fun exercise to do!

birds of various sizes!

susiel-Looking Outwards-02

Formation from Kyuha Shim on Vimeo.

Formation is a project done by one of the CMU School of Design’s professor, Kyuha Shim. I came across this project during his studio last semester and was one of the reasons that helped me decide to take 104. Formation is a 2016 project commissioned by Alliance Graphique Internationale (AGI) for the Special Project Exhibition during AGI conference in Seoul.  It seems like there is a canvas with a grided background. Within this frame, there is a class for circles which contains the circle objects. These objects are what specify the random color, size and position for the circles. Perhaps there is an array system that informs how many circles are on the canvas. There could be a statement that indicates a change when a certain amount of time passes, with one change, it impacts the movement of the other circles. I appreciate this project not only for its visuals, but also because it is a generative system with a larger responsive system. It visually hows multitudinous transitions and scaling of visual/graphic elements.

Jenny Hu — Looking Outwards 02

The Silk Pavillion is a pavilion designed and produced by the Mediated Matter lab at MIT’s Media Lab. I’m overall extremely inspired by the project because it represents Neri Oxman’s “material ecology” philosophy so clearly. What if the things we had today could be co-produced by understanding and putting material properties first?

The project is inspired by the way silkworms can produce their own cacoon out of a single thread of silk. The pavilion algorithm is generated by adopting similar behaviors to produce the panels of the pavilion out of thread, while the silkworms (which are acting completely autonomous) provide secondary structural support. It’s interesting because not only is the manufacturing algorithm based on natural logic, but the silk worms are in some ways autonomous generative beings too.

More information about the project can be found at the Mediated Matter Lab. 

 

Helen Reynolds – Project 2 – Variable Faces

hreynold-variablefaces

/* 
Helen Reynolds
Section E
hreynold@andrew.cmu.edu
Project-02
*/

//shape variables
var noseWidth = 47;
var faceWidth = 304;
var faceHeight = 265;
var eyeSize = 30;
var mouthHeight = 34;
//color variables
var backgroundR = 245;
var colorR = 32;


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

function draw() {
    background(backgroundR, 229, 218);

    //face
    rectMode (CENTER);
    noStroke();
    push();
    translate(width / 2, height / 2);
    rotate(110);
    fill(218, 164, 129);
    rect(0, 0, faceWidth,  faceHeight, 132);
    pop();

    //mouth
    fill(colorR, 30, 30);
    ellipse(width / 2, height / 2 + 70, 58, mouthHeight);

    //cheeks
    fill(253, 219, 200);
    ellipse(width / 2 - 25, height / 2 + 50, 56, 56);
    ellipse(width / 2 + 25, height / 2 + 50, 56, 56);

    //ears 
    fill(218, 164, 129);
    triangle(170, 97, 251, 144, 186, 212);
    triangle(474, 97, 393, 144, 455, 212);

    //bridge of nose
    rectMode (CENTER);
    noStroke();
    fill(206, 152, 123);
    rect(width / 2, height / 2, noseWidth, 76, 18);

    //nose
    rectMode (CENTER);
    noStroke();
    fill(167, 83, 78);
    rect(width / 2, height / 2 + 27, noseWidth, 24, 9);

    //eyes
    fill(colorR, 50, 30);    
    var eyeLX = width / 2 - faceWidth * 0.2;
    var eyeRX = width / 2 + faceWidth * 0.2;
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);

    //eyes sparkle
    fill(255);
    ellipse(eyeLX + 2, height / 2 - 2, eyeSize / 3, eyeSize / 3);
    ellipse(eyeRX + 2, height / 2 - 2, eyeSize / 3, eyeSize / 3);
}

function mousePressed() {
    faceWidth = random(290, 340);
    faceHeight = random(250, 270);
    eyeSize = random(20, 40);
    colorR = random(30, 170);
    noseWidth = random(35, 60);
    mouthHeight = random(35, 65);
    backgroundR = random(200, 255);

}

To create this kitten, I sought inspiration from Hello Kitty and real cats. Starting off, I worked primarily in Illustrator. While I could’ve taken a more imaginative route with this, I chose to make the variations in my project pretty subtle so that the cat was always relatively believable.

Kitten process