looking outwards – 05

Hybrid Forms by Andy Lomas


The artist known for his unique vases and coral-like structures is generally fascinated by how natural forms manifest, grow, and expound from one another. I think this sensibility of his culminates perfectly in Hybrid Forms where he extends on the prior work Cellular Forms in which he creates his graphics, generative art to present the valorization of what seems to be microscopic entities. I like how Lomas goes above and beyond his primary attraction to coral and plant-type structures to, usually, more dynamic ones found in bacteria, viruses, and animals. Cellular + Hybrid forms strive to show these structures and growth through code that generates literal cells that compete with each other, “iterated over tens of thousands of time steps, with final structures having over a hundred million cells and remarkably complex morphologies.” I think the bacteria and virus associations are heavy, but the animal threshold is just broken through with Hybrid Forms as many graphics become similar to jellyfish or water bears in my mind. Nonetheless, static images are amazing, of the structures, but the videos are even better.

https://www.andylomas.com/hybridForms.html

Looking Outward 5: 3D Computer Graphics

Author’s Name:Joan Madrid

Title of the Work:“The Kiss”

Year of Creation:2019

Link:https://vimeo.com/340175147

Il Bacio “The Kiss” by Joan Madrid is a 3D video that depicts the short story between a knight and a prince. The feature I admire about “The kiss” are the characters were intriguingly puppets and the clip was done by about 70 students from BigRock Institute of Magic Technologies. It’s really inspiring and encouraging to me how students can work together to build such high-quality 3D videos. The software used to create this project are: Mudbox, HTC Vive Proprietary System, Adobe After Effects, Adobe Premiere Pro, and Adobe Audition. Autodesk Arnold was used to render the clip, and the HTC Vive Proprietary System was used to generate 3D models. The creator’s artistic sensibilities manifest in the final form of 3D videos that convey sorrowness of two protagonists, who can only kiss each other by killing themself because puppets can’t kiss.

Video:

https://vimeo.com/340175147

Project 5: Wallpaper, Section B

Flower of Life Wallpaper

Sketch
/* Evan Stuhlfire
** estuhlfi@andrew.cmu.edu, section B
** Project 05: Wallpaper */

var dot = 5;
var bigDot = 10;

function setup() {
    createCanvas(600, 400);
    background(224, 223, 214);
    rectMode(CENTER);
}

function draw() {
    var rowHeight = 150;
    var colCount = 1; 
    var circleDiam = 50;
    var circleOffset = 10;
    var cosAmplitude = 40; // height of cos wave
    var sinAmplitude = 60; // height of sin wave
    var sinInc = 5; // increase for sin offset

    // Iterate over row to create rows of sin and cos waves
    for(var row = 0; row < height + rowHeight; row += rowHeight) {
        var colCounter = 0; // reset column counter for new row

        // iterate over theta to draw cos waves in background
        for(var theta = 0; theta < width; theta++) {
            stroke(49, 54, 56, 45);
            circle(theta, row + cosAmplitude * cos(radians(theta)), .2);
            circle(theta, row + cosAmplitude * -cos(radians(theta)), .2);
        }

        // iterate over theta to draw sin waves
        for(var theta = 0; theta < width + circleDiam; theta++) {
            stroke(49, 54, 56, 70);
            fill(49, 54, 56, 70);
            // draw sin waves as circles as theta moves across canvas
            // increment the sinAmplitude to create layered affect
            // decrease diam of circles to decrease line weight
            circle(theta, row + sinAmplitude * sin(radians(theta)), 2);
            circle(theta, row + (sinAmplitude + sinInc) * 
                sin(radians(theta)), 1);
            circle(theta, row + (sinAmplitude + 2 * sinInc) * 
                sin(radians(theta)), .2);
            circle(theta, row + sinAmplitude * -sin(radians(theta)), 2);
            circle(theta, row + (sinAmplitude + sinInc) * 
                -sin(radians(theta)), 1);
            circle(theta, row + (sinAmplitude + 2 * sinInc) * 
                -sin(radians(theta)), .2);

            // every 90 degrees draw a design
            if(theta % 90 == 0) {
                colCounter++;
                // when inside the sin waves draw circle of life
                if(colCounter % 2 == 0) {
                    stroke(49, 54, 56, 175);
                    fill(224, 223, 214);
                    drawLife(theta, row);
                } else {
                    // draw ellipses at intersection of sin waves
                    stroke(49, 54, 56, 50);
                    fill(224, 223, 214);
                    // draws concentric ellipses
                    for(var i = circleDiam; i >= 15; i -= 15){
                        ellipse(theta, row, i + circleOffset, i);
                    }
                    fill(49, 54, 56, 140);
                    ellipse(theta, row, bigDot); // draw dots at intersections

                    // draw little flowers
                    drawLittleFlowers(theta, row);
                } 
            }
        }
    }
    noLoop();
}

