Project 09: Computational Portrait

I created my self-portrait using different symbols that are linked to the pixel colors on the image. When the mouse is pressed, the shapes are drawn to create the image.

sketch
//amy hu
//amyhu
//section d

var img;
var smallPoint, largePoint;
var symbols = ["❀", "❋", "✯"]

function preload() {
    img = loadImage('https://i.imgur.com/2ZzOdG6.png');
}

function setup() {
    createCanvas(450,450);
    // smallPoint = 5;
    // largePoint = 20;
    imageMode(CENTER);
    noStroke();
    background(255);
    img.loadPixels();
}

function draw() {
    //mouse location determines point size
    var pointillize = map(mouseX, 0, width, smallPoint, largePoint);

    //picks random x y value
    var x = floor(random(img.width));
    var y = floor(random(img.height));

    //gets pixel color form a xy value
    var pix = img.get(mouseX, mouseY);

    //fills pixel color
    fill(pix, 128);
    ellipse(x, y, pointillize, pointillize);

    //draws symbols when mouse is pressed 
    if(mouseIsPressed){
        textSize(random(10,35));
        text(random(symbols), mouseX, mouseY);
    }
}

Looking Outwards 11

I chose to look at the article about the Beeple sale by Sebastian Smee. The piece discusses the ongoing issue of the value of NFTs (non-fungible tokens), which is digital art made to be owned by individuals through blockchain security. (Note that any digital artist who has ever done commissions has likely found ways to maintain the commission-holder’s ownership of the work without all this extra stuff.)

The Image of the Beeple piece “Everydays: The First 5000 Days” from the Washington Post


I found the piece to be overall quite interesting, as it posits that art must be to a degree anti-capitalist, as it is a thing without a functional purpose (necessarily, there can certainly be functional things which are artistic, but generally it is not meant to carry out a menial task like say sweeping the floor, or something) and because it is without functional purpose, the purchase and sale of it is purely what Smee says Marxists call “commodity fetishizing.” While I agree that the concept of any piece of art being sold for such an exorbitant amount of money as an NFT is certainly a yawn, and that the piece isn’t particularly interesting, what I think is more interesting perhaps is the argument that Smee is being very careful to word in the good American way:


Art shouldn’t need money to be interesting. Art isn’t a commodity to be bought, sold, traded, and appreciated in value for some hack who didn’t even make it to make millions off the piece a hundred years after the artist is dead. Nor is it a vehicle for capitalist expansion, as much as capitalists may want this, because the work of an artist is not meant to become a stock. There is art meant to be sold, there is art meant to help prop up an artist’s livelihood, but art hadn’t been made with the intent to manipulate the market (necessarily) until now. I think that’s what’s interesting. We’ve entered such a stage of capitalism where we are cautious to not assign something a monetary value, even garbage made by an AI. Imagine where we would be, artistically, if we supported our creatives monetarily through social welfare and encouraged them to create freely, and explore the limits of their potential?


I guarantee you the world would be full of artists. The argument against the decapitalizing of art and granting it public support is often that the “quality of art would decrease” because we aren’t pushing people to compete. But if this sale proves anything, the opposite is true. The commodification of art has led to a decline in quality, not the other way around. The fear of poor quality art is ridiculous especially coming from people who have no artistic background. Were I to choose, I’d rather have a world of half-hearted artists than a world of unwilling and unwitting soldiers, corrupt corporations and morally bankrupt politicians.

project 11: landscape

midnight stroll
// isis berymon section D

var buildings = [];
var stars = [];
var streetlights = [];
var ground = 160;

function setup() {
    createCanvas(480, 200);
    frameRate(10);

    //initial scene
    for(var i =0; i < 10; i++){
        var rx = random(width);
        buildings[i] = makeBuilding(rx);
    }
    for(var i=0; i< 30; i++){
        var rx = random(width);
        stars[i] = makeStar(rx);
    }
    for(var i = 0; i<3; i++){
        var rx = random(width);
        streetlights[i] = makeLight(rx);
    }
}

function draw() {
    background(81, 61, 128); //dark purple sky
    showScene();
    updateScene();
    //dark grey road
    fill(84);
    noStroke();
    rect(0, ground, width, height-ground);
}

function showScene(){ //draw and move all objects
    //show stars
    for(var i =0; i< stars.length; i++){
        stars[i].move();
        stars[i].draw();
    }
    //show buildings
    for(var i = 0; i < buildings.length; i++){
        buildings[i].move();
        buildings[i].draw();
    }
    //show streetlights
    for(var i= 0; i < streetlights.length; i++){
        streetlights[i].move();
        streetlights[i].draw();
    }
}

