Jonathan Perez Project 5

sketch

//Jonathan Perez
//Section B
//jdperez@andrew.cmu.edu
//Assignment-01
function setup() {
    createCanvas(480, 480);
    pixelDensity(3.0);
}

function draw() {
    background(51, 116, 173); //pale blue
    drawGrid(); //diagonal grid of black and white lines
    for(x = 120; x < width + 240; x += 240) { //spacing to fit within gridwork givin
        for(y = 0; y < height + 120; y += 120) {
        push();
            if((y+120)%240 == 0 ) {
                translate(-120, 0); //acounts for the alternating horizontal positions among rows
            }
        drawTile(x, y); // draws image in tile with givin x, y coordinates as center
        rectMode(CENTER);
        noStroke();
        rect(x-120, y, 20, 20); //black blocks between tiles
        pop();
        }
    }
    noLoop();
    
    
}

function drawGrid() {
    for(x = 0; x < width + 480; x+= 120) { //lines spaced 120 pixels apart horizontally
        if(x%240 == 0 || x == 0) {
            stroke(0); //black lines every other line
            } else {
            stroke(220); //whitish grey lines otherwise
            }
        line(x, 0, x-480, height); //positive 45 degree slope lines
        line(x-480, 0, x, height); //negative 45 degree slope lines
    }
}

function drawTile(x, y) {
    push();
    translate(x, y); //move center of tile
    fill(255);
    stroke(0);
    strokeWeight(1);
    for(j = 0; j < 4; j++){ //rotates long diamonds 90 degrees 4 times
        push();
        rotate(j*PI/2);
        fill(230);
        quad(-100, 0, -50, -12, 15, 0, -50, 12); //long horizontal diamond shape
        stroke(0);
        strokeWeight(1);
        line(-70, 0, -40, 0); //line detail on horizontal diamond
        pop();
    }


    strokeWeight(1.5);
    rectMode(CENTER);
    fill(179, 91, 141); //darker lilac purple
    rect(0, 0, 65, 65); //underlying square
    fill(175, 162, 208); // light lilac
    for(i = 0; i < 4; i++) {
        push();
        rotate(i*PI/2);
        translate(-25, 0);
        quad(-25, 0, 0, -20, 20, 0, 0, 20); //lefthand diamond
        pop();
    }
    // push();
    // translate(-25, 0);
    // quad(-25, 0, 0, -20, 20, 0, 0, 20); //lefthand diamond
    // pop();
    // push();
    // translate(25, 0);
    // quad(-20, 0, 0, -20, 25, 0, 0, 20); //righthand diamond
    // pop();
    // push();
    // translate(0, 25);
    // quad(-20, 0, 0, -20, 20, 0, 0, 25); //lower central diamond
    // pop();
    // push();
    // translate(0, -25);
    // quad(-20, 0, 0, -25, 20, 0, 0, 20); // upper central diamond
    // pop();
    fill(255, 220, 80); //pollen yellow
    quad(-25, 0, 0, -25, 25, 0, 0, 25); //central diamond
    pop();
    
}

The original inspiration for this paper was the old victorian floral wallpaper style… I tried to work in an organic subject and organic style with distinctly computer generated graphics (using geometric, sharp lines).

My first sketches were playing with overlapping diamond shapes, and feeling out what could be feasible to accomplish with my code.

As I started trying to implement these sketches and concepts into practice, I had to cut out some details I originally wanted to be a part of the wallpaper. The canvas I was working with was a 480×480 block, not a wall, and quickly became cluttered. So, my artistic direction for the project quickly adapted to a simpler aesthetic.

To be honest, the bulk of the work in this project for me was deciding what details to keep, and what to get rid of… I think I was moderately successful. I think this is a project I will return to, and see if I can keep it from being cluttered, but still improve the aesthetics of it. Currently, I think the color scheme and horizontal vs. diagonal lines are what carry the appeal of this wallpaper.

SaveSaveSaveSave

Jonathan Perez Looking Outwards 5

Chaotic Atmospheres’ “Crystallized Asteroids”

