LO 05 – Cindermedusae

A few generated creatures

Cindermedusae is a computer algorithm that generates jellyfish-like creatures based on a set of parameters. The project was developed by Marcin Ignac, a polish artist / programmer / designer living in London. The project was inspired by Ernst Haeckel’s book “Kunstformen der Natur,” after Ignac became fascinated with deep sea life, specifically jellyfish.

I like this project because of how the 3D images take on the style of old anatomical nature drawings. While the forms are completely computer generated, the rendering gives the final images the feeling of an analog book. I also like the way that the set of changeable parameters mimics the inherent variation of nature, allowing the user to create an endless number of perfectly unique creatures.

Project 05 – Wallpaper

sketch
// WALLPAPER
// TERESA LOURIE
// PROJECT 05 A
// SECTION D


var s = 120;
//var column = 3;

function setup() {
    createCanvas(500, 500);
    background(150, 175, 255);
    
}

function draw() {
	//var d = s*sqrt(3)/2;  //column offset
	for (var x = 0; x <= 600; x += s) {
		push();
		translate(-120, 0);
		
		
		for (var y = -50; y<=600; y += s){ 
			push();
			translate(x, y);
			
			push();  //background pattern
			translate(30, 30);
			stroke(175, 200, 255);
			strokeWeight(20);
			line(180, 0, 180, 180); //vertical
			line(0, 0, 180, 0); //horizontal
			push();
			translate(-60, 60);
			line(180, 0, 180, 180);
			line(180, 0, 0, 0);
			pop();
			pop();


			strokeWeight(20);
			stroke(225,185,110); //mushroom A stem
			line(0, 0, 0, random(15, 25));
			

			fill(190,125,50) //mushroom A cap
			noStroke();
			arc(0, 0, random(45, 70), random(40, 60), PI, 0, CHORD);
			pop();
			

			push();
			translate(x+60, y+60);

			strokeWeight(random(15,25));
			stroke(255); //mushroom B stem
			line(0, 0, 0, random(15, 25));
			
			fill(190, 0, 0);
			noStroke();
			arc(0, 0, random(45, 70), random(40, 60), PI, 0, CHORD); //mushroom B cap

			pop();
			



		}
		pop();

	}
	noLoop();
	
	

}

Project 04

sketch
var ndx1;
var ndy1;
var ndx2;
var ndy2;

var numLines = 100;
var r = 255;
var g = 20;
var b = 150;
var n1xstart = 0;   //shape u, first line, x value of first point, etc
var n1ystart = 0;   //just variables to make values easier to change
var n1xstop = 100;
var n1ystop = 400;

var n2xstart = 300;   //same but second line
var n2ystart = 400;
var n2xstop = 400;
var n2ystop = 0;

var u1xstart = 100;   //same variables but for u shape 
var u1ystart = 0;   
var u1xstop = 0;
var u1ystop = 400;

var u2xstart = 400;  
var u2ystart = 400;
var u2xstop = 300;
var u2ystop = 0;

var t1xstart = 100;  
var t1ystart = 0;   
var t1xstop = 150;
var t1ystop = 400;

var t2xstart = 250;  
var t2ystart = 400;
var t2xstop = 300;
var t2ystop = 0;

var s1xstart = 175;  
var s1ystart = 0;   
var s1xstop = 100;
var s1ystop = 400;

var s2xstart = 300;  
var s2ystart = 400;
var s2xstop = 225;
var s2ystop = 0;


