Bhaboo’s Looking Outwards – Week 3

While I was looking through the article about parametric 3D form based art by Professor Levin, I came about a 3D printed piece of jewelry in the form of revelation based on the “timeline” of an audiophile. As a professional videographer, I work with Audio all the time and every person or animal on this world has a distinct sound that’s personalized to them. I work with audio all the time so it was cool to see how sound waves can make personalized jewelry. As this is apart of the data sculpture and physical visualization inspiration, I think it shows how art can be personalized to a great extent. You’re able to visit a website called “soundwave.love” that let s you turn a personal sound, word, or phrase into a unique piece of jewelry. It’s interesting to see how this art was created directly from data and how just a minor change can produce an entirely different form of art.

To learn more: Soundwave’s Website

This is a visual representation of a soundwave turning into a wooden necklace!

Project 03 – Dynamic Drawing

  • move the mouse up and down to see changes in color
  • move the mouse left and right to change spacing between the squares
sketch
let angle = 0;
var size = 100

function setup() {
    createCanvas(700, 500);
    background(220);
    text("p5.js vers 0.9.0 test.", 10, 15);
}

function draw() {
    background(50);

    //circle in the center
    push();
        translate(width/2,height/2);
            rotate(angle);
            fill(mouseX,43,172);
            stroke('black');
            strokeWeight(5);
        rectMode(CENTER);
            square(0,0,300);
        pop();

    //inner ring of circles
        for(let a=0; a<radians(360); a+=radians(30)){
            
            push();
            translate(width/2,height/2);
            rotate(a);
            translate(0,size);
                rotate(angle);
            rectMode(CENTER);
            blendMode(MULTIPLY);
            fill(mouseY,43,100);
            square(0,0,200);
            pop();
        }

    //outer row of circles
        for(let a=0; a<radians(360); a+=radians(30)){
            
            push();
            translate(width/2,height/2);
            rotate(a);
            translate(0,size+100);
                rotate(angle);
            rectMode(CENTER);
            blendMode(MULTIPLY);
            fill(mouseY,43,172);
            square(0,0,200);
            pop();
        }

        //makes it so that the squares don't disappear when mouseX goes to 700
        size = max(mouseX/2, 100);



    angle += radians(1);

}

Blog-03

Designer Hasan Ragab creates immersive digital art using an AI text-to-image generator for Parametric Architecture. The model is called Midjourney and is hosted on a Discord server. After inputting responses to prompts, the AI bot will produce four variations of the result, then you can make more variations out of the existing variations. Hasan Ragab implements his Egyptian heritage into his work, creating futuristic Egyptian temples and reimagining Gaudi-esque buildings. Ideas are processed through a “parametric copy-paste” and new possibilities come with each variation. A perk of Midjourney is that it prioritizes more artistic than realistic results. Taking less than a minute, Midjourney is also very accessible and efficient, as easy as playing a game on your phone. A community of architects and designers has also formed surrounding the model to push the boundaries. Hasan Ragab views AI tools as a new path in architecture. AI tools will have to shift our views on creativity, whether it is for better or worse if up for debate.

Looking Outwards 03: Computational Fabrication

Aguahoja (1 – 3)
Contributors: Neri Oxman & MIT Mediated Matter Group
2018 – 2021

Physical installation at MIT Media Lab in February 2018

