Sammie Kim – Final Project – 12

For this project, I wanted to create a recycling game that educates all age levels upon proper recycling, which is one of the basic ways that we can all contribute to protect our environment. Through the process, I learned a lot, especially how there are a lot of trash items that are not recyclable—this emphasized the importance of reusing items and reducing waste in general. The user can simply explore the environment, drag any waste item and drop it in any of the waste bins below. If the waste is thrown in the wrong bin, information will automatically show up on the top to guide the user, while also giving extra tips for reducing such trash. 

sketch

//Sammie Kim
//Section D
//sammiek@andrew.cmu.edu
//Final Project

//Global Variables
var FOOD = 0; //Index number within the waste bin type array
var PLASTIC = 1;
var PAPER = 2;
var TRASH = 3;
var score = 0;
var styrofoamBox = createStyrofoamBox();
var tissue = createTissue();
var hanger = createHanger();
var newspaper = createNewspaper();
var pizzaBox = createPizzaBox();
var plasticBag = createPlasticBag();
var plasticBottle = createPlasticBottle();
var paperBag = createPaperBag();
var appleCore = createApple();
var coffeeCup = createCoffee();
var fishbones = createFishbones();
var toothpaste = createToothpaste();
var mirror = createMirror();
var bubblewrap = createBubbleWrap();
var foodBin = createFoodBin();
var plasticBin = createPlasticBin();
var paperBin = createPaperBin();
var trashBin = createTrashBin();
var wastes = [styrofoamBox, tissue, hanger, newspaper, pizzaBox, plasticBag,
              plasticBottle, paperBag, appleCore, coffeeCup, fishbones,
              toothpaste, mirror, bubblewrap];
var wasteBins = [foodBin, plasticBin, paperBin, trashBin];
//Boolean Variables
var correct = false;
var selected = false;

//Use objects to create different wastes and wastebins with specific traits
function createStyrofoamBox() {
    var styrofoamBox = {
        url: "https://i.imgur.com/Lb1P88W.png",
        initX: 78,
        initY: 102,
        x: 78,
        y: 102,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Styrofoam is a non-recyclable material because it contains "
              + "polysteryene, which is non-biodegradable."
        }
    return styrofoamBox;
}

function createTissue() {
    var tissue = {
        url: "https://i.imgur.com/s6rZAJu.png",
        initX: 145,
        initY: 95,
        x: 145,
        y: 95,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Dirty tissues should be thrown in trash."
        }
    return tissue;
}

function createHanger() {
    var hanger = {
        url: "https://i.imgur.com/dE1sDsn.png",
        initX: 253,
        initY: 163,
        x: 253,
        y: 163,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Plastic hangers are not purely plastic, and their curved ends "
              + "can be problematic in recycling equipment. "
        }
    return hanger;
}

function createNewspaper() {
    var newspaper = {
        url: "https://i.imgur.com/FkD5sJK.png",
        initX: 0,
        initY: 253,
        x: 0,
        y: 253,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: PAPER,
        note: "Newspapers should be recycled in paperbin."
        }
    return newspaper;
}

function createPizzaBox() {
    var pizzaBox = {
        url: "https://i.imgur.com/ZRjCbEW.png",
        initX: 172,
        initY: 102,
        x: 172,
        y: 102,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Pizzabox cannot be recycled due to its wet and greasy cardboard "
              + "that cannot be processed in recycling equipment. "
              + "It can also attract insects and rodents."
        }
    return pizzaBox;
}

function createPlasticBag() {
    var platicBag = {
        url: "https://i.imgur.com/PDtsB6D.png",
        initX: 94,
        initY: 172,
        x: 94,
        y: 172,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: PLASTIC,
        note: "Most recycling facilities can only handle rigid materials that can "
              + "be separated, so plastic bags and wraps are generally not accepted. "
              + "But we can always reuse them for collecting trash."
        }
    return platicBag;
}

function createPlasticBottle() {
    var plasticBottle = {
        url: "https://i.imgur.com/6OEa9bA.png",
        initX: 393,
        initY: 95,
        x: 393,
        y: 95,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: PLASTIC,
        note: "Empty plastic bottles belong in the plastic bin. "
        + "The better option is to carry reusable waterbottles."
        }
    return plasticBottle;
}

function createPaperBag() {
    var paperBag = {
        url: "https://i.imgur.com/QsPO9ph.png",
        initX: 364,
        initY: 153,
        x: 364,
        y: 153,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: PAPER,
        note: "Clean paper bags belong in the paper bin. Still, the best "
        + "option would be to reuse them."
        }
    return paperBag;
}