function drawLife(theta, row) {
    // draw the circle of life
    // set variable for circle dimensions and offset angles
    var bigDiam = 110;
    var diam = 30; // set smaller circle diameter
    var ellipseOffset = 20;
    var rad = diam/2;
    var angle1 = 30;
    var angle2 = 5 * angle1;
    var angle3 = 45;
    var oneEighty = 180;
    var angleOffset = 2;
    var diamOffset = 5;

    push(); // save settings
    translate(theta, row); // reposition origin
    stroke(49, 54, 56, 90); // lighten inner circles
    // draw larger ellipse
    ellipse(0, 0, bigDiam, bigDiam - ellipseOffset);

    // draw center circle
    circle(0, 0, diam);

    noFill();
    // draw layers of circles with drawMoreCircles with 
    // distance from center, diameter, and angle of offset
    // inner layer of circles
    drawMoreCircles(rad, diam, oneEighty/2);
    drawMoreCircles(rad, diam, angle1);
    drawMoreCircles(rad, diam, angle2);

    // second layer of circles
    drawMoreCircles(diam, diam, oneEighty/2);
    drawMoreCircles(diam, diam, angle1);
    drawMoreCircles(diam, diam, angle2);
    drawMoreCircles(diam - diamOffset, diam, oneEighty);
    drawMoreCircles(diam - diamOffset, diam, 0);
    drawMoreCircles(diam - diamOffset, diam, angleOffset * angle1); 
    drawMoreCircles(diam - diamOffset, diam, 2 * angleOffset * angle1);
    
    // third layer of circles
    // adjustments to offset diam and angle
    drawMoreCircles(diam + rad - diamOffset, diam, oneEighty - 
        (5 * angleOffset));
    drawMoreCircles(diam + rad - diamOffset, diam, -5 * angleOffset)

    pop(); // retore settings
    fill(120); // solid grey
    // draw center flower dot
    ellipse(theta, row, dot);
}

function drawMoreCircles(expand, diam, angle) {
    // draw two circles at opposite angles defines by the 
    // distance from the center, diameter, and offset angle
   circle(expand * cos(radians(angle)), expand * sin(radians(angle)), diam);
   if(angle != 180 & angle != 0){
       circle(expand * cos(radians(-angle)), expand * 
        sin(radians(-angle)), diam);
   }
}

function drawLittleFlowers(theta, row) {
    var rowOffset = 75;
    var petalLength = 15;
    var petalWidth = 4;
    var petals = 6;
    var angle = 30;
    var angleIncrease = 60;
    var diam = 30;
    var accentOffset1 = 7;
    var accentOffset2 = 10;
    var ellipseOffset = 10;

    // set color for flower petals
    stroke(49, 54, 56, 100);
    fill(224, 223, 214);

    // draw circle to contain flower
    ellipse(theta, row + rowOffset, diam + ellipseOffset, diam);
    circle(theta, row + rowOffset, diam);
    // draw the petals
    for(var i = 0; i < petals; i++){
        push(); // save settings
        translate(theta, row + rowOffset);
        rotate(radians(angle)); 
        ellipse(petalLength/2, 0, petalLength, petalWidth);

        // draw accent lines with offsets
        line(petalLength + accentOffset1, 0, petalLength + accentOffset2, 0);
        pop(); // restore settings

        angle += angleIncrease;
    }
    // draw the center dot
    fill(120); // solid grey
    ellipse(theta, row + rowOffset, dot);
}

Project 5: Wallpaper

Shirley P5

sketch
//Xinyi Du 
//15104 Section B
//xinyidu@andrew.cmu.edu
//Project-05

var w = 100; 
var h = 100;


function setup() {
    createCanvas(600, 600);
}

function draw() {
    background(0, 58, 100);

    for (var col=0; col<3; col++) {
        for (var row=0; row<10; row++) {
            stroke(200, 223, 82); //green
            rotateEllipsee(w+3*w*col, h-100+h*row);
            stroke(221,160,221); //pink
            fill(221-90,160-90,221-90); //pink
            circleLine2(w+3*w*col, h-100+h*row);
        }
    }
    for (var col=0; col<3; col++) {
        for (var row=0; row<10; row++) {
            stroke(221,160,221); //pink
            rotateEllipsee(w+100+3*w*col, 0+h*row);
            stroke(200, 223, 82); //green
            fill(200-90, 223-90, 82-90); //green
            circleLine2(w+100+3*w*col, 0+h*row);   
        }
    }
    for (var col=0; col<3; col++) {
        for (var row=0; row<10; row++) {
            stroke(200, 223, 82); //green
            circless(-20+3*w*col, h/2+h*row);
            stroke(221,160,221); //pink
            circless(20+3*w*col, -50+h/2+h*row);
        }
    }
    
}

