lo: computational fabrication

copyright bengler 2013 | 3D visualization of walking paths in Norway

While looking through the provided resources, one project that really caught my eye was Intersections by Even Westvang and Simen Svale Skogsrud. They looked at data of Norway pertaining to how people travel and live throughout the region and turned it into 3D elevation maps. I take great interest in data visualization and I think cross referencing data to make a 3D model is very very interesting, especially when the visual is representative of the data like it is here being the shape of the region surveyed. Since they were just working with raw data I’m sure the computational side wasn’t too hard. They probably just had to clean and aggregate the data to fit their desired outcome! I think the artistry is in the medium choice: 3D printing what could be a graph with 2 axes is a very compelling way to show arial data like the city information they were looking at. The tangibility of it works to emphasize the comparisons they sought out to make.

More information here.

Looking Outwards-03

Graham Murtha, Section A

Aguahoja III

The project I looked into,  Aguahoja III, is an exploration of biophilic parametric design conducted by the MIT media lab.  As an architecture student, parametric design is constantly brought up and analyzed in depth, but biophilic projects are harder to find, and much harder to understand.  Consequently, this project is fascinating to me, because despite its label as sculpture, it reminds me of the few cases of biophilic structures I’ve seen in the past.  The algorithms that created this object mimic natural processes by using organic materials like cellulose, chitin, and pectin.  By enacting this strategy, the team’s 3D printers are essentially creating organic material as it would grow in nature, but in unique and complex man-made forms.  Despite its computer based, parametric shape, the design still manifests visual signs of natural processes, such as layers of veins within its skin, and a decomposable exoskeleton.  In other words, the team that produced this project hosted a mix of both controlled and unpredictable variables, which is a fascinating balance to create as an artist.  

Looking Outwards 03

Mike Kneupfel, Keyboard Frequency Sculpture https://www.businessinsider.com/mike-knuepfel-keyboard-frequency-2011-6 

I find Mike Kneupfel’s Keyboard Frequency Sculpture (as discussed in Prof. Levin’s lecture) to be very interesting. As a whole, I typically find myself drawn to works that are funny in some sort, and I think the visualization of data in this way, almost like a bar graph (but not really), to be pretty funny. Imagining the use of this object in real life is also pretty amusing. On one hand, it would be very easy to find the keys most frequently used, but ergonomically, the piece is a nightmare. The way that an intention of practicality manifests in complete usability is a humorous paradox. In terms of the actual construction, I’d assume that to create this piece, whatever percentage of the time a key is used would correspond to a certain height. For example, maybe 1% use = 1 cm, so keys used 3% of the time would be 3 cm tall. 

Photograph of Kneupfel’s Keyboard Frequency Sculpture.

Project 02- Variable Faces

efleischer -02 – project
/* 
    eliana fleischer
    efleisch
    section e
*/

//Global variables to be used across different functions
//these are all the variables that will be used to make the initial face before randomization.

var eyewidth = 20;
var eyeheight = 20;
var faceshape = 1;
var facewidth = 200;
var faceheight = 200;
var eyecolorR = (15);
var eyecolorG = (255);
var eyecolorB = (100);
var noseheight = 5;
var nosewidth = 5;
var iris = 10;
var skinR = 100;
var skinG = 100;
var skinB = 100;
var x = 320;
var y = 240;


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