The project I have chosen is the Aguahoja collection (Aguahoja 1 & Aguahoja 2) by the Mediated Matter Group at MIT which are a series of pavilions and associated artifacts made from digitally fabricated biodegradable composites (ie. a cellulose-chitosan-pectin-calcium carbonate compound.
After use, these ‘structural skins’ can be programmed to degrade in water in a process called “environmental programming”.

Prototypes at MIT Media Lab in February 2018

What I admire is how ‘self-sufficient’ the project is and how integrally the ‘cradle-to-cradle’ aspect of its design concept were incorporated. The lack of need for a secondary load bearing structure conventionally needed for stability and form is forgone in favour of a material with these features embedded into the molecular structure, giving an unique elegance. I also appreciate the rigor that the researches put into development of their ‘library’ of functional biopolymers, allowing them to develop an extensive range of biocomposites that can respond to different stimuli (temp / heat, humidity, light, etc.).

According to the paper “Flow-based Fabrication: An integrated computational workflow for design and digital additive manufacturing of multifunctional heterogeneously structured objects”, published by the Mediated Matter Group in 2020, their work flow “encodes for, and integrates domain-specific meta-data relating to local, regional and global feature resolution of heterogeneous material organisations.” I interpreted it to mean that they had a mesh-free geometric primitive onto which they associated the material properties and variable flow rates of various water-based materials, and then tested/ demonstrated the physical properties of these simulations with a robot arm and multi-syringe multi nozzle deposition system. This in context of another published paper “Designing a Tree: Fabrication Informed Digital Design and Fabrication of Hierarchical Structures” implies that the biomolecules of these biomaterials are deliberately chosen to “maximize desired basic-to-acidic and hydrophobic-to-hydrophilic transitions”, while “decay maps” show the degradation of the material over time in relation to various environmental factors. Clearly, a lot of categorization and material mapping occurs on the nano scale, followed most likely by an optimization algorithm (potentially a Machine Learning program) that determines an optimal molecular organisation to be fed into robot arm & multi nozzle deposition system depending on the environmental parameters encoded for.

Robot arm depositing composite material fibers

Arguably, this is a manifestation of the “Form Follows Function” creed where an artifact/ structure’s physical form emerges as result of the functions it has to serve. This is supported by the quote “The Aguahoja 1 platform is… where shape and material composition are directly informed by physical properties (eg. stiffness and opacity), environmental conditions (eg. load, temperature, and relative humidity) and fabrication constraints (eg. degrees-of-freedom, arm, speed, and nozzle pressure), among others.” Thus, it is inferred that any artistic sensibilities exhibited by the work were encoded via the prioritization and curation of specific environmental & physical factors.

Links:
https://www.media.mit.edu/projects/aguahoja/overview/
https://www.media.mit.edu/projects/aguahoja-iii/overview/
https://web.archive.org/web/20211015194534/https://mediatedmattergroup.com/publications-2-1/2018/10/16/designing-a-tree-fabrication-informed-digital-design-and-fabrication-of-hierarchical-structures
https://web.archive.org/web/20211015184725/https://mediatedmattergroup.com/publications-1/2018/10/7/flow-based-fabrication-an-integrated-computational-workflow-for-design-and-digital-additive-manufacturing-of-multifunctional-heterogeneously-structured-objects

Looking Outwards 03: Computational Fabrication

The project is called string art which is making use of automatic computation and digital fabrication to create artistic string images. Before the technology, artists usually create string images in a highly complicated and tedious process manually. For getting this outcome completely automatically, the artists in this project made use of a computational setup that was driven by a discrete optimization algorithm. The optimization algorithm received a chosen picture as input and converted the picture into a graph with connected strings which tried to reassemble the input image best possibly. The thing that I admire the most about this project is showing the computers’ ability to make abstract outputs. It is because computer outputs had been considered by most people as concrete and objective but this project showed that our computers had achieved another level (abstracts). In this project, the artists can potentially control how abstract the outcomes will be.

Refrence
Michael Birsak, Florian Rist, Peter Wonka, and Przemyslaw Musialski Computer Graphics Forum (Proceedings of Eurographics), 2018.

This video explains the process of using computational fabrication to make string art.

Project-03: Dynamic Drawing

sketch
var d= 100;//diameter of each circle

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

function draw() {
    background(10);
    noStroke();
    
    d=min(mouseX,width);//d changes when the mouse moves
    fill("red");
    circle(width/4, height/4, d);//top left red circle
    fill("green");
    circle((width/4)*3, (height/4)*3, d);//bottom right green circle
  
    d=width-d;// d changes oppositely 
    fill("blue");
    circle(width/4, (height/4)*3, d);//bottom left blue circle
    fill("orange");
    circle((width/4)*3, height/4, d);//top right orange circle
    
}

When I was designing the graph, I was thinking about the idea of contrasting colors (red and green, blue and orange) and circles popping out.

Project 3 Dynamic Drawing

The piece is inspired by 3D Glasses, and the relationship between Red and Blue light in bringing images “off the screen.” I think it has a really cool holographic affect to it that is also brought about with proximity and rotation.

HOLD DOWN ON MOUSE TO CHANGE SIZE AND COLOR

sketch

//Aarnav Patel
//Section D

var side;
var midX = 0;		//the coordinates of the middle squares (what the other squares are proportional to)
var midY = 0; 
var rotation = 0;
var color1 = 255;
var color2 = 0;


function setup() {
    createCanvas(600, 450);
    background(220);
    text("p5.js vers 0.9.0 test.", 10, 15);
    side = width / 32;	

}

function draw() {

	//change my origin to the middle of the canvas to better organize my rectangles
	translate(width / 2, height / 2);
	background(0);
	noStroke();
	colorMode(RGB);

	//side rectangles are proportionally equidistant from the middle square (based on x value)
	xdiff = min(mouseX / 2, (width / 2) - side);
	ydiff = min(mouseY / 2, (height / 2) - side);
	

	//Red Rectangles (TOP ROW)
	fill(color1, 0, color2, 100);
	push();							//Create its own coordinate system (for rotation)
	translate(midX, midY - ydiff);	//MID square coordinate place
	rotate(radians(rotation));	
	rectMode(CENTER);				//means that the x and y value below are the CENTER of the rectangle
	rect(0, 0, side, side);
	pop();							//reset coordinate sytem for next rectangle

	push();
	translate(midX - xdiff, midY - ydiff);	//LEFT square coordinate place
	rotate(radians(rotation));
	rectMode(CENTER);
	rect(0, 0, side, side);
	pop();

	push();
	translate(midX + xdiff, midY - ydiff);		//RIGHT square coordinate place
	rotate(radians(rotation));
	rectMode(CENTER);
	rect(0, 0, side, side);
	pop();

	//blue rectangles (BOTTOM ROW)
	fill(color2, 0, color1, 100);
	push();
	translate(midX, midY + ydiff);		//MID square coordinate place
	rotate(radians(rotation));
	rectMode(CENTER);
	rect(0, 0, side, side);
	pop();

	push();
	translate(midX - xdiff, midY + ydiff);		//LEFT square coordinate place
	rotate(radians(rotation));
	rectMode(CENTER);
	rect(0, 0, side, side);
	pop();

	push();
	translate(midX + xdiff, midY + ydiff);		//RIGHT square coordinate place
	rotate(radians(rotation));
	rectMode(CENTER);
	rect(0, 0, side, side);
	pop();

	rotation = rotation + 1;	//Increment rotation so squares always spinning

	
	if (mouseIsPressed) {	//if user holds mouse, it changes color (switches blue and red values of each row)
		if (color1 != 0) {
			color1 -= 1;
			color2 += 1;
		} else {
			color1 += 1;
			color2 -= 1;
		}


		if (side >= width) {	//if rectangles get too big for the canvas, it resets back to initial side length
			side = width / 32;
			color1 = 255;
			color2 = 0;
		} else {
			side = side * 1.01;
		}
	}

	

}

Project-03-Dynamic-Drawing: Section B

My process for this project was to alter basic shapes and colors to create a kaleidoscope. I used transformations so I could draw the same images many times in different locations. Moving the mouse left and right shrinks, enlarges, and repositions different elements. Crossing the horizontal midpoint reverses the rotation. Vertical motion with the mouse speeds and slows the rotation. Clicking changes colors.

From my sketchbook.
sketch
// Evan Stuhlfire
// estuhlfi, section B
// Project-03: Dynamic Drawing

var angle = 0; // Angle to increment for rotation
var angleInc = 2; // Controls speed of rotation
var rotateDir = 1; // Direction of rotation
var centerX; // Center of original canvas
var centerY;
var shapeSpace = 30; // Space between shapes
var rectSize = 20;
var startSize = 10;
var circleStart = 10;
var littleCircle = 10;
var colorScheme = 1; // standard = 1, switched = -1

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

    centerX = width/2;
    centerY = height/2;
}