Chaotic Atmospheres is an artist dedicated to creating surreal landscapes and environments. This project in particular was created using e-on Vue 8 along with procedural landscapes, allowing for the creation of unlimited, unique asteroids.

To me, the texture of the images is what strikes me first. If you look at a few of the asteroids under the project page (a link will be provided below), each texture slightly varies from the other, and in combination with exposure/shadows, works to create an extremely strong mood. Each asteroid has a focus and direction. It’s amazing how an artist can render a landscape procedurally, that stands its ground as the main focus, not just a cool environment.

In some ways, I wonder if the procedural aspect of these asteroids lead to a more organic aesthetic. Nature is quite random and chaotic, after all, and as hard as we try, it might be hard to entirely emulate that chaos. That is certainly something to think about in future projects attempting to capture something organic.

In addition, something I took away from this project was the lighting and exposure… Like a photographer setting up a portrait, Chaotic Atmospheres sets up the lighting and exposure to give the image a certain mood. At first glance, all I thought about was the details of the asteroid… but I quickly realized that what actually drew me to these asteroids was the well executed lighting. In the future, I will keep that in mind for my images… especially in regards to procedural lighting and exposure. Or perhaps the generated portion of the project should be procedural, and the lighting and exposure can be where the individuals artistic sensibilities comes in.

Here’s a link to his portfolio on Behance:

https://www.behance.net/gallery/3418025/Crystallized-Asteroids

SaveSave

Jonathan Perez Looking Outwards 4

 

Yuri Suzuki’s Sonic Pendulum

Earlier this year, Yuri Suzuki collaborated with QOSMO — one of the worlds leading AI experts — to create a “Sonic Pendulum”. This installation generates a calming soundscape that is continuously generated by the AI system in response to its surroundings.

The actual installation itself is comprised of three swing-set-like rigs, with a series of speakers hanging as pendulums. These pendulums swing back in forth in different, organic patterns that are regulated by the central algorithm. In this way, not only is the installation aural, but visual. Viewers experience the sound as an observable motion in space, and furthermore, as a physical feeling in their bodies. The swinging motion generates a doppler effect, changing the pitch of the perceived sound, and thus oscillating the resonation in the viewers body.

The central algorithm controls all the aspects of this system, creating a unique interaction, a conversation, with the viewers. A number of cameras and microphones are set up to register the sound level and population of the viewers. The central algorithm takes in this input and adjusts the oscillation pattern of the pendulums as well as the music being generated to match and respond to the environment.

I admire this projects interdisciplinary and inter-sensory nature. Yuri Suzuki seamlessly bridges music composition, design, and AI computer science in a way so that each informs the other. As a result the viewer can receive a much fuller experience… a much more impactful one, too. Suzuki intended this project to calm and relax its viewers, and he could not have achieved that goal to the same degree without the implementation of visual with audio, and the audio with physical sensation, all of which are conducted by the AI.

One last note about this project. I really admire Suzuki’s intent for the Sonic Pendulums to create a mindful space. I would like to see more and more of this kind of art in the future, using human advancements to further mental health.

For more information, and a cool demonstration of the project, here’s a link.

https://vimeo.com/214206048

SaveSave

SaveSave

Jonathan Perez Project 4

sketch

//Jonathan Perez
//Section B
//jdperez@andrew.cmu.edu
//Project-4

function setup() {
    createCanvas(400, 300);
    background(0);
    pixelDensity(5.0);
    noStroke();
    colorMode(HSB, 360, 100, 100);
}