function updateScene(){ //remove and add to arrays
    //remove stars offscren
    var keepstar = [];
    for(var i = 0; i < stars.length; i++){
        if(stars[i].x + 3 > 0){
            keepstar.push(stars[i]);
        }
    }
    stars = keepstar;
    //add new stars randomly
    var nstr = .1;
    if(random(1) < nstr){
        stars.push(makeStar(width+3));
    }
    //remove buildings offscreen
    var keepbldg = [];
    for(var i = 0; i < buildings.length; i++){
        if(buildings[i].x + buildings[i].bw > 0){
            keepbldg.push(buildings[i]);
        }
    }
    buildings = keepbldg;
    //add new buildings randomly
    var nbldg = .03;
    if(random(1) < nbldg){
        buildings.push(makeBuilding(width));
    }
    //remove lights offscreen
    var keeplight = [];
    for(var i = 0; i < streetlights.length; i++){
        if(streetlights[i].x + 15 > 0){
            keeplight.push(streetlights[i]);
        }
    }
    streetlights = keeplight;
    //add new lights randomly
    var nlight = .005;
    if(random(1) < nlight){
        streetlights.push(makeLight(width));
    }
}

function makeStar(sx){ //star object constructor
    var star = {x: sx,
                y: random(ground),
                speed: -.7,
                move: moveLeft,
                draw: drawS}
    return star;
}

function drawS(){ //white star
    stroke(255);
    line(this.x, this.y-3, this.x, this.y+3);
    line(this.x-3, this.y, this.x+3, this.y);
}

function makeBuilding(bx){ //building object constructor
    var bldg = {x: bx,
                bw: round(random(50, 100)),
                bh: round(random(30, 120)),
                speed: -2,
                move: moveLeft,
                draw: drawB}
    return bldg;
}

function drawB(){
    fill(32, 27, 43); //dark purple grey building
    noStroke();
    rect(this.x, ground-this.bh, this.bw, this.bh);
    fill(95, 86, 115); //light purple grey shading
    rect(this.x, ground-this.bh, 6, this.bh);
    rect(this.x, ground-this.bh, this.bw, 3);
}

function makeLight(lx){
    var light = {x: lx,
                    speed: -2,
                    move: moveLeft,
                    draw: drawL}
    return light; //light object constructor
}

function drawL(){
    fill(112); //mid grey
    rect(this.x, 130, 5, 30);
    //flickering lights
    if(random(1) > .8){
        fill(237, 196, 114); //yellow
    } else {
        fill(122);
    }
    rect(this.x+5, 130, 10, 5); //grey streetlight with flickering light
}

function moveLeft(){ //move left every frame
    this.x += this.speed;
}

blog 11

   This week’s reading was related to AI. Something interesting that is arising from assistive technology based on AI is the influence of our biases. Because AI is fed on data that we give the programs, both the data and the process used to determine which data should be used allows for biases to seep in. An upsetting example I remember was from a few years ago, a black couple had taken a picture and had their image brought up when people were searching for gorilla pictures. Another example is that security cameras and face detection technology have far more errors when needing to identify the faces of people of color. These weren’t intention choices made by some asshole in some random cubicle but were instead a combination of numerous errors and biases baked into our society that we then fed to the algorithm. In one of my design classes we learned about how even cameras themselves were made to make and replicate lighter skin better, resulting in needing for overcorrection of darker skin tones and difficulty capturing faces etc. While it’s easy to be upset at Google, the algorithm, or technology for having these “biases” just from a simple glance it becomes obvious that they are only reflecting what we as a society have already created and enforced. AI is almost like a child, we teach it everything by feeding it what we know, yet when it comes out a certain way we get mad even though we were the direct creators.

2. Looking Outwards 11: Societal Impacts of Digital Art

While reading the article ‘NFTs and Copyright’ I released the unethical use of art and artworks in the new digital world. In my opinion, obviously it isn’t right for an artwork to be sold off at an online auction without the consent of the artist, but that won’t cloud the reality that it happens, more so now than before the boom of the internet. Reading about the impact NFTs have had on this was awakening and it made me wonder as an artist if it is even right to put out your work on digital platforms where anyone can access it and potentially illegally sell it and make money. Although NFTs are a great source for artists to earn money as it has opened up an entirely new avenue of revenue generation for artists. I was amazed to learn about how NFTs operate and how the token is for copyright and ownership, however, it is kind of terrifying to hear and learn how unethically it can be used. I honestly do not know if this problem could be curbed, but I sincerely hope that they introduce more rigorous checks to ensure that the artwork’s token is the right copyright holder of that piece, as it sounds like an interesting avenue for new generation artists.

Link

