Sean Leo – Looking Outwards 3

Fosters+Partners
Fosters+Partners

In looking up computational fabrication, I came across a lot of examples in architecture that features heavy parametric modeling. Without the aid of computers, certain shapes would be next to impossible to produce especially when all the requirements of architectural engineering need to be up held. Below is an example from Fosters+Partners for the new Mexcio City International Airport.

Curving structures and complex geometries create the exoskeleton for the airport and were modeled using digital methods.

Fosters+Partners

Sean Leo-Looking Outwards-02

404.Zero

An artistic duo from St. Petersburg, Russia, 404.Zero create A/V performances that use custom-built synthesizers and generative graphics. Their work is performed live, and being generative in nature have the ability to mutate, grow, and react in realtime in the environment that they are performing in.

It’s of no surprise then that much of their visual work, while being 100% digitally generated, has an organic quality to it. Transforming textures and shapes elicit waves and other natural phenomenon. These visuals work in tandem with generative audio that drones. Utilizing tonal shifts and adjusting the parameters of their set-up they are exploring the liminal space that lies between states by creating a constant (and sometimes looping) flow.

Sean Leo-Project 02-Variable Faces

sketch

//Sean B. Leo
//sleo@andrew.cmu.edu
//Section C
//Project_02

var eyeSize = 20;
var pupil = 10;
var faceWidth = 100;
var faceHeight = 150;
var red = ("red");
var green = ("green");
var blue = ("blue");
var r1 = 255;
var g1 = 255;
var b1 = 255;
var r2 = 255;
var g2 = 255;
var b2 = 255;
var A = 20;
var B = 40;
var C = 1;

function setup() {
    createCanvas(600, 500);
}
 
function draw() {
  background(red, green, blue);
  let c = color(255, 255, 255);
  
   //body
  fill(r2, g2, b2);
  ellipse(width/2, height/2 + faceHeight, faceWidth + (faceWidth/2), faceHeight + (faceHeight/2));
  //ellipse((width / 2) + faceWidth, (height / 2) + faceHieght, faceWidth * 2, faceHeight * 2);
  
  //head  
  fill(r1, g1, b1),
  ellipse(width / 2, height / 2, faceWidth,  faceHeight);


  //eyes  
  fill(255);
  var eyeHeightLX = (height/2);
  var eyeHeightRX = (height/2);
  var eyeLX = width / 2 - faceWidth * 0.25;
  var eyeRX = width / 2 + faceWidth * 0.25;
    ellipse(eyeLX, height / 2, eyeSize, eyeSize);
    ellipse(eyeRX, height / 2, eyeSize, eyeSize);
  
  //pupils
  fill(0);
    ellipse(eyeLX, eyeHeightLX, pupil, pupil);
    ellipse(eyeRX, eyeHeightRX, pupil, pupil);
  
  //eyebrows
  {strokeWeight(3);
   var eyeBrowLH1 = eyeHeightLX-pupil*2;
   var eyeBrowLH2 = eyeHeightLX-pupil*C;
   var eyeBrowRH1 = eyeHeightRX-pupil*C;
   var eyeBrowRH2 = eyeHeightRX-pupil*2;
  line(eyeLX-pupil, eyeBrowLH1, eyeLX+pupil, eyeBrowLH2);
  line(eyeRX-pupil, eyeBrowRH1, eyeRX+pupil, eyeBrowRH2);
  }
  //mouth
  fill(0);
  var mouthHeight=height/2 + faceHeight *.30;
  ellipse(width/2, mouthHeight, B, 20);
  
  //nose
  fill(r1, g1, b1);
  arc(width/2, height/2 + faceHeight*.09, A, A, C, PI + QUARTER_PI, OPEN);
  
  
}
 
function mousePressed() {
  red = random(0,255);
  green = random(0, 255);
  blue = random(0, 255);
  r1 = random(20, 255);
  g1 = random(20, 255);
  b1 = random(20, 255);
  r2 = random(0, 255);
  g2 = random(0, 255);
  b2 = random(0, 255);
  A = random(1,30);
  B = random(1,40);
  C = random(1,3);
  faceWidth = random(75, 250);
  faceHeight = random(75, 250);
  eyeSize = random(10, 30);
  pupil = random(7, 12);
}

A big part of figuring out this project was trying to wrap my head around what was spatially dependent on what. It was easier to think of things modularly; if the eyebrow is linked to the eye and if the eye is linked to the head, if the head changes everything else will follow.

Sean Leo – Project_01

sleo-selfportrait

/*Sean B. Leo
Section C
sleo@andrew.cmu.edu
Project_01*/
function setup() {
    createCanvas(600, 600);
  }
  function draw() {
    background(225);
    noStroke();
    //skin
    fill(222, 197, 165);
    rect(200, 150, 200, 300);
    quad(200, 150, 200, 450, 178, 400, 150, 200);
    quad(400, 150, 450, 200, 415, 440, 400, 400);
    //hair
    fill(83, 47, 22);
    quad(150, 150, 350, 100, 450, 150, 350, 175);
    rect(150, 210, 10, 80);
    rect(440, 210, 10, 80);
    triangle(200, 150, 150, 250, 130, 175);
    triangle(400, 150, 470, 170, 450, 250);
    //beard
    quad(150, 249, 200, 375, 250, 470, 160, 430);
    quad(450, 249, 440, 430, 350, 470, 400, 375);
    quad(200, 400, 270, 450, 270, 500, 200, 460);
    quad(400, 400, 400, 460, 320, 500, 320, 450);
    rect(270, 450, 50, 50); 
    //musatche
    quad(200, 420, 270, 390, 280, 395, 300, 405);  
    quad(320, 390, 330, 395, 400, 420, 300, 405); 
   
    
  }

Thinking about drawing through coordinates was challenging as well as getting used to the grid orientation. I believe it’ll just take some getting used too and practice.

*not sure why my height is getting cropped off…

Sean Leo – Looking Outwards – 01

4/20/18 Algorave at PS122, Codie Live Code

An Algorave is a niche subset of the live club scene. It’s the portmanteau of Algorithms and Raves, where the music and visuals are generated by code. Rather than mixing sounds or performing instruments, everything is created in real-time and improvised by changing the code live. Normally a VJ would mix and composite collected media elements, whereas a Live Coder would create and generate their own visuals and effects through the code they are writing.

Often coding is thought of a as a published medium. It is written, drafted, edited, and then finalized. Updates are scheduled and versioned. Algoraves directly contrast that. By performing live, the code is always changing, and has the opportunity to be influenced by the crowd and the music in the room.