function draw() {
    background(0);
    noStroke();
    var x1;
    var x2;
    var y1;
    var y2;
    var r = 90; //radius of iris
    var eyeBright; //variable used to fade iris background to black
    for (var i = 0; i < 100; i++) { //iris faded background
        eyeBright = i;
        fill(213, 20, eyeBright);
        ellipse(width/2, height/2, 2.5*r - i*2.5*r/100, 2.5*r - i*2.5*r/100);
    }

    //blue iris coloring
    translate(width/2, height/2);
    for (var i = 0; i < 4; i++) { //for loop to create four foci by which to fill in the iris
        push();
        angleMode(RADIANS);
        rotate(i*PI/2); //rotates 90 degrees between foci
        for (var j = -14; j < 15; j++) { //21 strings from each foci are used to fill in circle
            if(j == -1 || j == -2 || j == 1 || j ==2 || j == -14 || j == -13 || j == 13 || j == 14) {
              continue; //skip center lines for both star visual effect, and to
                        //concentrate blue color to the outside of the iris
            }
            angleMode(DEGREES);
            x1 = -r;
            y1 = sqrt(sq(r)-sq(x1)); //uses equation for a circle to calculate y coordinate
            x2 = r*cos(12*j); //makes and end point every 12 degrees
            y2 = r*sin(12*j);
            stroke(199, 46, 80); //blue
            strokeWeight(1);
            line(x1, y1, x2, y2);
        }
        pop();
    }
    
    //green center iris
    var r2 = 5*r/12;
    for (var i = 0; i < 4; i++) { //for loop to create for foci by which to fill in the circle
        push();
        angleMode(RADIANS);
        rotate(i*PI/2); //rotates 90 degrees between foci
        for (var j = -12; j < 13; j++) { //21 strings from each foci are used to fill in circle
            if(j == -1 || j == -2 || j == 1 || j ==2) {
              continue;
            }
            x1 = -r/2;
            y1 = sqrt(sq(r/2)-sq(x1)); //uses r/2 to create a star shape
            angleMode(DEGREES);
            x2 = r2*cos(15*j); //makes and end point every 15 degrees
            y2 = r2*sin(15*j);
            stroke(77, 93, 48);//pale yellow/green
            strokeWeight(.5);
            line(x1, y1, x2, y2);
        }
        pop();
    }
    fill(0);
    ellipse(0, 0, r/2, r/2); //pupil
    fill(100); 
    ellipse(r/7, -r/8, r/9, r/9); //pupil light reflection

    //outside iris
    for (var i = 0; i < 30; i++) { //upper right accent
        x1 = i*(r+r/4)/29
        y1 = -r - r/4
        x2 = r+ r/4
        y2 = -r - r/4 + i*(r)/29
        stroke(80);
        line(x1, y1, x2, y2);
    }
    for (var i = 0; i < 30; i++) { // lower left accent
        x1 = -i*(r+r/4)/29
        y1 = r + r/4
        x2 = -r - r/4
        y2 = r + r/4 - i*(r)/29
        stroke(80);
        line(x1, y1, x2, y2);
    }
 

    //eyelid
    translate(-width/2, -height/2)
    for (var j = 0; j < 45; j++) { //fills in quarter circle with 45 lines
        x1 = 0
        y1 = height - j*height/45
        x2 = j * width/45
        y2 = 0
        stroke(100 + j*4, 60, 77); //slowly changes color from green to purple from left to right
        line(x1, y1, x2, y2);
    }
    for (var j = 0; j < 45; j++) { //fills in quarter circle with 45 lines
        x1 = width
        y1 = height - j*height/45
        x2 = j * width/45
        y2 = height
        stroke(100 + j*4, 60, 77); //slowly changes color from green to purple from left to right
        line(x1,y1,x2,y2);
    }

}

This project was pretty difficult for me to wrap my head around at first… I had never done any sort of string art before, nor could I quite get the feel for it. So, the way I started this project was pretty much playing around with the string art form: trying to make different shapes, and seeing what different loops I could use to accomplish drawing efficiently.

Somewhere along the lines, I ended up deciding on an eye as the theme for my drawing. Once I got going, I discovered some of the advantages of using string art, mainly, its ability to create compositional lines. After deciding on the shapes and composition, the next thing was the color and negative space. Negative space was definitely something that I realized later on was a very important part of the string drawing. Originally, all of the space was filled with strings, and the drawing became quickly cluttered. I had to decide on what to remove, and where perhaps I should use less strings to render the shapes.

As for the finished product, I enjoy how the strings led to a reptilian aesthetic. The spaces between the lines give the image texture and curvature that would be hard to do otherwise. The iris of the lizard’s eye plays off the geometric qualities of drawing with string art, creating different polygons with the lines and shapes where lines are removed.