//draw the small circles and lines
function circleLine(x, y) {
    strokeWeight(1.5);
    push();
    translate(x, y); 
    line(60/2-5, 0, 60/2+20*sqrt(2), 0); 
    ellipse(60/2+20*sqrt(2)-10/2, 0, 10, 10);
    rotate(radians(25)); //rotate to get the second pair of ellipse and line 25 degrees above
    line(60/2-5, 0, 60/2+20*sqrt(2)-5, 0); 
    ellipse(60/2+20*sqrt(2)-10/2-5, 0, 10, 10);
    rotate(radians(-50)); //rotate to get the third pair of ellipse and line 25 degrees below
    line(60/2-5, 0, 60/2+20*sqrt(2)-5, 0); 
    ellipse(60/2+20*sqrt(2)-10/2-5, 0, 10, 10);
    pop();
}

//draw the ellipses center on (x,y)
function ellipsee(x, y) {
    strokeWeight(1.5);
    //mirror the small circles and lines though rotating them 18 degrees
    circleLine(x, y); 
    push();
    translate(x, y);
    rotate(radians(180));
    circleLine(0, 0);
    pop();

    //white ellipses
    fill(0, 58, 100);
    ellipse(x, y, 60, 39);
    ellipse(x, y, 40, 26);
    ellipse(x, y, 20, 13);
}

//roatate the ellipses drawn in the previous function
function rotateEllipsee(x, y) { 
    fill(0, 58, 100);
    push();
    translate(x, y);
    rotate(radians(-45));//rotate -45 degrees
    ellipsee(0, 0);
    pop();
}

//draw the vertical lines and circles
function circleLine2(x, y) {
    strokeWeight(2);
    //fill(221,160,221);
    line(x, y-w, x, y-w+50);
    line(x, y-w+50, x, y-w+50+h);
    line(x, y-w+50+h, x, y-w+50+h+50);
    ellipse(x, y-w+50, 12);
    ellipse(x, y-w+50+h, 12);
}

//draw the vertical circles
function circless(x, y) {
    strokeWeight(1.5);
    noFill();
    ellipse(x, y, 25);
    ellipse(x, y, 10);
    ellipse(x, y-25, 7);
    ellipse(x, y+25, 7);
    ellipse(x, y-42, 7);
    ellipse(x, y+42, 7);
}

    





Looking Outwards 05: 3D Computer Graphics, Section B

Mikael Hvidtfeldt Christensen is a generative artist with a background in physics and computational chemistry. He generates 3D images in a project called Syntopia. His works are varied and experimental. He keeps a blog and a Flickr account of his finished works and his experiments. I admire his sharing the results of his experiments with the world. Even though they are not completed works they are inspiring and show the iterative process that goes into creating a project.


Most of Christensen’s images are geometric renderings of complex shapes and building designs; however he has also created color swapping algorithms and texturizing art. The images from these projects take existing images and sort the colors into layers or add disturbing textures, such as lizard scales to lettuce.


Christensen is passionate about complex systems and has written his own software to generate and render his images. His software, Structure Synth, is available for download and can be found here. It is written in C++, OpenGL, and Qt 4.

Looking Outwards 05 – Computational Graphics

One computational graphics project that really impressed me is the work of Vincent Pace and James Cameron in the film Avatar. The movie, released in 2009, was critically acclaimed for its advanced usage of CGI and how it advanced CG technologies that set precedent to sci-fi movies later to come. The usage of stereoscopic cameras and rigging actors with gear to mimic human eyes. 60% of the film utilized CGI imagery, as the film integrates CGI with live action recording as well – each second in the film contains about 17 gigabytes of data.

What I especially appreciate about this piece is how natural the integration with technology and graphics was undertaken. It’s always a risk to “overcompute” a creative practice within these types of projects, which undermine the realistic nature of the scenery. However, the project revolutionized how the movie industry can be taken further through CGI.


The Evolution of Animation to CGI (Computer-Generated Imagery) and the Impact of James Cameron’s Avatar

Project 05 – Wallpaper

Stereoscopic style wallpaper with randomly generated shapes throughout composition.

sketch
//Aarnav Patel
//Section D
//aarnavp@andrew.cmu.edu
//Project-05

var side = 100;
var radius = 0.8 * side
function setup() {
    createCanvas(600, 600);
    background(0);
}