function setup() {
    createCanvas(400, 400);
    background(0);
    stroke(r, g, b);
    //line(n1xstart, n1ystart, n1xstop, n1ystop);
    //line(n2xstart, n2ystart, n2xstop, n2ystop);
    
  
    ndx1 = (n1xstop-n1xstart)/numLines;    // n shape distance
    ndy1 = (n1ystop-n1ystart)/numLines;
    ndx2 = (n2xstop-n2xstart)/numLines;
    ndy2 = (n2ystop-n2ystart)/numLines;
    
    udx1 = (u1xstop-u1xstart)/numLines;    // u shape distance
    udy1 = (u1ystop-u1ystart)/numLines;
    udx2 = (u2xstop-u2xstart)/numLines;
    udy2 = (u2ystop-u2ystart)/numLines;

    tdx1 = (t1xstop-t1xstart)/numLines;    // t shape distance
    tdy1 = (t1ystop-t1ystart)/numLines;
    tdx2 = (t2xstop-t2xstart)/numLines;
    tdy2 = (t2ystop-t2ystart)/numLines;

    sdx1 = (s1xstop-s1xstart)/numLines;    // s shape distance
    sdy1 = (s1ystop-s1ystart)/numLines;
    sdx2 = (s2xstop-s2xstart)/numLines;
    sdy2 = (s2ystop-s2ystart)/numLines;
}

function draw() {
        var nx1 = n1xstart;
        var ny1 = n1ystart;
        var nx2 = n2xstart;
        var ny2 = n2ystart;
       
        var ux1 = u1xstart;
        var uy1 = u1ystart;
        var ux2 = u2xstart;
        var uy2 = u2ystart;

        var tx1 = t1xstart;
        var ty1 = t1ystart;
        var tx2 = t2xstart;
        var ty2 = t2ystart;

        var sx1 = s1xstart;
        var sy1 = s1ystart;
        var sx2 = s2xstart;
        var sy2 = s2ystart;
    
    for (var i = 0; i <= numLines; i += 1) {   //shape u
          
          stroke(r, g, b);
          line(ux1, uy1, ux2, uy2);
          ux1 += udx1;
          uy1 += udy1;
          ux2 += udx2;
          uy2 += udy2;
          r -= 2;        //color changes as lines progress
          g += 1;
          b += 3;
    }
    r = 25;
    g = 50;
    b = 220;
    for (var i = 0; i <= numLines; i += 1) {   //shape n
        
        stroke(r, g, b);
        line(nx1, ny1, nx2, ny2);
        nx1 += ndx1;
        ny1 += ndy1;
        nx2 += ndx2;
        ny2 += ndy2;
        r += 4;
        g += 2;
        b -= 3;
    }
    for (var i = 0; i <= numLines; i += 1) {   //shape t
        
        stroke(255);
        line(tx1, ty1, tx2, ty2);
        tx1 += tdx1;
        ty1 += tdy1;
        tx2 += tdx2;
        ty2 += tdy2;
        
    }
    for (var i = 0; i <= numLines; i += 1) {   //shape s
        
        stroke(255);
        line(sx1, sy1, sx2, sy2);
        sx1 += sdx1;
        sy1 += sdy1;
        sx2 += sdx2;
        sy2 += sdy2;
        
    }
    
    noLoop();
}

LO 04 – What do machines sing of?

“What do machines sing of?” is an art piece by Martin Backes, an artist, technologist, and self-described hacker. The piece consists of a microphone placed in front of a standing computer monitor that uses a computer program to reproduce popular ballads from the 1990s. It was created in 2015.

I chose this piece because it deals with voice and language in an interesting way. The piece raises questions about the increasing capability of technology to perform inherently human tasks, but it also says something about our capacity to personify technology. While the program works to imitate a human voice through blatantly digital sounds, our perceptions work to interpret those sounds as such; thus, the program and the viewer work together to create the music. 

Project 3 – Dynamic Drawing

drawingtlourie

function setup() {
    createCanvas(500, 500);
    background(0);

}