function createApple() {
    var appleCore = {
        url: "https://i.imgur.com/QX98sKU.png",
        initX: 274,
        initY: 258,
        x: 274,
        y: 258,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: FOOD,
        note: "Any type of leftover food belong in the organic waste bin."
        }
    return appleCore;
}

function createCoffee() {
    var coffeeCup = {
        url: "https://i.imgur.com/sys0QnS.png",
        initX: 351,
        initY: 87,
        x: 351,
        y: 87,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Unlike most paper items, paper cups are usually coated in platic "
              + "to hold liquid to prevent leaking. "
              + "Although many cafes are beginning to use compostable cups, "
              + "the best option is carrying coffee mugs or reusable bottles."
        }
    return coffeeCup;
}

function createFishbones() {
    var fishbones = {
        url: "https://i.imgur.com/wju8gLe.png",
        initX: 205,
        initY: 264,
        x: 205,
        y: 264,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: FOOD,
        note: "Any type of leftover food belong in the organic waste bin."
        }
    return fishbones;
}

function createToothpaste() {
    var toothpaste = {
        url: "https://i.imgur.com/na3BnTw.png",
        initX: 104,
        initY: 260,
        x: 104,
        y: 260,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: PLASTIC,
        note: "Toothpaste tubes should be properly cleaned out before "
              + "being placed in the plastic recycling bin."
        }
    return toothpaste;
}

function createMirror() {
    var mirror = {
        url: "https://i.imgur.com/NAh1S2x.png",
        initX: 142,
        initY: 130,
        x: 142,
        y: 130,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Mirrors cannot be recycled due to the coating used on glass "
              + "to make it reflective. Be sure to wrap broken mirror pieces "
              + "before throwing them in the garbage."
        }
    return mirror;
}

function createBubbleWrap() {
    var bubblewrap = {
        url: "https://i.imgur.com/cvJ1Iou.png",
        initX: 336,
        initY: 245,
        x: 336,
        y: 245,
        selected: false,
        stay: true,
        dragging: false,
        informing: false,
        type: TRASH,
        note: "Although many plastics are recylable, bubble wraps and bags "
              + "cannot be recyled due to their thin films that can get tangled "
              + "in recycling machines."
        }
    return bubblewrap;
}

function createPaperBin() {
    var paperBin = {
        url: "https://i.imgur.com/AgJIG61.png",
        x: 229,
        y: 342,
      }
    return paperBin;
}

function createPlasticBin() {
    var plasticBin = {
        url: "https://i.imgur.com/6x6FPJW.png",
        x: 117,
        y: 342,
    }
    return plasticBin;
}

function createFoodBin() {
    var foodBin = {
        url: "https://i.imgur.com/sSve89v.png",
        x: 8,
        y: 342,
    }
    return foodBin;
}

function createTrashBin() {
    var trashBin = {
        url: "https://i.imgur.com/jm4NMB8.png",
        x: 343,
        y: 342,
    }
    return trashBin;
}

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

function draw() {
    //load images for background, wastes, and waste bins
    background(220);
    image(backgroundPic, 0, 0);
    for (var i = 0; i < wasteBins.length; i++) {
        image(wasteBinsPics[i], wasteBins[i].x, wasteBins[i].y);
    }
    //Show explanation on top of the canvas if informing is true
    for (var i = 0; i < wastes.length; i++) {
        if (wastes[i].informing) {
            fill(220);
            noStroke();
            rect(0, 0, 450, 60);
            fill(0);
            text(wastes[i].note, 10, 10, 440, 480);//wrapping text within canvas
        }
        if (wastes[i].stay) { //if stay is true, images are all shown on canvas
            image(wastePics[i], wastes[i].x, wastes[i].y);
            if (wastes[i].dragging) {
                //update waste with current mouse locations
                wastes[i].x = mouseX - wastePics[i].width / 2;//offset amount
                wastes[i].y = mouseY - wastePics[i].height / 2;
        }
      }
    }
    if (correct) {
        text("Correct!", 10, 20); //shows up when answer is correct
    }
    fill(255);
    text("Score: " + score, 10, 90); //show scoreboard
}