Jonathan Perez Looking Outwards 3

Rocailles – Benjamin Dillenburger

This project, Rocailles, done by Benjamin Dillenburger, struck me for its illusion of almost fabric-like texture. The way the material folds and falls reminds me of an afghan bunched up, perhaps hanging from some sort of wire or string. At the same time, though, it also gives the sense of a hard, shell like texture, through its sharp lines and crystalline weaving. These textures are at a sharp contrast to one another, and thus give an interesting affect to the viewer.

The number of folds, as well as depth in relation to the viewer, give this piece quite a bit of emotional impact — casting powerful shadows and fading in towards the center. Paired with the folds and the sense of gravity they give the piece, it feels like you are being pulled towards the center darkness. This sort of material affect would be hard to accomplish by any other means.

I think the Dillenburger used an algorithm to create a sort of “stitching”, that look like N’s aligned in rows lined by one long piece of elastic material. Then, by using a great number of parameters, he probably slightly shifted on of the lines in the N, or the angle between them, to pull and push the entire sculpture into its desired shape.

To look at more close up images of Rocailles, check out this page: http://benjamin-dillenburger.com/rocaille/

SaveSave

Jonathan Perez Project 3

sketch



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

function draw() {
    background(255);
    fill(255);
    stroke(0);
    ellipse(width/2, height/2, 50, 50); //outer center ring

    translate(width/2, height/2);
    for (var i = 0; i < 8; i++) { //ring of 8 diamonds

        //first ring
        push();
        var mouseDist = dist(mouseX, mouseY, width/2, height/2); //mouse distance from center
        var bright = 225 - 225 * mouseDist * 1/230; //alters shade from 0 to 225 of the diamonds to be darker as they approach center
        var scaleAmount = 1.75 - 1.75 * mouseDist * 1/230; //scales diamonds from 0 to 1.75 to be larger as they move outwards
        if (mouseX > 240) {
            rotate(-acos((mouseY - height/2)/mouseDist)/2 + TWO_PI * i/8); //sets angular distance between diamonds, and rotates proportional to mouse angle
        }
        else {
            rotate(acos((mouseY - height/2)/mouseDist)/2 + TWO_PI * i/8); //accounts for the face that arccos switches direction at PI/2 and 3PI/2
        }
        if (mouseDist < 230) { //expands and contracts diamonds until just before edge of canvas
           translate(100 - 100 * mouseDist * 1/230, 0); //diamonds move towards center as mouse moves away proportional to original translation
       }
        fill(bright);
        if (mouseDist < 230) { //if statement used so that scaling does not increase after value reaches zero
            scale(scaleAmount);
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //center circle
        }
        pop()
        //simplified comments will be used for further iterations of the ring of diamonds, refer to first ring for more info
        //second ring of diamonds
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(acos((mouseY - height/2)/mouseDist)/4 + TWO_PI * i/8 + PI/8);
        }
        else {
            rotate(-acos((mouseY - height/2)/mouseDist)/4 + TWO_PI * i/8 + PI/8);
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(155 - 155 * mouseDist * 1/230, 0);
       }
        fill(bright + 40); //shading related to distance from center/mouse
        if (mouseDist < 230) {
            scale(scaleAmount - .1); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop();

        //first half of third ring of diamonds 
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/16); 
        }
        else {
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/16); 
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(210 - 210 * mouseDist * 1/230, 0); 
       }
        fill(bright + 80); //shading related to distance from center/mouse
        if (mouseDist < 230) { 
            scale(scaleAmount - .2); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop();

        //second half of third ring of diamonds 
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 3*PI/16);
        }
        else {
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 3*PI/16); 
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(265 - 265 * mouseDist * 1/230, 0); 
       }
        fill(bright + 80); //shading related to distance from center/mouse
        if (mouseDist < 230) { 
            scale(scaleAmount - .2); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop();

        //fourth ring first part
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/16);
        }
        else {
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/16);
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(320 - 320 * mouseDist * 1/230, 0); 
       }
        fill(bright + 110); //shading related to distance from center/mouse
        if (mouseDist < 230) { 
            scale(scaleAmount - .25); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop()

         //fourth ring second part
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 3*PI/16); 
        }
        else {
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 3*PI/16);
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(320 - 320 * mouseDist * 1/230, 0);
        }
        fill(bright + 110); //shading related to distance from center/mouse
        if (mouseDist < 230) {
            scale(scaleAmount - .25); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop()

        //fifth ring first part
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/8);
        }
        else {
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + PI/8);
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(375 - 375 * mouseDist * 1/230, 0);
        }
        fill(bright + 120); //shading related to distance from center/mouse
        if (mouseDist < 230) {
            scale(scaleAmount - .3); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop()

        //fifth ring second part
        push();
        if (mouseX > 240) { //rotation related to mouse
            rotate(-acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 4*PI/16);
        }
        else {
            rotate(acos((mouseY - height/2)/mouseDist)/8 + TWO_PI * i/8 + 4*PI/16);
        }
        if (mouseDist < 230) { //distance from center related to mouse
           translate(375 - 375 * mouseDist * 1/230, 0);
        }
        fill(bright + 120); //shading related to distance from center/mouse
        if (mouseDist < 230) {
            scale(scaleAmount - .3); //scaling of diamond related to distance from center
            quad(0, 10, -45, 0, 0, -10, 45, 0); //diamond
        } else {
            fill(0);
            ellipse(0,0,40,40); //black center
        }
        pop()

    }
    fill(0);
    ellipse(0,0,40,40); //black circle over diamonds

}