function draw() {
    background(50);

    // If the mouse is left of center set rotation counterclockwise
    if(mouseX < centerX){
        rotateDir = -1;
    } else {
        rotateDir = 1; // Set rotation clockwise
    }

    // Translate the canvas origin to the center
    translate(centerX, centerY);

    // Save the current settings
    push();

    // Rotate the canvas for the shape redraw
    rotate(radians(angle * rotateDir));

    // Draw background circle
    fill(120, 88, 111);
    stroke(120, 88, 111);
    ellipse(0, 0, height, height);

    // Draw center rectangle
    fill(230, 199, 156);
    stroke(230, 199, 156);
    rectMode(CENTER); // Center rect around (0,0)
    rect(0,0, rectSize, rectSize);
    rect(0, 0, rectSize * mouseX/15, rectSize * mouseX/15);

    // Draw center crossing rectangles
    if(colorScheme == 1){
        fill(123, 158, 168); // grey blue
        stroke(123, 158, 168);
    } else {
        fill(111, 208, 140); // green
        stroke(111, 208, 140);
    }
    
    rect(0, 0, 25, width * 1.5);
    rect(0,0, width * 1.5, 25);

    // Draw little circle
    fill(120, 88, 111);
    stroke(120, 88, 111);
    ellipse(0, 0, littleCircle * mouseX/15, littleCircle * mouseX/15);

    // Draw four spokes of ellipses and diamonds 
    // at 90 degree intervals
    drawEllipse();
    drawRects();
    
    rotate(radians(90));
    drawEllipse();
    drawRects();

    rotate(radians(90));
    drawEllipse();
    drawRects();

    rotate(radians(90));
    drawEllipse();
    drawRects();

    // Return to saved settings
    pop();

    angle = angle + mouseY/100;
}