Project 11 – Moving Landscape

The project is a relaxing view of sunset in an air balloon – if you take the time to watch the full animation, you can see the colors of the sky, sun, and clouds change as well through gradual RGB changes and color theory. I wanted a lowpoly style animation, and worked to get effect through the “shifting clouds”

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

var r = 140;
var g = 200;
var b = 230;
var cloudR = 255;
var cloudG = 255;
var cloudB = 255;
var sunX;
var sunY = 0; 
var sunR = 255;
var sunG = 247;
var sunB = 197;
var sunSize = 50;


var airBalloons = [];
var clouds = [];
var sceneCount = 0;
var bPics = ["https://i.imgur.com/El159Qi.png", "https://i.imgur.com/Inz2K7i.png", "https://i.imgur.com/IjQkLRr.png"]
var balloons = []

function preload() {
	//load the images
	for (var i = 0; i < bPics.length; i++) {
		balloons.push(loadImage(bPics[i]));
	}
}

function setup() {
    createCanvas(480, 200);
    sunX = width;
  	frameRate(10);

}

function draw() {

	var sky = color(r, g, b);
	fill(sky);
	rect(0, 0, width, height);


	//sky color change
	if (r < 255) {
		r += 0.1

	} 
	if (g > 150) {
		g -= 0.1;

	} 
	if (b > 87) {
		b -= 0.1;

	}

	//sky grandient
	for (var i = 0; i < 50; i+= 0.5) {
		stroke(r + i, g + i, b + i);
		var amount = map(i * 2, 0, 100, height * 0.75, height);
		line(0, amount, width, amount);
	}

	//SUN 
	if (sunR > 242) {
		sunR -= 0.1;
	}
	if (sunG > 60) {
		sunG -= 0.1;
	}
	if (sunB > 10) {
		sunB -= 0.1;
	}

	noStroke();
	fill(sunR, sunG, sunB);
	ellipse(sunX, sunY, sunSize, sunSize)

	sunX -= 0.25;
	sunY += 0.1;
	sunSize += 0.01;


	//cloud color change
	if (cloudR >= 244) {
		cloudR -= 0.05;
	}
	if (cloudG >= 223) {
		cloudG -= 0.05;
	} 
	if (cloudB > 208) {
		cloudB -= 0.05;
	}
	generateClouds();
	generateAirBalloons();


	updateClouds();
	updateBalloons();
	sceneCount++;

}

function makeCloud(stormCloud) {
	var cloud = {
		cX: random(0, 1.5 * width), cY: random(0, height), cDx:0, 
		cW: random(100, 300), 
		isStorm: stormCloud,
		show: drawCloud, 
		move: moveCloud, 
	}
	return cloud;
}


function drawCloud() {
	noStroke();
	var xInterval = this.cW / 8; //makes sure the x points never exceed the assigned cloudWidth
	var xPoint = this.cX
	var yPoint = this.cY

	//foreground clouds are lightest
	if (this.cW > 200) {
		this.cDx = 5;
		fill(cloudR, cloudG, cloudB, 255);
	} else if (this.cW > 100){	//midGround are slightly opaque
		fill(cloudR, cloudG, cloudB, 200)
		this.cDx = 3;
	} else {
		fill(cloudR, cloudG, cloudB, 100);	//background are most opaque
		this.cDx = 1;
	}
	//checks if its storm cloud
	if (this.isStorm) {
		fill(200, 255);
		
	}


	//generating points for the lowPoly Clouds
	var y = [yPoint, yPoint - 15, yPoint - 20, yPoint - 15, yPoint, yPoint + 15, yPoint + 20, yPoint + 15];
	//Y points are fixed
	var x = [xPoint];
	for (var i = 0; i < 8; i++) {
		if (i < 4) {
			xPoint += xInterval
		} else {
			xPoint -= xInterval
		}
		x.push(xPoint);
		

	}


		//gives animating effect
		for (var i = 0; i < x.length; i++) {
			x[i] += random(-5, 5);
			y[i] += random(-5, 5);
		}



	//draw cloud based on array made
	beginShape();
	for (var i = 0; i < x.length; i++) {
		vertex(x[i], y[i]);
	}
	endShape(CLOSE);

}


function moveCloud() {
	//updates cloudX by its speed
	this.cX -= this.cDx;

	//when cloudX is off left of screen, assigns it new position
	if (this.cX + this.cW < 0) {	//checks right side of cloud
		this.cX = random(width, 1.5 * width);
		this.cY = random(0, height / 1.5);
	}
}


function updateClouds() {
	//moves all the clouds from global cloud array
	for (var i = 0; i < clouds.length; i++) {
		clouds[i].move();
		
	}
}