function preload() {
    //Preload all the images by pushing the objects' URL into new array
    var backgroundURL = "https://i.imgur.com/4jWCbcI.png"
    backgroundPic = loadImage(backgroundURL);
    wastePics = [];
    for (var i = 0; i < wastes.length; i++) {
        wastePics.push(loadImage(wastes[i].url));
    }
    wasteBinsPics = []
    for (var i = 0; i < wasteBins.length; i++) {
        wasteBinsPics.push(loadImage(wasteBins[i].url));
    }
}

function mousePressed() {
    //Use mousePressed to drag each trash item within the canvas
    //I created parameters for each trash image, so that the mouse can click
    //within the area of each trash image.
    for (var i = 0; i < wastes.length; i++) {
        wastes[i].informing = false; //Clear information when mouse is pressed.
        var x0 = wastes[i].x; //top left X coordinate
        var y0 = wastes[i].y; //top right Y coordinate
        var x1 = wastes[i].x + wastePics[i].width; //top right X coordinate
        var y1 = wastes[i].y + wastePics[i].height; //bottom y coordinate
        if (!selected & x0 < mouseX && mouseX < x1 && y0 < mouseY && mouseY < y1) {
            selected = true; //trash is selected within the image boundaries
            wastes[i].dragging = true;
        }
    }
}

function mouseReleased() {
    //Use mouseReleased to evaluate whether the chosen trash is
    //dropped into the correct bin.
    //Like previously, I created specific parameters for trashbin images.
    selected = false;
    for (var i = 0; i < wastes.length; i++) {
        if (wastes[i].dragging) {
            wastes[i].dragging = false;
            var corrBin = wasteBins[wastes[i].type];
            var corrBinPic = wasteBinsPics[wastes[i].type];
            var x0 = corrBin.x;
            var y0 = corrBin.y;
            var x1 = corrBin.x + corrBinPic.width;
            var y1 = corrBin.y + corrBinPic.height;
            if (y0 < mouseY & mouseY < y1) {
                //Since all trashbins have the same Y height, I differentiated
                //the correct bin by determining the X locations
                if (x0 < mouseX && mouseX < x1) { //Correct Bin
                    correct = true;
                    wastes[i].stay = false; //waste will disappear
                    wastes[i].informing = false; //information will not show
                    score += 1; //score is updated by one when answer is correct
                } else {
                    //if incorrect, information will show up, and
                    //the waste image will go back to its initial location
                    correct = false;
                    wastes[i].informing = true;
                    wastes[i].x = wastes[i].initX; //initial X coordinate
                    wastes[i].y = wastes[i].initY; //initial Y coordinate
                }
            } else {
                correct = false; //the default status
            }
        }
    }
}

Sammie Kim- Project 12- Proposal

Global waste crisis is a problem we can no longer avoid. With continuous overproduction and overconsumption practices, we are in need for safe disposal practices. As such, recycling is one of the easiest ways we can all contribute to protect our environment, and I believe this should be further encouraged to become a social and collective effort.  Thus, for the final project, I propose to create an interactive environmental game related to the issue of waste management.

I am planning to set up a realistic environment (this could be a forest background or even a city scene), which comprises of various wastes all dispersed. With this, the point of the game is to find the trash and properly sort them by dragging into the correct recycling bin. If it is possible, I hope to incorporate further information if the user accidentally puts the trash into the wrong bin.

This is relevant to our real world as not a lot of people are actually mindful about properly sorting waste by plastic, paper, food, and etc, despite the presence of recycling and trash bins. And apart form solid natural waste, there are other artificial wastes (chemical, e-waste, etc) that are extremely hazardous to our environment. So in a way, this game would be educational for not just showing proper sorting, but also the extreme range of different types of trash. 

Sammie Kim – Looking Outwards – 12

Generative Album cover design by Kostya Ostroukhov and Color Wander by Matt Deslauriers are two projects that deeply inspired me. Kostya Ostroukhov is a graphic designer from Russia; his Generative Album cover project utilizes JavaScript, and the graphics float around that match the mood and style of Imagine Dragons. The idea of a dynamic album cover immediately fascinated me, as it could express the unique aesthetics of the music for a brief moment unlike a music video. On the other hand, Matt Deslauriers is a generative artist and creative coder from Canada. Color Wander is an open source generative artwork that allows users to interact with the screen to produce fascinating textures and patterns come alive. 

I personally feel that both projects could have merged to produce a more adaptable and versatile artwork. Ostroukhov lacks the complexity and interactive element that is evident in Deslauriers’s generative art piece, whereas Deslauriers lacks the purposefulness and entertainment aspect. Yet, I admire each one as I am very intrigued in producing beautiful visual elements that connect with and respond to the user.