I honestly had no idea what I was going to do with this project. Given that, the creative process was pretty interesting. Honestly, the only thing I was going off of to begin with was that I wanted the diamond shape to be a central theme of the drawing. After that, the rest of the ideas sort of haphazardly tumbled together. The diamond shape led me to a sort of stylized star/space concept, so then I knew I wanted to work with concentric circles rotating alternately. Once I started drawing those, the way the circles condensed into a tight, compact star shape made me think of a supernova. So after that, I intentionally themed the drawing around a sort of explosive, supernova idea.

Although I had the theme all figured out, achieving that idea turned out to be pretty difficult. I had no idea how I was going to get the different rows of diamonds to rotate in regards to the mouses angle to the center of the canvas, not to mention to get them to rotate at different rates related the the mouses angle. The math was pretty tricky, but also I feel like that gives the code a sense of beauty. This was definitely the first thing that I have coded that I felt the code should be seen as well as the product. The code is just as much art.

If I had more time (and I might just go back and do this on my own time) I want to develop the background more. Give it a sense of depth, like a star in space.

Jonathan Perez Looking Outwards 2

Sands of Changes, Jean Pierre Hebert, 2005

This week, I came across a generative piece called Sands of Changes by Jean Pierre Hebert. At first glance, I was a bit confused: how could this be a generative piece done by a program? The piece is done with real sand, actually using a computerized metal ball to roll on top of the sand to create minuscule lines.

sands

Hebert here emulates the Zen garden style, giving the piece a very calming and centering aesthetic. I truly admire the way in which Hebert uses a material so susceptible to the forces of nature and chance with something as exact and calculated as an algorithm. It almost seems to me that to get the full artistic value of this piece, one would have to watch the metal ball etch out the entire thing, witnessing the interaction of these two disparate elements.

Jonathan Perez Project 2

sketch

var faceWidth = 250
var faceHeight = 300
var cheekWidth = 13*faceWidth/12
var smile = 10
var smileWidth = 7*faceWidth/12
var smileHeight = 2*faceHeight/32
var blushWidth = 20
var blushHeight = 20
var blushDepth = 0
var dimple = 1
var eyeLX = 240 - faceWidth/4
var eyeRX = 240 + faceWidth/4
var eyeLY = 320 //height/2
var eyeRY = 320
var sunglasses = 0
var glassR = 0
var glassG = 0
var glassB = 0
var hairWidth = 100
var hairHeight = 400

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