function generateClouds() {
	//creates clouds with a 1/8 chance of a cloud being a storm cloud
	var isStorm = false;
	for (var i = 0; i < 15; i++) {
		
		if (amount = Math.floor(random(1, 8)) == 2) {
			isStorm = true;
		}
    	var c = makeCloud(isStorm);
    	clouds.push(c);
    	clouds[i].show();
    	isStorm = false;
    }
}

function generateAirBalloons() {
	//generates air balloons from image I have
	for (var i = 0; i < 10; i++) {
		var b = makeBalloon()
		airBalloons.push(b);
		airBalloons[i].show();
	}
}

function makeBalloon() {
	var b = {
		bX: random(0, width), bY: random(height * -5, height),
		bDx: Math.floor(random(-4, 4)), bDy: Math.floor(random(2, 4)),
		bImage:  Math.floor(random(0, 3)),	//ranodm number to select the type of balloon image
		ratio: Math.floor(random(0, 2)),
		show: drawBalloon, 
		float: floatBalloon,
	}

	return b;
}

function updateBalloons() {
	for (var i = 0; i < airBalloons.length; i++) {
		airBalloons[i].float();
	}
}

function floatBalloon() {
	this.bX += this.bDx;
	this.bY += this.bDy;

	if (this.bY > height) {
		this.bY = random(height * -5, height * -0.25);
		this.bX = random(0, width);
	}

}

function drawBalloon() {
	image(balloons[this.bImage], this.bX, this.bY, balloons[this.bImage].width * this.ratio, balloons[this.bImage].height * this.ratio);
}

Looking Outwards 11-Racial Bias in AI

The article AI & Creativity: Addressing Racial Bias in Computer Graphics discusses a topic brought up by Theodore Kim at SIGGRAPH 2021. Kim asserts that algorithms used for human computer generated images have encoded racial biases that reflect in the final outcome, and are being propagated in more forms of CG AI – a dangerous seed in spreading racial bias within society. Specifically, Kim talks about the subsurface light transport feature that CG artists use to give a realistic glow to their characters. While it reflects well in white figures, it produces inaccurate results when translated to darker skinned ones, as they have an observed shine to their skin surface. The same can be applied with the variety in hair textures, and the accuracy with portraying different hairs/defaulting to blonde hair. The issue with this is that algorithms are programmed to more accurately depict lighter skinned individuals compared to darker ones, creating a bias for CG artists to choose the first when doing these projects. Kim’s call to action is for these artists to be more conscious of their encoded racial biases, and make the effort to develop diversity with their own works. It was especially interesting when the comparison was brought up in regards to fine arts, and how artists had to “learn” to paint darker skinned people as there was a lack of exposure during their education.

https://nettricegaskins.medium.com/ai-creativity-addressing-racial-bias-in-computer-graphics-f5fc0c255e7

Looking Outwards 11

For this Week’s Looking Outwards, I read AI & Creativity: Addressing Racial Bias in ComputerGraphics. I chose this article because it aligns with a recent discussion we had in Design Cultures about design and race. In the article they talk about racial bias in computer graphic tracing back to when the technology was first developed. One example given is the glow that is added to create inclusion of lighting. When these techniques were developed they did not count for the effects it would have on darker skin. The result is that darker skin looks less realistic. Another example is in hair generation software that often ignores type 4, afro hair types. These issues with software limit creators and representation in video games, and other computer aided works. One interesting solution the article gave was to use deep machine learning to generate better images, as an example of this they shared artwork Netteice Gaskins created by such algorithms.

https://nettricegaskins.medium.com/ai-creativity-addressing-racial-bias-in-computer-graphics-f5fc0c255e7

Nettrice Gaskins. “Dandy Dream,” 2021. Created using a deep learning algorithm

Looking Outwards 11: Societal Impacts of Digital Art

Article Read: https://www.washingtonpost.com/entertainment/museums/beeple-digital-artwork-sale-perspective/2021/03/15/6afc1540-8369-11eb-81db-b02f0398f49a_story.html

This article discusses the issue of copyright and the high value being placed on digital art which in itself is a controversial subject on whether or not it is considered art. The new trend of digital art or as the author argues “a marketable digital product” rather than referring to it as art, is being sold for very high prices to signify ownership. The idea that art has become a commodity that will significantly increase in value over time seems to be the main incentive. In this article, the author criticizes the work of Beeple, who is a digital artist who recently sold a digital file titled “Everydays: The First 5000 Days” for $69.3 million which was sold for significantly more than Titan or Raphael’s paintings. The author talks about how there isn’t a rule to determine the value of art but rather no nowadays, marketing and desire have overtaken art.