Color Wander by Matt Deslauriers
Generative Album cover design by Kostya Ostroukhov

Link to Matt Deslauriers’s website: https://www.mattdesl.com

Link to Kostya Ostroukhov’s works: https://www.behance.net/gallery/76084379/Album-covers-with-generative-design

Sammie Kim – Project 11 – Landscape

sketch

//Sammie Kim
//Section D
//sammiek@andrew.cmu.edu
//Project 11

var xPos = 100;
var yPos = 50;
var size = 70;
var backgroundPic;
var clouds = [];

function preload() {
    //background gradient photo
    var backgroundURL = "https://i.imgur.com/EMQBV3U.jpg"
    backgroundPic = loadImage(backgroundURL);
}

function setup() {
    createCanvas(480, 480);
    frameRate(10);
    //initial clouds first appears anywhere across the canvas
    for (var i = 0; i < 1; i++) {
        var startX = random(0, width/3);
        clouds[i] = createClouds(startX);
    }
}

function draw() {
    background(0);
    image(backgroundPic, 0, 0);
    noStroke();
    //call the functions below
    sun();
    mountain();
    darkOcean();
    ocean();
    //show clouds
    addNewClouds();
    updateClouds();
    removeClouds();
}

function sun() {
    fill('#f29849');
    circle(xPos, yPos, size);
    xPos = xPos + 0.5;
    if (xPos > width + size/2){
        xPos = 0;
    }
}

function updateClouds() {
    //constantly calling the clouds
    for (var x = 0; x < clouds.length; x++){
        clouds[x].move();
        clouds[x].draw();
    }
}

function removeClouds() {
    //create an array for keeping clouds on screen
    //if x location is greater than 0, then push x values into the cloud array
    var cloudsOnScreen = [];
    for (var i = 0; i < clouds.length; i++) {
        if (clouds[i].x > 0) {
            cloudsOnScreen.push(clouds[i]);
        }
    }
    clouds = cloudsOnScreen;
}

function addNewClouds() {
    var probability = 0.004;
    //a new cloud is drawn at the width when it is greater than a certain probability
    if (random(0, 1) < probability) {
        clouds.push(createClouds(width));
    }
}

function moveClouds() {
    //making clouds move to the left
    this.x -= this.speed;
}

function makeClouds() {
    //drawing the cloud with ellipses overlapping one another
    noStroke();
    fill('#7297a6');
    ellipse(this.x - 10, this.y, this.width, this.height);
    ellipse(this.x + 30, this.y, this.width, this.height);
    ellipse(this.x, this.y + 5, this.width, this.height);
    ellipse(this.x - 30, this.y + 5, this.width, this.height);
}

function createClouds(cloudX) {
    //creating object for cloud's characteristics
    var cloud = {x: cloudX,
              y: random(25, 75),
              width: 50,
              height: 50,
              speed: 0.7,
              move: moveClouds,
              draw: makeClouds}
  return cloud;
}

function ocean() {
    var oceanSpeed = 0.0003; //speed of terrain
    var oceanDetail = 0.001; //smoothness
    fill('#50abbf');
    beginShape();
    for (var x = 0; x < width; x++) {
        var t = (x * oceanDetail) + (millis() * oceanSpeed);
        var y = map(noise(t), 0, 1, height/2, height);
        vertex(x, y);
  }
    vertex(width, height);
    vertex(0, height);
    endShape();
}

function mountain() {
    var oceanSpeed = 0.0004; //speed of terrain
    var oceanDetail = 0.007; //smoothness
    fill('#6C671F');
    beginShape();
    for (var x = 0; x < width; x++) {
        var t = (x * oceanDetail) + (millis() * oceanSpeed);
        var y = map(noise(t), 0, 1, 0, height);
        vertex(x, y);
    }
  vertex(width, height);
  vertex(0,  height);
  endShape();
}

function darkOcean() {
    var oceanSpeed = 0.0004; //speed of terrain
    var oceanDetail = 0.001; //smoothness
    fill('#254f6a');
    beginShape();
    for (var x = 0; x < width; x++) {
        var t = (x * oceanDetail) + (millis() * oceanSpeed);
        var y = map(noise(t), 0, 1, height/3, height);
        vertex(x, y);
      }
    vertex(width, height);
    vertex(0, height);
    endShape();
}