function drawEllipse(){
    // Set color of ellipses
    if(colorScheme == 1){
        fill(111, 208, 140); // green
        stroke(111, 208, 140);
    } else {
        fill(123, 158, 168); // grey blue
        stroke(123, 158, 168);
    }
    

    var circleSize = circleStart;
    var circleInc = 5;

    circleSize = circleSize * (width - mouseX)/150;
  
    // Draw a line of ellipses
    ellipse(shapeSpace, shapeSpace, circleSize, circleSize);
    // Draw first row dots
    var dotSize = 4;
    push(); // Save settings
    fill(205, 223, 160); // yellow
    stroke(0);
    rect(shapeSpace, shapeSpace, circleSize/dotSize, circleSize/dotSize);
    pop(); // restore settings
    
    circleSize += circleInc;
    ellipse(2 * shapeSpace, 2 * shapeSpace, circleSize, circleSize);
    // Draw second row dots
    push(); // Save settings
    fill(120, 88, 111); // purple
    rect(2 * shapeSpace, 2 * shapeSpace, circleSize/dotSize, circleSize/dotSize);
    pop(); // restore settings

    circleSize += circleInc;
    ellipse(3 * shapeSpace, 3 * shapeSpace, circleSize, circleSize);
    // Draw third row of dots
    push(); // Save settings
    fill(205, 223, 160); // yellow
    stroke(0);
    rect(3 * shapeSpace, 3 * shapeSpace, circleSize/dotSize, circleSize/dotSize);
    pop(); // Restore settings

    circleSize += circleInc;
    ellipse(4 * shapeSpace, 4 * shapeSpace, circleSize, circleSize);
    // Draw fourth row of dots
    push(); // Save settings
    fill(120, 88, 111); // purple
    rect(4 * shapeSpace, 4 * shapeSpace, circleSize/dotSize, circleSize/dotSize);
}