function draw() {
    background(164, 230, 239);

    //hair
    fill(0);
    ellipse(width/2, height/2 - hairHeight/4, hairWidth, hairHeight);

    //head
    noStroke();
    fill(255, 220, 200);
    ellipse(width/2, height/2 + faceHeight/4, cheekWidth, faceHeight/2);//cheeks
    ellipse(width/2, height/2, faceWidth, faceHeight); //face

    //mouth
    var mouthHeight = height/2 + faceHeight/4
    noFill()
    stroke(0);
    strokeWeight(2);
    if(smile > 20) {
        arc(width/2, height/2 + faceHeight/4, smileWidth, smileHeight, 0, PI); //smile
    }
    else if(smile < 10) {
        arc(width/2, height/2 + faceHeight/4, smileWidth, smileHeight, PI, 0); //frown
    }
    else {
        line(width/2 - smileWidth/2, mouthHeight, width/2 + smileWidth/2, height/2 + faceHeight/4); //straight mouth
    }

     //dimples
    noFill()
    stroke(0);
    strokeWeight(2);
    if(dimple > .5) {
        arc(width/2 - (smileWidth/2 + 12.5), mouthHeight, 25, 30, 3*PI/2, PI/2); //left dimple
        arc(width/2 + (smileWidth/2 + 12.5), mouthHeight, 25, 30, PI/2, 3*PI/2); //right dimple
    }

    //blush
    noStroke();
    fill(254 + blushDepth, 118 + blushDepth, 145 + blushDepth);
    ellipse(width/2 - 7*faceWidth/16, height/2 + 5*faceHeight/32, blushWidth, blushHeight) //left blush
    ellipse(width/2 + 7*faceWidth/16, height/2 + 5*faceHeight/32, blushWidth, blushHeight) //right blush

    //eyes
    if(sunglasses > .5) {
    stroke(0);
    strokeWeight(2);
    fill(glassR, glassG, glassB);
    ellipse(width/2 - 50, height/2, 70, 70); //left frame
    ellipse(width/2 + 50, height/2, 70, 70); //right frame
    noFill();
    arc(width/2, height/2, 30, 30, PI, 0); //nose bridge frame
    line(width/2 - 85, height/2 - 5, width/2 - faceWidth/2, height/2 - 20); //left ear frame
    line(width/2 + 85, height/2 - 5, width/2 + faceWidth/2, height/2 - 20); //right ear frame
    }
    else {
    noStroke();
    fill(0);
    ellipse(eyeLX, eyeLY, 20, 20); //left eye
    ellipse(eyeRX, eyeRY, 20, 20); //right eye
    }
}


function mouseClicked() {
        faceWidth = random(200, 300);
        faceHeight = random(260, 300);
        cheekWidth = random(2*faceWidth/3, 13*faceWidth/12);
        smile = random(30);
        smileWidth = random(faceWidth/4, 7*faceWidth/12);
        smileHeight = random(faceHeight/16, faceHeight/4);
        blushDepth = random(-40, 50);
        blushWidth = random(20, 40);
        blushHeight = random(20, 40);
        dimple = random(1)
        eyeLX = random(240 - 3*faceWidth/8, 240 - faceWidth/8); //width not declared yet, so used numerical value 240 instead
        eyeRX = random(240 + faceWidth/8, 240 + 3*faceWidth/8);
        eyeLY = random(320 - 2.5, 320 + 2.5); //height not declared yet, so used numerical value 320 instead
        eyeRY = random(320 - 2.5, 320 + 2.5);
        sunglasses = random(1)
        glassR = random(255);
        glassG = random(255);
        glassB = random(255);
        hairWidth = random(100, 400);
        hairHeight = random(200, 400);


}

This project made me skeptical at first… When I first heard that we would be using variables to “randomly” generate faces, I thought that the faces would be just that. Random. Impersonal. Throughout the process — and certainly at the end — I found this not to be true though. Even though when I click the mouse, yes, a bunch of variables are randomly assigned values, I found that every generated face still represented me as the artist and programmer. The style of the artist is evident, and that is something that I did not expect. Each of these faces reflect a bit of my comedic and goofy nature (especially with the colored, circular sunglasses).

 