function draw() {

    background(eyecolorR, eyecolorG, eyecolorB); // sets background to the random variables for the eye color
    //faces 
    push();
    fill(skinR,skinG, skinB);
    noStroke()
    if (faceshape == 1){

        face1 = ellipse(x,y, facewidth, faceheight); //draws ellipse face

    } else {

        face2 = rect(x - facewidth /2 , y - faceheight /2 , facewidth , faceheight); //draws square face
    }

    //nose
    fill(255, 204, 255)
    nose = ellipse(x, y, noseheight, nosewidth); //draws nose at the center of the face
    pop();

    //eyes
    fill(255); //white fill for irises
    strokeWeight(2); // outline for eyes
    Leye = arc(x - facewidth / 5, y - faceheight / 5, eyewidth, eyeheight, 0, PI + QUARTER_PI, OPEN); //draws left eye
    Reye = arc(x + facewidth / 5, y - faceheight / 5, eyewidth, eyeheight,100, PI + QUARTER_PI, OPEN); //draws right eye

    //iris
    fill(eyecolorR, eyecolorG, eyecolorB); // fills in the irises with the random eye color
    Riris = ellipse(x + facewidth / 5, y - faceheight / 5, iris, iris)
    Liris = ellipse(x - facewidth / 5, y - faceheight / 5, iris, iris);

    //mouth
    strokeWeight(1);
    mouth = line(x - facewidth / 5, y + faceheight / 5, x + facewidth / 5, y + faceheight / 5 );

}


function mousePressed() {

    // when the user clicks, these variables are reassigned


    facewidth = random(100, 200);
    faceheight = random(100, 200);
    eyewidth = random(15, 45);
    eyeheight = random(10, 45);
    nosewidth = random(5,15);
    noseheight = random(5,15);
    iris = random(1, 7);
    eyecolorR = random(0,255);
    eyecolorG = random(0,255);
    eyecolorB = random(0,255);
    faceshape = int(random(1,3));
    skinR = random(100,200);
    skinG = random(100,200);
    skinB = random(100,200);
}

The most difficult part of this project for me was figuring out a creative solution to increase variability and actually make unique and distinct images through randomization.

project 02: variable faces

m’s project 2
/* atayao
    lab section E
    project 2
*/

// random reassignment (RR)
var eyeSize = 20;
var eyeDistance = 0.20;
var faceWidth = 115;
var faceHeight = 105;

// pick a card, any card (PAC)
var mouth = 0;
var skin = 0;

// variables from canvas dimensions
var x = 320;
var y = 240;

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

function draw() {
    background(255);
    strokeWeight(2.5);
    /* if-else statements test for the current value of 
    PAC variables to fill in skin color, mouth, & any facial marks.*/

    // SKIN COLORS
    if (skin == 0) {
        // bright blue skin
        fill(33, 118, 255);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    } else if (skin == 1) {
        // pink skin
        fill(255, 79, 170);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    } else if (skin == 2) {
        // green skin
        fill(136, 212, 38);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    } else if (skin == 3) {
        // orange skin
        fill(255, 117, 43);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    } else if (skin == 4) {
        // turquoise skin
        fill(2, 206, 217);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    } else {
        // yellow skin
        fill(255, 228, 56);
        ellipse(width/2, height/2, faceWidth, faceHeight);
    }   

    // MOUTH SHAPES
    if (mouth == 0) {
        // open mouth
        fill(0);
        circle(width/2, (height/2 + (faceHeight/3)), faceWidth/6); 
    } else if (mouth == 1) {
    // neutral mouth
        line((x - faceWidth/5), (y + faceHeight/4), (x + faceWidth/5), (y + faceHeight/4));
    } else if (mouth == 2) {
    // smiling mouth
        fill(255);
        triangle((x - faceWidth/5), (y + faceHeight/4), (x + faceWidth/5), (y + faceHeight/4), x, (y + faceHeight/3));
    } else {
    // dot mouth
        fill(0);
        circle(width/2, (height/2 + (faceHeight/3)), faceWidth/25); 
    }

    // EYES
    var eyeLX = width / 2 - faceWidth * eyeDistance;    // x-coordinate for left eye
    var eyeRX = width / 2 + faceWidth * eyeDistance;    // x-coordinate for right eye
    fill(255);
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);    // left eye
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);    // right eye
    fill(0);
    ellipse(eyeLX, height/2, eyeSize/2, eyeSize/2);    // left pupil
    ellipse(eyeRX, height/2, eyeSize/2, eyeSize/2);    // right pupil
    fill(0);
}

