Looking through insanely cool “Johnny Cash Project” was really interesting and fun for me. I admired how it used generative art to create a story told by real people, real fans across the world that were touched by this person. Aaron Koblin and the team were able to create an interactive website that helped make a crops-sourced music video. Any visitor on the website was able to paint their vision on any frame of the music video. This was then turned into an animated music video which garnished many awards and honors. I think it’s interesting to see how generative art can take the place in so many forms. Aaron Koblin is known for his work using data visualization in which he did a phenomenal job with this project remembering a great artist. Something really interesting is that the music video continues to grow as more people continue to participate.
Link: http://sansumbrella.com/works/2011/drawing-water/ David Wicks Drawing Water Spring 2011
I think the project “Drawing Water” by David Wicks is a very impressive and amazing work.
1. Regarding the project, what do you admire about it, and why do you admire these aspects of it?
Firstly, on the aspects of aesthetics, the works are very visually impressive and pleasing. The images have so many details–The strokes are so delicate and look like the strokes of pencils. The combination of colors, shades and the background is very comfortable as well–blue and white, or blue and black. They present the pattern of the flow of water nicely. What’s more, what makes it admirable is that the visual representations are dynamic. That is to say, the patterns or colors can change according to the amount of rainfall.
2. What do you know (or what do you suppose) about the algorithm that generated the work?
The algorithm that the artist used is related to water resources (“the amount of rainfall”, “where waterfalls” and “where it is consumed within the United States”). The further the rainfall, the darker or whiter the color.
3. In what ways are the creator’s artistic sensibilities manifest in their algorithm?
The paths are created based on real-life data of waterfalls, but the creator also adds his imagination when trying to show the pattern of the flow of water. That is to say, David Wicks turns the data of rainfalls into visual representations–by showing the flowing patterns of water and showing the number of rainfalls through those beautiful lines.
Hi here are my faces! The hardest part of the project is to create all these different options for hair, eyes, mouth etc. Then linking those to the random function.
This face generator makes lots of cool folks to chill with! About half of the characteristics of each person — for instance, the shirt size and color, the background, and the skin tone — are completely random, while other components such as the eye color or headwear/hairstyle are randomly selected from a list of options. Writing this code really dusted off the ol’ middle school algebra. Some of said algebra is visible in the positively chicken-scratch notebook hieroglyphs I made while figuring out some of the first few variables. Once I had those established, though, I found I wasn’t writing anything down, instead just relying on the variables I’d already defined to write the next ones–quite the departure from how I worked through last week’s homework.
I’m inspired by the landscape-generating algorithm Minecraft uses to build its maps. Each Minecraft world has a completely unique map, but they are generated piecemeal rather than all in one go–the map is built one 16×16 block “chunk” at a time under the player as they wander. The worlds are built a layer at a time, using a 64-bit random number called a seed that determines the shape, biome, and finally content of each chunk, though the game also relies on “smoothing” functions that ensure biomes blend logically into one another–for example, there won’t be a snowy forest next to a desert.
The landscape-generating algorithm Minecraft is the soul of the game. It creates in the player a sense of thrill and wonder about exploring a completely unknown landscape spreading out around them – a feeling that’s hard to come by in a highly connected 21st-century world. In a more technical sense, it’s also nifty in that it allows the game itself to be quite small–the whole thing, fresh out of the box (so to speak), takes up less than a gigabyte, making for an easy download.
The generative art piece that inspired me was Aaron Koblin’s project called Flight Patterns. This piece of art is created by parsing FAA data and creates different lines and colors according to flight paths. This project is impressive not only because of the technology and algorithm put into it but also the presentation of different colors and how he made multiple days worth of flights into one photo. Especially the intersections between flight paths generate a big spectrum of colors of light and as well as more tones. I suppose that he parsed multiple days of FAA data and made it into a single data piece and the colors represent different time, generating a large spectrum of colors. The different colors for different time was very intentional and generated a beautiful combination of brightness and tone. The creator’s ability to program and analyze data boosted his artistic ability to create this great piece.
My variable faces are all completely computer generated and unique. Every feature is drawn from a set of randomly generated variables. I like the variation in emotions they can express.
// Evan Stuhlfire
// estuhlfi, Section B
// Project-02: Variable Faces; Face Variables
// Declare global variables
// variable controling head dimensions and shape
var headX = 0; // x value of head center
var headY = 0; // y value of head center
var minHead = 100;
var maxHeadW = 500; //max head width
var maxHeadH = 420; // max head height
var headHeight = 300;
var headWidth = 350;
// variables controling face dimensions and attributes
var eyeSize = 25;
var percentEyeW = 1; // value to adjust eye shape and position
var percentEyeH = 1; // value to adjust eye shape and position
var eyeVert = 2;
var lookAdjustLeft = .25; // Controls eye placement for look direction
var lookAdjustRight = .25;
var lookMax = .45;
// variable to control nose
var nose1 = 1;
var nose2 = 1.1;
var nose3 = 1.1;
var nose4 = 1;
var noseEnd = 1;
var noseLeft1 = 1;
var noseLeft2 = .9;
var noseLeft2 = 1;
// mouth variables
var noseMouthGap = 10;
var mouthStart = 1;
var mouth1 = 1.05;
var mouth2 = 1;
var mouthIncrease = 1.02;
// color variables
var color1 = 0;
var color2 = 0;
var color3 = 0;
function setup() {
createCanvas(640, 480);
// set head center
centerX = width/2;
centerY = height/2;
// get initial colors
getRandomColors();
}
function draw() {
var colorChange = .4; // factor to modify color
background(color1, color2, color3); // draw background from color variables
// calculate eyes
var eyeLeftX = centerX - headWidth * lookAdjustLeft; // x coordingate of left eye
// x coordinate of right eye, can look different directions
var eyeRightX = centerX + headWidth * lookAdjustRight;
var eyeHeight = min(eyeSize * percentEyeH, headHeight * .90);
var eyeWidth = eyeSize * percentEyeW;
var eyePositionY = height / eyeVert; // calculate vertical position of eyes
// calculate pupils
var pupilSize = .2;
var pupilLook = 4;
var pupilX = eyeLeftX;
var pupilY = eyeRightX;
if (lookAdjustLeft > lookAdjustRight){ // looking left move pupils left
pupilX -= pupilLook;
pupilY -= pupilLook;
} else { // looking right move pupils right
pupilX += pupilLook;
pupilY += pupilLook;
}
// variables for nose
var maxNose = .90;
var nose1X = (eyeLeftX + eyeRightX)/2;
var nose1Y = eyePositionY;
if (lookAdjustLeft > lookAdjustRight) {
// looking left point nose left
var nose2X = nose1X * noseLeft1;
var nose2Y= min(nose1Y * nose2, (centerY + headHeight/2) * maxNose);
var nose3X = nose2X * noseLeft2;
var nose3Y= min(nose2Y * nose3, (centerY + headHeight/2) * maxNose);
var nose4X= nose1X * noseLeft3;
var nose4Y= min(nose3Y * nose4, (centerY + headHeight/2) * maxNose + noseMouthGap);
} else {
// looking right point nose right
var nose2X = nose1X * nose1;
var nose2Y= min(nose1Y * nose2, (centerY + headHeight/2) * maxNose);
var nose3X = nose2X * nose3;
var nose3Y= min(nose2Y * nose3, (centerY + headHeight/2) * maxNose);
var nose4X= nose1X * noseEnd;
var nose4Y= min(nose3Y * nose4, (centerY + headHeight/2) * maxNose + noseMouthGap);
}
// calculate mouth
var maxMouth = .98;
var mouth1X = centerX * mouthStart;
var mouth1Y = min(nose4Y * mouth1, (centerY + headHeight/2) - noseMouthGap);
// keep mouth on face
if (headHeight > headWidth){
mouth1X = centerX - noseMouthGap;
}
var mouth2X = mouth1X * mouthIncrease;
var mouth2Y = mouth1Y * mouth2;
var mouth3X = mouth2X * mouthIncrease;
var mouth3Y = mouth2Y;
var mouth4X = mouth3X * mouthIncrease;
var mouth4Y = mouth1Y;
// draw head
fill(color1 * colorChange, color2, color3);
ellipse(centerX, centerY, headWidth, headHeight);
// draw eyes
fill(color1, color2 * colorChange, color3);
ellipse(eyeLeftX, eyePositionY, eyeWidth, eyeHeight);
ellipse(eyeRightX, eyePositionY, eyeWidth, eyeHeight);
// draw pupils
fill(10);
ellipse(pupilX, eyePositionY, eyeWidth * pupilSize, eyeHeight * pupilSize);
ellipse(pupilY, eyePositionY, eyeWidth * pupilSize, eyeHeight * pupilSize);
// draw mouth
beginShape();
curveVertex(mouth1X, mouth1Y);
curveVertex(mouth1X, mouth1Y);
curveVertex(mouth2X, mouth2Y);
curveVertex(mouth3X, mouth3Y);
curveVertex(mouth4X, mouth4Y);
curveVertex(mouth4X, mouth4Y);
endShape();
// draw nose
fill(color1 * colorChange, color2, color3);
beginShape();
curveVertex(nose1X, nose1Y);
curveVertex(nose1X, nose1Y);
curveVertex(nose2X, nose2Y);
curveVertex(nose3X, nose3Y);
curveVertex(nose4X, nose4Y);
curveVertex(nose4X, nose4Y);
endShape();
}
function mousePressed() {
// When the mouse is clicked random values are generated to control the
// dimensions, position, and color of a face
// randomly generate head value
headWidth = random(minHead, maxHeadW);
headHeight = random(minHead, maxHeadH);
// randomly generate eye values
eyeSize = headWidth * random(.1, .3);
percentEyeW = random(.5, 1);
percentEyeH = random(.5, 1);
eyeVert = random(2, 2.25); // vertical position of eyes
lookAdjustLeft = random(.01, lookMax);
lookAdjustRight = lookMax - lookAdjustLeft;
// generate nose values
nose1 = random(1, 1.1);
nose2 = random(1, 1.2);
nose3 = random(1.1, 1.15);
nose4 = random(.98, 1.05);
noseEnd = random(.95, 1.05);
noseLeft1 = random(.95, 1);
noseLeft2 = random(.85, 1);
noseLeft3 = random(1, 1.12);
// generate mouth values
mouthStart = random(.95, 1.05);
mouth1 = random(1.05, 1.2);
mouth2 = random(.98, 1.02);
mouthIncrease = random(1.02, 1.03);
// randomly generate a new color combination
getRandomColors();
}
function getRandomColors(){
// function generates a random number for color variables
color1 = random(80, 255);
color2 = random(80, 255);
color3 = random(80, 255);
}