function draw() {
	noStroke();

	let arr1 = [1, 2, 3];
	count = 0;
	for (var y = 0; y < height; y += side) {
		count = count + 1; 
		for (var x = 0; x < width; x += side) {
			if (count == floor(random(0, 5))) {
				drawTile(x, y);
				drawRandomShape(x, y);
				count = 0;
			} else {
				drawTile(x, y);
			}
		}
	}
	noLoop();
}

function drawTile(x, y) {
	fill(0, 0, 255, 150);
	ellipse(x + side / 2, y + side / 2, radius);
	fill(255, 0, 0, 100);
	ellipse(x + radius / 2, (y + side / 2 ), radius);

	fill(0, 0, 255, 100);
	triangle(x - 5, y - 5, (x + side) - 5, y - 5, x - 5, (y + side) - 5);
	fill(255, 0, 0, 150);
	triangle(x, y, x + side, y, x, y + side);

}

function drawRandomShape(x, y) {
	var r = floor(random(0, 3));
	fill(255);

	if (r == 0) {
		rectMode(CENTER);
		rect(x + (side / 2), y + (side / 2), side * 0.1, side * 0.5);
		rect(x + (side / 2), y + (side / 2), side * 0.5, side * 0.1);
	} else if (r == 1) {
		rectMode(CENTER);
		rect(x + (side / 2), y + (side / 2), side * 0.1, side * 0.5);
	} else {
		rectMode(CENTER);
		rect(x + (side / 2), y + (side / 2), side * 0.5, side * 0.1);
	}
}

Project 05

I made 2 repeating patterns using squares, flower, and arcs 🙂

sketch
// Sowang Kundeling Section C Project 05

var size = 40;

function setup() {
    createCanvas(400, 600);
}

function draw() {
    background(82, 30, 49)

    for (var x = 20; x <= 400; x += 50) {
        for (var y = 20; y <= 600; y += 100) {
            push();
            tealsquare(x, y);
            pop();
            
        }    
    }

    for (var x = 20; x <= 400; x += 50) {
        for (var y = 70; y <= 600; y += 100) {
            push();
            bluesquare(x, y);
            pop();           
        }    
    }

    noLoop();
}
function tealsquare(x, y) {
    // square
    noStroke();
    fill('teal');
    rect(x, y, size/2, size/2);
    
    // flower
    stroke('black');
    fill('lightblue');
    ellipse(x, y + size/6, size/3);
    ellipse(x, y - size/6, size/3);
    ellipse(x + size/6, y, size/3);
    ellipse(x - size/6, y, size/3);
    fill(84, 58, 68);
    ellipse(x, y, size/3);

    // arc
    noFill();
    stroke('lightblue');
    arc(x, y, 50, 50, 0, HALF_PI);
}

function bluesquare(x, y) {
    // circle
    noStroke();
    fill('lightblue');
    rect(x, y, size/2, size/2);
    
    //flower
    stroke('white');
    fill('teal');
    ellipse(x, y + size/6, size/3);
    ellipse(x, y - size/6, size/3);
    ellipse(x + size/6, y, size/3);
    ellipse(x - size/6, y, size/3);
    fill(84, 58, 68);
    ellipse(x, y, size/3);

    // arc
    noFill();
    stroke('teal');
    arc(x, y, 50, 50, 0, HALF_PI);
}

Blog 05

Vogue China is launching Meta-Ocean, a collection of 3D digital works by 24 artists under the theme of the mythical world under the sea. This includes sculptures from the city of Atlantis by Anushka Tendolkar. Previous Vogue issues inspire numerous works, pioneering a new way of designing fashion. Plans for expanding the curation of artists and art are under works and the market for NFTs can open up a new way of supporting ocean awareness. Vogue China had an “open call” for artists’ nominations from editorial teams worldwide. One of the artists, Justin Ridler, created work that combined photography with CGI. His designer wife also helped to style the model, demonstrating a new way of approaching fashion photography and designing.

https://vogueworld.viewofficial.cn/

Looking Outwards-05 

Computer Graphics 

When I think about 3D computer graphics, as a designer I immediately think about Solidworks.

Solidworks is a CAD program that can be used to digitally design three dimensional things, and then render those things and produce drawings that may be helpful to the user.  

It’s hard to imagine this heavy complex program in terms of what we are doing in class, but I would assume there are a lot of simple math functions that need to be done to make the program work. I guess you could simplify Solidworks into an interactive visual processor. 

What I like most about Solidworks is its practicality and exactness. It is a very powerful tool that is fun to explore as a user. It also does a lot of math and measurements that might be difficult to impossible to do all by hand.