Erin Lim – Looking Outwards 03 –

Anoma is a product design studio headed by Ruchika Grover to produce artwork made of natural stone, using a combination of digital manufacturing and traditional hand craftmanship.

What I admire about Grover’s work is that she incorporates natural textures and shapes of nature itself into her work. She first draws a 2-D illustration on paper, and then uses computer-aided modeling for precise measurements and adding intricate details. This is where she modifies the measurements before she develops the prototype.

A 3-D mapped prototype of Anoma that resembles a leaf’s veins

Then, prototypes are developed for about 4-6 months with dimensions translated into manufacturing directives and into a Computer Numerical Controlled (CNC) milling machine. A cylindrical tool then cuts and drills based on computer directions, with recycled water circulated in order to regulate the temperature of the cutting tool and base stone so that the rapid tool doesn’t wear and there’s no thermal expansion of the stone.

Another prototype of Grover’s studio 3-D mapped of natural forms

Finally, artisans carve detailed textures into the stone which adds a human touch to the digitally-fabricated artwork.

To the viewers, you could clearly see Grover’s background and interest in botanics as her inspiration for her artwork. The shapes and intricate details of each work resembles some shape or texture to those of nature. It is fascinating to see an artist create a work of nature generated by computer.

Link to Grover’s work: https://www.archdaily.com/898786/digital-design-and-indian-craft-merge-to-generate-these-beautiful-cladding-patterns

Erin Lim (Revised) – Project 02 – Variable – Face

Erin Lim – Project 02

var eyeSize = 30;
var faceWidth = 260;
var faceHeight = 320;
var noseX = 275;
var noseY = 270;
var noseSize = 15;
var faceX = 300;
var faceY = 265;
var eyecolor = 255;
var pupilcolor = 0;
var lefteyeX = 250;
var eyeY = 200;
var righteyeX = 350;
var leftpupilX = 250;
var rightpupilX = 350;
var pupilY = 200;
var pupilWidth = 10;
var pupilHeight = 10;
var browHeight = 160;
var leftbrowX = 220;
var rightbrowX = 330;
var browY = 160;
var leftbrowWidth = 270;
var rightbrowWidth = 380;
var earHeight = 45;
var earY = 250;
var leftearX = 150;
var rightearX = 450;
var mouthX = 300;
var mouthY = 350;
var mouthSize = 45;
var r = 255;
var g = 241;
var b = 209;

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

function draw() {
  background(227, 103, 84);
  noStroke(0);

    fill(255, 241, 209); //face
    ellipse(faceX, faceY, faceWidth, faceHeight);

    fill(eyecolor, eyecolor, eyecolor); //left eye
    ellipse(lefteyeX, eyeY, eyeSize, eyeSize);

    fill(eyecolor, eyecolor, eyecolor); //right eye
    ellipse(righteyeX, eyeY, eyeSize, eyeSize);

    fill(pupilcolor, pupilcolor, pupilcolor); //right pupil
    ellipse(rightpupilX, pupilY, pupilWidth, pupilHeight);
    if (mouseX < width*0.33) {
        fill(255, 0, 0);
      } else if (mouseX > width*0.66) {
        fill(0, 255, 0);
      } else {
        fill(0, 0, 255);
      }

    fill(pupilcolor, pupilcolor, pupilcolor); //left pupil
    ellipse(leftpupilX, pupilY, pupilWidth, pupilHeight);
    if (mouseX < width*0.33) {
        fill(255, 0, 0);
      } else if (mouseX > width*0.66) {
        fill(0, 255, 0);
      } else {
        fill(0, 0, 255);
      }

    circle(mouthX, mouthY, mouthSize); // mouth


    stroke(0, 0, 0); // left eyebrow
    line(leftbrowX, browY, leftbrowWidth, browHeight);

    stroke(0, 0, 0); // right eyebrow
    line(rightbrowX, browY, rightbrowWidth, browHeight);

    fill(255, 241, 209); // left ear
    circle(leftearX, earY, earHeight);

    fill(255, 241, 209); // right ear
    circle(rightearX, earY, earHeight);

    fill(0);  // nose
    ellipse(275, 270, noseSize, noseSize);
    ellipse(275 + 20, noseY, noseSize, noseSize);
}