This project was challenging as I had to keep in mind about the different objects that are shown on canvas and making them move. Imagining a space with ocean and mountain, I wanted to bring out a happy, peaceful mood through the overall warm colors. Overlapping the ocean terrains, I attempted to make an image of waves flowing past. The biggest challenge for me was creating the clouds to appear in the sky using objects. It was difficult having to think about multiple factors and constraints all at once, so I did it in a step by step manner—creating the cloud shape first with function, then calling it inside the object, and finally using other functions to add more properties.

Sammie Kim— Looking Outwards—11

Angela Washko is a digital artist who creates experimental games and entertainment that often revolves around feminist themes. One project that really stood out to me is called The Game, which won the Impact Award at Indiecade. As a feminist video game, this project presents an “exploration of consent and the politics, tactics and practices of the male pick-up artist and seduction community.” The format resembles a dating simulator, where players experience several seduction techniques deriving from instructional books and seduction coaches (pickup artists. The pickup gurus attempt to seduce the player, where six prominent coaches try to gain the player’s attention at a bar—an opportunity for players to explore the complex social behavior and psychology behind dating, as well as experience being a femme-presenting individual exploring this difficult and risky path. I found this game to provoke a reflective process step by step, as it allows us to virtually explore and manipulate, while simultaneously complicit in the frequent dehumanizing behavior. This game is unique as it’s composed entirely of scenarios moving on, providing a digital narrative that satirizes this convoluted system of power and desire in the world of contemporary sex and dating.

Exhibition of The Game at The Museum of Moving Image
People playing through The Game in the museum
A dialogue scene captured in The Game

Link to the artist’s website:  https://angelawashko.com/section/437138-The-Game-The-Game.html

Sammie Kim – Project 10 – Sonic Sketch

sketch

//Sammie Kim
//Section D
//sammiek@andrew.cmu.edu
//Project 10 - Sonic Sketch

//Global variables
var facesPic;
var laughingSound;
var cryingSound;
var surprisedSound;
var angrySound;

function preload() {
    //loading image through Imgur
    var facesURL = "https://i.imgur.com/1fPz3CY.jpg";
    facesPic = loadImage(facesURL);
    //loading sound from freesound.org
    laughingSound = loadSound("https://courses.ideate.cmu.edu/15-104/f2019/wp-content/uploads/2019/11/laughing.wav");
    cryingSound = loadSound("https://courses.ideate.cmu.edu/15-104/f2019/wp-content/uploads/2019/11/crying.wav");
    surpriseSound = loadSound("https://courses.ideate.cmu.edu/15-104/f2019/wp-content/uploads/2019/11/surprise.wav");
    angrySound = loadSound("https://courses.ideate.cmu.edu/15-104/f2019/wp-content/uploads/2019/11/angry.wav");
}

function setup() {
    createCanvas(460, 200);
    background(255);
    useSound();
}

function soundSetup() {
    // setup for audio generation
    //setting volume to one for each sound
    laughingSound.setVolume(1);
    cryingSound.setVolume(1);
    surpriseSound.setVolume(1);
    angrySound.setVolume(1);
}

function draw() {
    //drawing out the image on the canvas
    background(255);
    image(facesPic, 0, 0);
}

function mousePressed() {
    //making each sound play and pause based on mouse location on canvas
    if (mouseX > 0 & mouseX < 140 ) {
        surpriseSound.play();
        } else {
        surpriseSound.pause();
        }
    if (mouseX > 140 & mouseX < 230) {
        cryingSound.play();
        } else {
        cryingSound.pause();
        }
    if (mouseX > 230 & mouseX < 336) {
        angrySound.play();
        } else {
        angrySound.pause();
        }
    if (mouseX > 336 & mouseX < width) {
        laughingSound.play();
        } else {
        laughingSound.pause();
        }
}

For this project, I wanted to incorporate sounds that show the emotions of each minion ( happy, sad, surprised, and angry). It took a while to get used to working with terminal and preloading sounds, but I feel I got a better grasp now.

Sammie Kim— Looking Outwards— 10

David Cope is a computational artist who created avant-garde works during the 1970s that blurred music and computer science. Originally a traditional musician and composer, Cope developed great interest in the algorithmic area of commuters, and he began finding ways to apply programming techniques into music. The program he developed is now known as Experiments in Musical Intelligence, also known as EMI, which is an analysis program that uses its output to “compose new examples of music in the style of the music in its database without replicating any of those pieces exactly” (Cope). As such, program would analyze the music that would be inputed into the EMI database, and new works would be created in a similar style. And with this data- driven approach, or EMI’s style, Cope began to create new innovative musical pieces that referenced the style of legendary composers of the past, and he began observing unique patterns that were unknown before. With these generative music pieces, Cope faced many public criticisms, particularly revolving around how creative computers can be. Yet, he still overcame these challenges as he found to interweave his own creative style into the many more albums he produced in later years. 

Tech Closeup: Music Professor David Cope
Cope used actual musicians to play the classical music piece composed by EMI.

Sammie Kim – Project 09 – Portrait

sketch

//Sammie Kim
//Section D
//sammiek@andrew.cmu.edu
//Project 09 - Computational Portrait

var img;
var smallPoint;
var largePoint;
var pointSize;

//preloading image from imgur
function preload() {
    img = loadImage('https://i.imgur.com/yXi77UB.jpg');
}

//setting the speed and size of loading image pixels
function setup() {
    createCanvas(300, 300);
    background(0);
    imageMode(CENTER);
    img.loadPixels();
    frameRate(100);
    noStroke();
    smallPoint = 1;
    largePoint = 10;
}

function draw() {
    var x = floor(random(img.width)); //random x location for ellipse
    var y = floor(random(img.height)); //random y location for ellipse
    var imageColor = img.get(x, y); //picking the x, y coordinates from the image
    fill(imageColor); //fill the ellipses with the color from image
    //let the points get smaller toward the bottom of canvas that has more details
    var pointSize = map(y, 0, height, largePoint, smallPoint);
    ellipse(x, y, pointSize, pointSize);
}

This project was entertaining as I was able to recreate my own portrait by using points. Observing how the points would gradually generate the full photo, I purposely made the bottom half points tiny to better reflect the detailed areas.

Sammie Kim – Looking Outwards 09

Looking into the Looking Outwards 8 report by CJ Walsh, I was intrigued by Meow Wolf, which an artist collective. Consisting of more than 400 employees with various artistic and digital backgrounds, Meow Wolf is known for creating interactive installation projects. The project that was analyzed is called the “House of Eternal Return,” which is a large immersive space (20,000 square foot art exhibit) in Santa Fe. Once a visitor enters the space that resembles the lawn of a Victorian House, he or she is then able to explore and discover portals into other worlds. Likewise, this space contains dozens of rooms, secret passages, and even musical objects that the visitors can interact with to unfold the mystery of the Selig family, who mysteriously disappeared after conducting a forbidden experiment. This maximalist art showcase engages guests of all ages, letting them walk, climb, and crawl through fantastic and unexpected environments within a particular narrative. 

Personally, I agreed with most of my peer’s assessment, as I appreciated not only the resultative project, but also the strenuous process that was involved. In the lecture video, the way the group presented a lot of visuals like progress videos really showed how they were able to overcome challenges, particularly in establishing themselves as a productive artist group. Moreover, I wanted to add to how Meow Wolf really strives to challenge social norms and radical inclusions through community based art projects.

Image of the House of Eternal Return (Eye catching visuals that engage with the narrative)
Interactive objects that visitors can play around with

Link to Meow Wolf website: https://meowwolf.com

Looking Outwards about Meow Wolf

Sammie Kim – Looking Outwards -08

Elliot Woods is a digital media artist, educator, and technologist based in Manchester UK. With the goal of creating a bridge between digital and contemporary arts, he strives to build “future interactions between humans and social-visual design technologies like projectors, graphical computation, and cameras” (Woods). As a result, Woods co-founded the experimental art and design technology studio in Seoul called Kimchi and Chips. In this unique studio, several installation projects were developed, the most recent being “Halo.” 99 robotic mirrors would constantly trace the direction of sun throughout the day, and they would each emit a ray of sunlight into a cloud of water mist. Applying the Bayesian inference machine learning, Woods recreated the beams so they would computationally align to draw bright halos into the air.  As this installation completely depends on the presence of the sun to function, it explores the limitless end of technology, striving to even capture the natural fluctuations into technology. What intrigued me most was how Woods would utilize his deep physics background to generate interfaces with abstract systems and approach his artistic endeavors in a step by step methodical approach.  

Full size view of the halo formed from the cloud of water mist

Process sketch of how the halo circle was computationally defined
3D simulation of the halo

(link to Elliot Wood’s Website) https://www.kimchiandchips.com/works/halo/

Lecture Video by Elliot Woods