function mousePressed() {
    /* when the mouse is clicked, variables are reassigned to random values within
    specified ranges. */

    // RR
    eyeSize = random(18, 35);
    eyeDistance = random(0.20, 0.28);
    faceWidth = random(75, 150);
    faceHeight = random(100, 200);

    // PAC
    skin = int(random(0, 6)); 
    mouth = int(random(0, 4));
    cheeks = int(random(0, 6));
}

The most challenging and interesting part of this project for me was figuring out the maximum random variability possible to create interesting combinations while still making the overall images legible as faces.

Looking Outwards -02

The series of works I picked is “Quantum Superpositions” made by Markos Kay. These generative art pieces were created using a simulation that is inspired by the events in the Large Hadron Collider, but all the imagery is original and not actual images from the Collider. The artist used an original simulator to generate the images and then superimposed them on each other to represent different quantum properties.

Entanglement 1

I find this piece to be really interesting because of the interdisciplinary nature combining aspects of quantum mechanics and digital art. These pieces come together in a way that is visually striking, especially considering the complexity and randomness of the generated images that are overlayed.

Markos Kay’s body of work is composed of mostly video art which differs from this series of stills. While the stills are all pulled from video simulations, the intricacies of the particle interactions and the complicated quantum mechanics are better represented in the superimposed images that the artist has created.

Interdeterminancy 1

Link to the artist’s website: https://www.mrkism.com/superpositions.html

l.o. 02: generative art

‘variations on a definition’ by poet and programmer allison parrish is a series of poems that were produced by breaking words down into numbers that correspond to their constituent sounds using a stats-based model of the english language. the program then automatically mixes and recombines these numbers to blur and corrupt the original phonetic features of the words used in the poems.

I admire how this project makes use of algorithmically-defined representation to highlight the malleability of language over space and time, especially in the context of the social internet and postmodern poetics. it’s a precise and elegant way to confuse language, which falls in line with parrish’s research on contemporary use of language at NYU.

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);
}

LookingOutwards-03

Learning Human-environment Interactions using Conformal Tactile Textiles details Sense Textiles, a project in 2021 constructed by Yiyue Luo, Yunzhu Li, Pratyusha Sharma, Wan Shou, Kui Wu, Michael Foshey, Beichen Li, Tomás Palacios, Antonio Torralba, and Wojciech Matusik. It was quite fascinating to see how a need in the medical and scientific field could prompt the creation of something that mimicked and monitored human-environment interactions. In addition, it was also quite fascinating to see how these results could be used to apply to human behavior and predicting almost psychologically-related fields. To the best of my knowledge, the algorithm that comprised it utilized artificial intelligence to identify human poses and different interactions with its environment through sensory textiles. The creators, albeit focusing on the more technical aspects of the textile, did have the sense to make it so that the textile looked somewhat aesthetically pleasing. The form was nice, the graphics demonstrated with clarity what the effects of the sense textile accomplished.

More on the project here

Shown above, here is a sample of the textiles and their visualized impacts

LookingOutwards-03 Section D

Creator’s name: Sanchtv
Title of work: Foldable Fractal 2.0
Year of creation: 2009

This project by Sanchtv is titled Foldable Fractal 2.0. It is made up of laser-cut pentagons that appear to be folded together to create a “pentagonal dodecahedron”. I admire the repetition of the pattern that moves inwards and continues to decrease in size. This piece reminds me of the drawings of an individual painting a picture of themself, painting a picture of themself and so on, making it appear as though it repeats for infinity. These types of visuals are capable of grabbing the attention of the viewer in a quick and unique manner. The description mentions that this was created through a recursive algorithm. After some research, I learned that it is an algorithm that calls itself using a smaller input to return the result for the current input. From that base definition, I suppose such an algorithm is the cause for the repetition in the design. While I do not know much about the creator, it is apparent that this object was created in a very intentional and methodical manner that utilized an algorithm to create three-dimensional art.

This is a computational digital fabrication developed with a recursive algorithm by creator Sanchtv.

Foldable Fractal 2.0 | foldable fractal is a project origina… | Flickr