function draw() {
	background(0);
	stroke(200, 0, mouseY);
    strokeWeight(mouseX/15); //vertical red lines
    line(25, 0, 25, 500);
    line(75, 0, 75, 500);
    line(125, 0, 125, 500);
    line(175, 0, 175, 500);
    line(225, 0, 225, 500);
    line(275, 0, 275, 500);
    line(325, 0, 325, 500);
    line(375, 0, 375, 500);
    line(425, 0, 425, 500);
    line(475, 0, 475, 500);


    noStroke();
    fill(0, 0, 200, mouseY/2 + 20); //circls
    ellipse(100, 100, pmouseX-mouseX/3);
    ellipse(100, 400, pmouseX-mouseX/3);
    ellipse(400, 100, pmouseX-mouseX/3);
    ellipse(400, 400, pmouseX-mouseX/3);



    fill(200, 200, 0, mouseX/2 + 20); //circles
    ellipse(100, 100, pmouseY-mouseY/3);
    ellipse(100, 400, pmouseY-mouseY/3);
    ellipse(400, 100, pmouseY-mouseY/3);
    ellipse(400, 400, pmouseY-mouseY/3);

    push();

    translate(width/2, height/2);
    rotate(radians(mouseX));
    fill(255, 255, 255, mouseX/2+15); //white piece
    rectMode(CENTER);
    rect(0, 0, 255-mouseY, 1000); 

    pop();

	stroke(200, 0, mouseY);
	strokeWeight(mouseY/15); //horizontal red lines
    line(0, 25, 500, 25);
    line(0, 75, 500, 75);
    line(0, 125, 500, 125);
    line(0, 175, 500, 175);
    line(0, 225, 500, 225);
    line(0, 275, 500, 275);
    line(0, 325, 500, 325);
    line(0, 375, 500, 375);
    line(0, 425, 500, 425);
    line(0, 475, 500, 475);


}

LO 3

Fluorescence Zoetrope

“Fluorescence Zoetrope” is a 3D printed sculptural animation piece created by the design firm Nervous System (Jessica Rosenkrantz and Jesse Louis-Rosenberg.) They 3D modeled an organic growth loop algorithmically, then PLA printed each frame. Then they mounted them onto a rotating platform to animate the form.
I am drawn to this piece because of the impressive craft involved in it. The color gradient is eye catching and perfectly smooth, and the forms themselves are incredibly high-resolution. I think this project is a testament to the level of refinement that technologies such as computer generation and 3D printed can provide at times. The algorithms used to create this project are based on natural growth processes.

Project 2 – Variable Face

variableface
var faceWidth = 200;
var faceHeight = 200;
var eyeDistance = 10;
var eyeWidth = 5;
var eyeHeight = 20;
var eyeHeightFORREAL = 20;
var pupilSize = 10;
var r = 150;
var g = 150;
var b = 150;
var mouthY = 50;
var mouthHeight = 30;
var mouthWidth = 30;
var PI = 3.1415;

function setup() {
    createCanvas(500, 500);
    background(220);
    text("p5.js vers 0.9.0 test.", 10, 15);
}

function draw() {
	stroke(0);
	strokeWeight(2);

	background(255);
	fill(r, g, b);
	//noStroke();
	ellipse(width/2, height/2, faceWidth, faceHeight); //head
	
	fill(255);
	ellipse(width/2 - eyeDistance, height/2 - eyeHeight, eyeWidth, eyeHeightFORREAL); //eyes
	ellipse(width/2 + eyeDistance, height/2 - eyeHeight, eyeWidth, eyeHeightFORREAL);

	fill(0);
	ellipse(width/2 - eyeDistance, height/2 - eyeHeight, pupilSize);
	ellipse(width/2 + eyeDistance, height/2 - eyeHeight, pupilSize);

	fill(255);
	ellipse(width/2, mouthY, mouthWidth, mouthHeight); //teeth

	
	line(width/2, mouthY, width/2, mouthY - mouthHeight/2);

	fill(r - 80, g - 80, b - 80);
	arc(width/2, mouthY, mouthWidth, mouthHeight, 11*PI/6, 7*PI/6, CHORD); //bottom mouth part
	

}