function mousePressed() {

  faceWidth = random(260, 300);
  faceHeight = random(320, 400);
  eyeSize = random(10, 50);
  noseX = random(275, 300);
  noseY = random(270, 300);
  leftbrowWidth = random(270, 300);
  rightbrowWidth = random(380, 400);
}

In my process of making this face, I learned a lot about using variables to code. I also experimented a lot with “else” and “if” to produce what I want to happen.

Erin Lim – Project 02 – Variable Face

In my process of making this face, I learned a lot about using variables to code. I also experimented a lot with “else” and “if” to produce what I want to happen.

Erin Lim – Project 02

var eyeSize = 30;
var faceWidth = 260;
var faceHeight = 320;
var noseX = 275;
var noseY = 270;
var noseSize = 15;
var faceX = 300;
var faceY = 265;
var eyecolor = 255;
var pupilcolor = 0;
var lefteyeX = 250;
var eyeY = 200;
var righteyeX = 350;
var leftpupilX = 250;
var rightpupilX = 350;
var pupilY = 200;
var pupilWidth = 10;
var pupilHeight = 10;
var browHeight = 160;
var leftbrowX = 220;
var rightbrowX = 330;
var browY = 160;
var leftbrowWidth = 270;
var rightbrowWidth = 380;
var earHeight = 45;
var earY = 250;
var leftearX = 150;
var rightearX = 450;
var mouthX = 300;
var mouthY = 350;
var mouthSize = 45;
var r = 255;
var g = 241;
var b = 209;

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

function draw() {
  background(227, 103, 84);
  noStroke(0);

    fill(255, 241, 209); //face Q: HOW DO I USE VARIABLES FOR THIS?
    ellipse(faceX, faceY, faceWidth, faceHeight);

    fill(eyecolor, eyecolor, eyecolor); //left eye
    ellipse(lefteyeX, eyeY, eyeSize, eyeSize);

    fill(eyecolor, eyecolor, eyecolor); //right eye
    ellipse(righteyeX, eyeY, eyeSize, eyeSize);

    fill(pupilcolor, pupilcolor, pupilcolor); //right pupil
    ellipse(rightpupilX, pupilY, pupilWidth, pupilHeight);
    if (mouseX < width*0.33) { // HOW DO I CHANGE FACE COLOR?
        fill(255, 0, 0);
      } else if (mouseX > width*0.66) {
        fill(0, 255, 0);
      } else {
        fill(0, 0, 255);
      }

    fill(pupilcolor, pupilcolor, pupilcolor); //left pupil
    ellipse(leftpupilX, pupilY, pupilWidth, pupilHeight);
    if (mouseX < width*0.33) { // HOW DO I CHANGE FACE COLOR?
        fill(255, 0, 0);
      } else if (mouseX > width*0.66) {
        fill(0, 255, 0);
      } else {
        fill(0, 0, 255);
      }

    circle(mouthX, mouthY, mouthSize); // mouth


    stroke(0, 0, 0); // left eyebrow
    line(220, 160, 270, 160);

    stroke(0, 0, 0); // right eyebrow
    line(330, 160, 380, 160);

    fill(255, 241, 209); // left ear
    circle(150, 250, 45);

    fill(255, 241, 209); // right ear
    circle(450, 250, 45);

    fill(0);  // nose
    ellipse(275, 270, 15, 15);
    ellipse(275 + 20, 270, 15, 15);
}

function mousePressed() {

  faceWidth = random(260, 300);
  faceHeight = random(320, 400);
  eyeSize = random(10, 50);
  noseX = random(275, 300);
  noseY = random(270, 300);
  leftbrowWidth = random(270, 300);
  rightbrowWidth = random(380, 400);
}