LookingOutwards-01 Jperez

Miyazaki’s Spirited Away

I must admit… I have not been exposed to much interactive or computational art. As I browse some of the amazing inspirational art my peers are referencing in their looking outwards posts, I realize the extent of how little I know.

Regardless, in some shape or form, digital art has been a part of my life since I was a child. In fact, perhaps my biggest artistic influence could be considered digital art: Miyazaki’s animated films.

Miyazaki’s films draw deeply on the water color painting tradition in Japan, going back hundreds and thousands of years. Every cel was painted by hand, and painstakingly put together to create a flawless animation; individual pieces of art in their own right, joined together to make something new.

What I find interesting about these animated films now, as an artist, is the number of people who helped to create them. In this sense, it diverges from the traditional singular author approach to art. These animated films joined the talents of composers, painters, computer scientists, and film directors to create something none of them could have done on their own. I admire the humility that takes (to not need all the glory for oneself), and I admire the communal strength that displays.

These films demonstrate great opportunity for collaboration among artists and different fields. They show that science and art are not disparate, but rather when they come together, they create something entirely new.

If these films set any sort of precedent for the future, I hope to see animation taken more seriously as an art form (high-brow or commercial). It seems to me that the general public attitude towards animation is that of childish entertainment, but anybody with critical faculties that watches a Miyazaki film will be forced to rethink that opinion.

Project 1 Jonathan Perez

sketch

function setup() {
    createCanvas(600, 600);
    background(164, 230, 239);

//background texture
    //corner squares
    stroke(255);
    fill(164, 230, 239);
    rect(0, 0, 120, 120);
    rect(width - 120, 0, 120, 120);
    rect(width - 120, height - 120, 120, 120);
    rect(0, height - 120, 120, 120);

    //grid around head
    rect(width/2 - 120, height/2 - 120, 240, 240);
    line(0, height/2 - 120, 600, height/2 - 120);
    line(0, height/2 + 120, 600, height/2 + 120);
    line(width/2 - 120, 0, width/2 - 120, 600);
    line(width/2 + 120, 0, width/2 + 120, 600);

    //Triangle strips
    beginShape(TRIANGLE_STRIP); //upper
    vertex(width/2 - 120, 0);
    vertex(width/2 - 100, height/2 - 120);
    vertex(width/2 - 80, 0);
    vertex(width/2 - 60, height/2 - 120);
    vertex(width/2 - 40, 0);
    vertex(width/2 - 20, height/2 - 120);
    vertex(width/2, 0);
    vertex(width/2 + 20, height/2 - 120);
    vertex(width/2 + 40, 0);
    vertex(width/2 + 60, height/2 - 120);
    vertex(width/2 + 80, 0);
    vertex(width/2 + 100, height/2 - 120);
    vertex(width/2 + 120, 0);
    endShape();

    beginShape(TRIANGLE_STRIP); //right
    vertex(600, height/2 - 120);
    vertex(width/2 + 120, height/2 - 100);
    vertex(600, height/2 - 80);
    vertex(width/2 + 120, height/2 - 60);
    vertex(600, height/2 - 40);
    vertex(width/2 + 120, height/2 - 20);
    vertex(600, height/2 - 0);
    vertex(width/2 + 120, height/2 + 20);
    vertex(600, height/2 + 40);
    vertex(width/2 + 120, height/2 + 60);
    vertex(600, height/2 + 80);
    vertex(width/2 + 120, height/2 + 100);
    vertex(600, height/2 + 120);
    endShape();

    //bottom
    beginShape(TRIANGLE_STRIP);
    vertex(width/2 - 120, 600);
    vertex(width/2 - 100, height/2 + 120);
    vertex(width/2 - 80, 600);
    vertex(width/2 - 60, height/2 + 120);
    vertex(width/2 - 40, 600);
    vertex(width/2 - 20, height/2 + 120);
    vertex(width/2, 600);
    vertex(width/2 + 20, height/2 + 120);
    vertex(width/2 + 40, 600);
    vertex(width/2 + 60, height/2 + 120);
    vertex(width/2 + 80, 600);
    vertex(width/2 + 100, height/2 + 120);
    vertex(width/2 + 120, 600);
    endShape();

    beginShape(TRIANGLE_STRIP); //left
    vertex(0, height/2 - 120);
    vertex(width/2 -120, height/2 - 100);
    vertex(0, height/2 - 80);
    vertex(width/2 -120, height/2 - 60);
    vertex(0, height/2 - 40);
    vertex(width/2 -120, height/2 - 20);
    vertex(0, height/2 - 0);
    vertex(width/2 -120, height/2 + 20);
    vertex(0, height/2 + 40);
    vertex(width/2 -120, height/2 + 60);
    vertex(0, height/2 + 80);
    vertex(width/2 -120, height/2 + 100);
    vertex(0, height/2 + 120);
    endShape();


    //triangles
    /*stroke(255);
    fill(164, 230, 239);
    beginShape(TRIANGLE_STRIP);
    vertex(0, 0);
    vertex(100, 100);
    vertex(200, 0);
    vertex(300, 300);
    vertex(400, 0);
    vertex(500, 500);
    vertex(600, 0);
    vertex(600, 600);
    endShape();*/

    //beginShape() // square around head
}