function mousePressed(){
	faceWidth = random(200, 300);
	faceHeight = random(200, 400);
	eyeWidth = random(25, 70);
	eyeHeight = random(-10, 30);
	eyeHeightFORREAL = random(25,70);
	eyeDistance = random(eyeWidth, faceWidth/2 - eyeWidth);
	pupilSize = random(5, min(eyeWidth - 10, eyeHeightFORREAL - 10));
	mouthY = height/2 + random(30, 70);
	mouthHeight = random(20, 80);
	mouthWidth = random(20,80);
	r = random(125, 200);
	g = random(125, 200);
	b = random(125, 200);

	
	
}

LO 2

Close up of Wall Drawing 1247

Wall Drawing 1247 is a piece of algorithmic art by prolific artist Sol LeWitt created in 2007. LeWitt was a minimalist who produced a large body of work in the form of written instructions. Wall Drawing 1247 is a large drawing of an X with a gradient effect produced by the systemic layering of graphite scribbles. LeWitt’s work focused heavily on geometry, simplicity, and, sometimes, color. Through his algorithmic works, he expressed his artistic view that the concept is more important than the product.

When I saw this piece for the first time at the MASSMoca I was struck by the dimensionality of it. I saw depth created by a beautiful, smooth gradient. It wasn’t until I immediately assumed that it had been created robotically, or that it was some sort of print. I didn’t know that a carefully grid had been constructed, labelled, and filled in bit by bit by a team of skilled artists scribbling at the wall.

The process of creating the work

Project 1 – Self Portrait

selfportrait
function setup() {
    createCanvas(800, 800);
    background(255);
}

function draw() {
	
	noStroke();
	fill(0);
	ellipse(400, 300, 500); //hair circle
	
	rect(150, 300, 500, 300); //hair box

	fill(255, 242, 230);
	ellipse(400, 350, 400, 450); //face

	fill(0);
	triangle(410, 115, 210, 145, 195, 350);
	triangle(390, 115, 590, 145, 605, 350);
	
	stroke(0);
	strokeWeight(4);
	fill(243, 118, 86);
	ellipse(400, 450, 130, 130); //mouth

	noStroke();
	fill(255, 242, 230); 
	rect(325, 380, 150, 70); //mouth cover

	stroke(0);
	line(335, 450, 465, 450); //mouth line

	line(390, 380, 390, 390); //nose lines
	line(410, 380, 410, 390);

	fill(255);
	//ellipse(315, 330, 75, 35);
	//ellipse(485, 330, 75, 35);
	fill(0);
	circle(315, 330, 20); //eyes
	circle(485, 330, 20);
	strokeWeight(20);
	line(340, 300, 300, 285);
	line(460, 300, 500, 285); //eyebrows

	noStroke();
	fill(249,185,169);
	ellipse(300, 382, 75, 32);
	ellipse(500, 382, 75, 32);
	
}













LO 1

“This Person Does Not Exist” is a computational project that was created by Phillip Wang using StyleGAN, a machine learning framework made available by the technology company Nvidia. Phillip is a former Uber software engineer who created the program to show the impressive capabilities of GANs (generative adversarial networks.) It was originally shared to a small Facebook group but went on to get over 4 million hits. His inspiration for the project likely came from the rise of intelligent video manipulation and “deepfakes” on the internet.

Upon loading the webpage, the screen is filled with a high definition headshot of a random person. Reloading the page brings up another person, and so on. While the images look believable, they are all completely fabricated by an artificial intelligence; thus the title “This Person Does not Exist.”

What makes this project so interesting to me is the questions it brings up. If a computer program can so easily trick us into thinking a face is real, what else could we be made to believe? In a world where we already question almost every piece of information fed to us from entertainment media and the news, it seems as though tools for digital deception are only becoming more advanced. By highlighting the exponentially expanding capabilities of artificial intelligence, this work leaves the user feeling both deep discomfort and utter awe.

An artificially generated face from the website.