Erin Lim – Looking Outwards – 02

I was inspired by Manolo Gamboa Naon who is a generative artist from Argentina. What I admire from his work is that it appears to be a work of the 20th century, even though it was all generated by code. Manolo defies the common misconception of digital art as cold and mechanical, with his vibrant pieces and extensive attention to color coordination.

mantel – Manolo Gamboa Naon, 2018

MMGGK2 – Manolo Gamboa Naon, 2018

He pieces each geometric figure into algorithms and code to produce his art. Manolo uses Processing. Manolo’s appreciation for geometry in his work is evident in his code, centered as his main focus alongside color.  He states he is not very interested in AI or deep learning, as he is content with generative art and geometric figures. I admire how we sees failures in code as beautiful mistakes in his art. It is evident that Manolo is not concerned over accuracy, but rather the coordination of shapes and color. 

Manolo’s work: https://www.behance.net/manoloide 

Erin Lim – Looking Outwards- 01 Section D


Video documentary of Magic Leap’s AR video game Dr. Grordbort’s Invaders. Source: Next Reality: Hands-On with Magic Leap & Weta Workshop’s Dr. Grordbort’s Invaders by Adario Strange

This is a fascinating project developed by New Zealand studio Weta Workshop and partnered by Magic Leap.  It was actually a WIP for nearly a decade, when Magic Leap CEO Rony Abovitz met with Weta Workshop’s CEO Richard Taylor to introduce and develop this video game.  In this game, users experience an AR gaming experience using Magic Leap technology in their surroundings.

To start, users use Magic Leap One to map out their surrounding walls, floors, and furniture.  A spatial audio guides them to map out the room and not to let too much light in, or else the mapping will pause. The Control device acts as a weapon, and the author of this article reported the tracking was accurate 85% of the time.

One cool feature is how you can use your hand not holding a device as a shield, and may even feel a tingle.  The game tracks your hand and allows you to use your physical hand in the AR game.  This is particularly interesting because it points to a future that holds the intertwining of physical human touch with AR. This can especially be seen in the workplace, home, and public space/services. Another feature I admire is the crispness and vividness of the designs.  The main character, Dr. Grordbort, is seen translucent, while the rest of the bots are perfectly vivid.  This is fascinating how designers/programmers can create the difference in texture and precision in these AR figures.

Erin Lim – Project 01 – Face


eylim – portrait

/*Erin Lim
*Section A
*eylim@andrew.cmu.edu
*Assignment 01-Self Portrait
*/

function setup() {
    createCanvas(900, 800);
    background(227, 209, 200);

    fill(255, 241, 209); //face
    ellipse(500, 495, 460, 450)

    fill(255, 255, 255); //left eye
    ellipse(380, 470, 40, 40);

    fill(255, 255, 255); //right eye
    ellipse(580, 470, 40, 40)

    fill(3, 3, 3) //right pupil
    ellipse(580, 468, 30, 30)

    fill(3, 3, 3) //left pupil
    ellipse(380, 468, 30, 30)

    fill(255, 255, 255) // mouth
    triangle(450, 600, 550, 650, 560, 600)

    stroke(255, 202, 0); // left hair
    fill(0, 0, 0)
    curve(560, 1800, 250, 550, 560, 270, 1100, 600)

    stroke(255, 202, 0); // right hair
    fill(0, 0, 0)
    curve(350, 650, 750, 550, 550, 270, 20, 500)

    fill(5, 5, 5) // left eyebrow
    line(300, 430, 420, 430)

    fill(5, 5, 5) // right eyebrow
    line(550, 430, 670, 430)

    fill(255, 241, 209) // left ear
    circle(250, 500, 45)

    fill(255, 241, 209) // right ear
    circle(750, 500, 45)

function draw() {
    }
}