function drawRects(){
    // Draws a line of rectangles 

    // Set color of rectangles
    fill(205, 223, 160); // yellow
    stroke(120, 88, 111); // purple

    // Save current settings
    push();

    // Rotate canvase so rectangles craw as diamonds
    rotate(radians(45));

    rectMode(CENTER); // draw rects from center
    var sqSize = startSize * mouseX/100;
    var sqInc = 5;
    // Draw first rectangle
    rect(shapeSpace, shapeSpace, sqSize, sqSize);

    // Draw second rectangle
    sqSize += sqInc;
    rect(shapeSpace + 2 * sqSize, shapeSpace + 2 * sqSize, sqSize, sqSize);

    // Draw third rectangle
    sqSize += sqInc;
    rect(shapeSpace + 3 * sqSize, shapeSpace + 3 * sqSize, sqSize, sqSize);

    // Draw fourth rectangle
    sqSize += sqInc;
    rect(shapeSpace + 4 * sqSize, shapeSpace + 4 * sqSize, sqSize, sqSize);

    // Draw dots
    stroke(0);
    fill(111, 208, 140); // green
    var dotSize = 3;
    ellipse(shapeSpace + 4 * sqSize, shapeSpace + 4 * sqSize, sqSize/dotSize, 
        sqSize/dotSize);

    // third row dots
    fill(120, 88, 111); // purple
    sqSize -= sqInc; // Set sqSize to third square
    ellipse(shapeSpace + 3 * sqSize, shapeSpace + 3 * sqSize, sqSize/dotSize, 
        sqSize/dotSize);

    // second row dots
    fill(111, 208, 140); // green
    sqSize -= sqInc;
    ellipse(shapeSpace + 2 * sqSize, shapeSpace + 2 * sqSize, sqSize/dotSize, 
        sqSize/dotSize);

    // first row dot
    fill(120, 88, 111); // purple
    ellipse(shapeSpace, shapeSpace, sqSize/dotSize, 
        sqSize/dotSize);

    // Return to saved settings
    pop();
}

function mousePressed(){
    colorScheme = -colorScheme;
}

Looking Outwards-03: Section B

Desbians Design Research is a company dedicated to computational fabrication and design. Of their many projects, I find the Fahz, face in a vase, project fascinating. This project transforms photographs of faces in profile by first converting them into vector coordinates. The coordinates of up to four photos are uploaded into software that generates a unique vase design that incorporates each face. The final piece is 3D printed.

There are four distinct faces in this vase.

The faces are not carved into the vase, but are created in the negative space around the vase. The minimalism and simplicity of this project are at odds with the hyper, overproduced world we live in. The art found in the absence inspires me. Sometimes less really is more.

This project was originated by Daniel Desbians in 2014. He modeled the vases with Rhino 3D design software with an add-on called Grasshopper to aid with creating algorithms. Python was also used to put it all together. Each vase is unique and designed by software from a parametric model. This is an example of generative art fabricated into physical form.

LO 3 – Computational Fabrication

The reason why I so admire the Voronoi architecture statue made by June Lee is that I am really impressed by the organic form in architecture. The Voronoi diagram is a type of partition created by segmenting midpoints of distances of different points. To make this random geometric two-dimensional diagram look smooth and organic, the creator smoothened the shape of each Voronoi cell in grasshopper, then using the negative space created by smaller smoothened cells and the square border of the cube, the creator made a wall with organic Voronoi shaped holes. One great thing about using the grasshopper algorithm to generate shapes is that it allows the creator to easily tweak and manipulate every aspect of the geometry. For example, in this project, June Lee is able to change the size of the cube, how big the holes are, and even how smooth those holes are, without remaking the whole shape.

Voronoi Cube by June Lee

source