function draw() {
    
    //hair section (underneath head graphic)
    stroke(0)
    fill(210);
    quad(297, 280, 377, 280, 357, 350, 307, 385); // hair grey section
    fill(0);
    rect(232, 206, 10, 20);

    //head
    stroke(0)
    fill(255, 220, 200);
    ellipse(267, 310, 130, 200);

    //hair (over head graphic)
    noStroke();
     fill(210);
    rect(297, 290, 50, 20); // grey section
    triangle(297, 310, 307, 310, 297, 330); // sideburns
    fill(0);
    quad(237, 205, 367, 220, 417, 295, 287, 290); //top black section

    //face details
    fill(255, 220, 200);
    ellipse(327, 320, 32, 52); //ear
    stroke(0)
    arc(327, 320, 32, 52, 5*PI/4, PI/2); //partial ear outline
    strokeWeight(2);
    line(237, 360, 211, 360); //mouth horizontal
    arc(247, 360, 20, 20, 4*PI/6, 8*PI/6); // mouth side
    fill(0)
    ellipse(random(-3, 3) + 242, random(-3, 3) + 290, 20, 20); //crazy eye
    noStroke()
    fill(254, 118, 145);
    ellipse(267, 330, 30, 30); //cheek blush

//coffee mugs
    //top left
    stroke(0);
    fill(255);
    ellipse(75, 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(75, 60, 30, 30); //cut-out handle
    fill(255);
    rect(30, 30, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(55, 37, 40, 5); //coffee

    //top right
    stroke(0);
    fill(255);
    ellipse(width - 45, 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(width - 45, 60, 30, 30); //cut-out handle
    fill(255);
    rect(width - 90, 30, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(width - 65, 37, 40, 5); //coffee

    //bottom right
    stroke(0);
    fill(255);
    ellipse(width - 45, height - 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(width - 45, height - 60, 30, 30); //cut-out handle
    fill(255);
    rect(width - 90, height - 90, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(width - 65, height - 83, 40, 5); //coffee

    //bottom left
    stroke(0);
    fill(255);
    ellipse(75, height - 60, 40, 40); //handle
    fill(164, 230, 239);
    ellipse(75, height - 60, 30, 30); //cut-out handle
    fill(255);
    rect(30, height - 90, 50, 60, 8, 8, 5, 5); //mug 
    fill(0);   
    ellipse(55, height - 83, 40, 5); //coffee



}

I have to say, creating this self portrait was so much fun. With my limited knowledge of p5js, I was forced to experiment with a totally different art style than I am accustomed to. Despite this literally being constricting, I found it freeing.

I wanted to do something particular to coding – something I couldn’t do with normal pencil in paper – so I centered my piece around the vibrating eye. Coincidentally, the vibrating eye linked quite well to one of my life passions: coffee.

I think I’ll call this “Portrait of the Coffee as a Young Man”.