ocannoli-arsculpture.

AR Sculpture

A secret door in creepy hallways and hidden closets that leads to another dimension. (Recreation of door concept from Coraline)

 

 

When I was a kid I always wanted to have a door like in the movie Coraline (despite how creepy and scary that would be) so I wanted to attempt to create something that would allow anyone to have their own door to an alternate reality. The viewer would discover this door in areas like the end of a creepy hallway, in a spooky closet, or underneath your bed but doesn't open until you turn your back to it. The door is in these places in order to create a sense of unease which makes the idea of turning your back and having something happen even scarier. By having something activate by not looking at it, I wanted to play with the viewers curiosity/disinterest. Once the viewer turns away from the door twice, it fully reveals the random dimension behind the door (there are a variety of alternate reality textures it chooses at random).

ocannoli-justaline

Real life cartoon void/Looney tunes hole in the ground by ocannoli and sapeck.

Imagine like in old looney tunes or hanna barbera cartoons when a character could create a hole and disappear. This augmented reality would be a simulation of that, a personal hole transport creator. Possibly could be implemented so a user can create there own portal anywhere at a whim and when they jump through their environment changes.

ocannoli-Book

John Mulaney's Comedy Hour                        By Dr. Suess

Link to Chapters

This is a generative Dr.Suess book but with a twist. It's a mashup of standup comedy John Mulaney in the stylings of Dr. Suess.

Most of my ideas involved mashing two genres of literature together and eventually I decided I really wanted to make a Dr. Suess book. However, just making a Dr. Suess book seemed boring, so my initial idea was to make a dirty version of Dr. Suess. After hearing the lectures by Parrish and Sloan, the concept of specificity stuck with me, so I decided to combine Dr.Suess with one of my favorite stand-up comedians John Mulaney. Initially, I spent a lot of time trying to use stresses, syllables, and creating rhyme schemes to replicate the style of Dr. Suess more accurately. However, the results seemed stale, too forced, and most importantly were not that interesting. So I decided to scratch that idea and start experimenting more with markov chains. Ultimately, I liked the results but did not delve into it as much as I wanted too. If I was to continue this project, I would want to manipulate the results from the markov chain more to fit a better rhyme scheme and have a standardized stress pattern that could be different for each book. Additionally, the images were not as in depth as I wanted for originally I wanted to generate unique Dr. Suess "shapes" or simple illustrations, but instead they are just images taken from online. Overall, I think this is a good starting point but needs work in the execution for a final product.

var rhyme,rhymeBunch,line1, markov, data1, data2, x = 160, y = 240;
var img; 
function preload() {
 
  data1 = loadStrings('john.txt');
  data2 = loadStrings('suess.txt');
  //data3 = loadStrings('Readme_en.txt');
  //data4 = loadStrings('ReadMe.txt');
}
 
function setup() {
 
  createCanvas(500, 500);
  textFont('times', 16);
  textAlign(LEFT);
 
 
  line1 = ["click to (re)generate!"];
 
  // create a markov model w' n=4
  markov = new RiMarkov(2);
 
  // load text into the model
  markov.loadText(data1.join(' '));
  markov.loadText(data2.join(' '));
  //markov.loadText(data3.join(' '));
  //markov.loadText(data4.join(' '));
 
  drawText();
}
 
function drawText() {
 
  background(250);
  text(line1, x, y, 400, 400);
}
 
function mouseClicked() {
 
  x = y = 50;
  var repeat=true;
  while (repeat==true){
  line1 = markov.generateSentence(1);
  line1= new RiString(line1);
  line1.toLowerCase();
  line1.replaceChar(0, line1.charAt(0).toUpperCase());
  line1=String(line1)
  line1=line1.replace(/[\[\]']+/g,''); 
  linesList=line1.split(" ");
 	rhyme=linesList[(linesList.length)-1];
  rhymeBunch=RiTa.rhymes(rhyme);
  if (rhymeBunch.length>2){
    repeat=false;
  }
  }
  for (i=0;i<1;i++){
     var nLine = markov.generateSentence(1);
    var nList=nLine.split(" ");
    var spot=int(random(rhymeBunch.length-1));
    var newRhyme=rhymeBunch[spot];
    var oldSpot=(nList.length);
    nLine=new RiString(nLine);
    nLine.replaceWord(oldSpot,newRhyme);
    nLine.toLowerCase();
    nLine=String(nLine);
    nLine=nLine.replace(/[\[\]']+/g,'');
    line1=line1+" "+nLine;
    var testLength=line1.split(" "); 
    if (testLength.length < 12){
      i-=1;
    }
 
  }
 
  drawText();
}

 

ocannoli-parrish

I thought this talk was brilliant, it was presented in a deceptively simple way when contrasted with the beautifully complex concepts Parrish expressed throughout the talk. She brought to light a lot of comparisons that I had never even considered before. Most prominently, her comparisons of exploring semantic space as similar to launching probes for space exploration but also a very independent exploration of its own. For me, one line stuck with me about how this exploration and using this technology allows us to reveal truths about ourselves and humanity we could not do by ourselves. Overall, this talk was very enlightening and did a great job at opening the viewers mind about ways to interpret generative text.

ocannoli-LookingOutwards04

 

Pinokio is an expressive lamp by Adam Ben-Dror and Shanshan Zhou. The project centers around a lamp, which resembles the Pixar lamp, that has a very distinct personality and lots of interaction. For example, Pinokio is very curious and naive, which is implemented through the webcam with face detection software in the lamp shade. Although the concept and execution is simple, the project I think is charming and well executed. I was intrigued by the amount of personality conveyed simply through just a couple of motions. I feel like the project could be more effective if sound was utilized more intentionally, possibly by the tone the movement has depending on the motion it's trying to convey. Although their is a lot of influence they have drawn on and the concept of an animated lamp may not be completely novel, the execution and the initial curiosity towards it's personality was what intrigued me most.

ocannoli-Body

Star Collector

Move your face to direct the telescope (the blue circle) to the special yellow stars. Once a star is in your sights, open your mouth to collect it and get a point. But be careful not to raise your eyebrows too high or the aliens will attack and take your points.

Going into this project, brainstorming for ideas was difficult for me. I had a lot of shallow, surface level ideas but no a lot of concepts I thought were good enough. A lot of my process started conceptually with an idea of the project or the narrative rather than understanding the full relationship with the body; therefore, I never fully landed on something I thought was interesting or in depth enough. For the star collector idea I liked the idea of the the ability for the body or even simply the face to control space or the cosmos. I wanted to add more features and a different style which would limit the players view to just that circle and have the board be much bigger. I also wanted players to find patterns, or maybe constellations rather than other "stars".  I used face OSC in processing which was both an intentional move but also somewhat guided the relationship between the body and the interface. Overall, I enjoyed the experience of working with motion capture for the first time and if I were to redo this project I'd like to come up with something more complex either conceptually or in execution.

 //
// a template for receiving face tracking osc messages from
// Kyle McDonald's FaceOSC https://github.com/kylemcdonald/ofxFaceTracker
//
// 2012 Dan Wilcox danomatika.com
// for the IACD Spring 2012 class at the CMU School of Art
//
// adapted from from Greg Borenstein's 2011 example
// http://www.gregborenstein.com/
// https://gist.github.com/1603230
//
import oscP5.*;
OscP5 oscP5;
 
// num faces found
int found;
 
// pose
float poseScale;
PVector posePosition = new PVector();
PVector poseOrientation = new PVector();
 
// gesture
float mouthHeight;
float mouthWidth;
float eyeLeft;
float eyeRight;
float eyebrowLeft;
float eyebrowRight;
float jaw;
float nostrils;
float circleX;
float circleY; 
PImage starSky;
PImage aliens; 
int score; 
FloatList specialStars;
PFont fjFont;
int numOfStars; 
boolean doneOnce;
 
 
 
void setup() {
  size(800, 800);
  frameRate(30);
 
  oscP5 = new OscP5(this, 8338);
  oscP5.plug(this, "found", "/found");
  oscP5.plug(this, "poseScale", "/pose/scale");
  oscP5.plug(this, "posePosition", "/pose/position");
  oscP5.plug(this, "poseOrientation", "/pose/orientation");
  oscP5.plug(this, "mouthWidthReceived", "/gesture/mouth/width");
  oscP5.plug(this, "mouthHeightReceived", "/gesture/mouth/height");
  oscP5.plug(this, "eyeLeftReceived", "/gesture/eye/left");
  oscP5.plug(this, "eyeRightReceived", "/gesture/eye/right");
  oscP5.plug(this, "eyebrowLeftReceived", "/gesture/eyebrow/left");
  oscP5.plug(this, "eyebrowRightReceived", "/gesture/eyebrow/right");
  oscP5.plug(this, "jawReceived", "/gesture/jaw");
  oscP5.plug(this, "nostrilsReceived", "/gesture/nostrils");
  starSky = loadImage("stars.png");
  aliens= loadImage("ALIENS.png");
  score=0; 
  specialStars = new FloatList();
  numOfStars=7;
  for (int i=0; i<numOfStars;i++){ createSpecialStar(); } fjFont = createFont("FjallaOne-Regular.ttf",32); doneOnce=false; } public void createSpecialStar(){ float x= random(0,width); float y=random(85,height-180); specialStars.append(x); specialStars.append(y); } public void newSpecialStars(){ for (int i=specialStars.size()-1;i>-1; i--){
     specialStars.remove(i);
   }
   for (int i=0; i<numOfStars; i++){
     createSpecialStar(); 
   }
 }
 
void draw() {  
  image(starSky,0,0);
  int seconds = second();
  //refreshes special stars every 5 seconds
  if ((seconds-1)%5==0 && doneOnce==true){
    doneOnce=false; 
  }
  if (seconds%5==0 &&doneOnce==false){
    newSpecialStars(); 
    doneOnce=true; 
 
  }
  //tint(255,255,255); 
  float radius=40; 
  textFont(fjFont);
  textSize(50); 
  text("Score: "+score,10,height-10); 
  fill(255,255,102);
  noStroke(); 
  //makes special stars
  for (int i=0; i<specialStars.size(); i+=2){
    float starX=specialStars.get(i);
    float starY=specialStars.get(i+1);
    ellipse(starX, starY, 10,10);   
  }
 
  //Makes telescope Circle
  stroke(0);
  noFill(); 
  stroke(204,229,255);
  strokeWeight(4);
  ellipse(circleX,circleY,radius*2,radius*2); 
 
  for (int i=0; i<specialStars.size(); i+=2){
    float starX=specialStars.get(i);
    float starY=specialStars.get(i+1);
    //makes stars then checks valid to eat star
    if (starX<circleX+(radius/2) && starX>circleX-(radius/2) && starY<circleY+(radius/2) && starY>circleY-(radius/2)){ 
        if(jaw>23.5){
          specialStars.remove(i+1);
          specialStars.remove(i);
          score+=1; 
          createSpecialStar(); 
        }
 
    }
  }
 
  if (eyebrowLeft>9.2){
    image(aliens,width/6,height/4,592,326.5);
    if (score<=5){ score=0; } else if (score>5){
      score=score-5; 
    }
  }
 
}
 
 
 
// OSC CALLBACK FUNCTIONS
 
public void found(int i) {
  println("found: " + i);
  found = i;
}
 
public void poseScale(float s) {
  println("scale: " + s);
  poseScale = s;
}
 
public void posePosition(float x, float y) {
  println("pose position\tX: " + x + " Y: " + y );
  posePosition.set(x, y, 0);
  circleX=x+(posePosition.x-150);
  circleY=y+(posePosition.y-150);
 
 
}
 
public void poseOrientation(float x, float y, float z) {
  println("pose orientation\tX: " + x + " Y: " + y + " Z: " + z);
  poseOrientation.set(x, y, z);
}
 
public void mouthWidthReceived(float w) {
  println("mouth Width: " + w);
  mouthWidth = w;
}
 
public void mouthHeightReceived(float h) {
  println("mouth height: " + h);
  mouthHeight = h;
}
 
public void eyeLeftReceived(float f) {
  println("eye left: " + f);
  eyeLeft = f;
}
 
public void eyeRightReceived(float f) {
  println("eye right: " + f);
  eyeRight = f;
}
 
public void eyebrowLeftReceived(float f) {
  println("eyebrow left: " + f);
  eyebrowLeft = f;
}
 
public void eyebrowRightReceived(float f) {
  println("eyebrow right: " + f);
  eyebrowRight = f;
}
 
public void jawReceived(float f) {
  println("jaw: " + f);
  jaw = f;
}
 
public void nostrilsReceived(float f) {
  println("nostrils: " + f);
  nostrils = f;
}
 
// all other OSC messages end up here
void oscEvent(OscMessage m) {
  if(m.isPlugged() == false) {
    println("UNPLUGGED: " + m);
  }
}

 

Trucker Chat:

Chatroom for Incoherent CB Radio Communication Between "Truckers"

 

 

In the beginning phases of working on this project my ambitions were much higher, possibly wanting to work with Spotify/music APIs and drum machines. However, I quickly decided that I just wanted to make something simple and fun to allow me to spend time learning and experimenting with new techniques, features etc. A constant concept through my process, has been the idea of equal roles between all users. When text is manipulated and messed with to a point of incoherence, it really puts all users on the same level of not understanding what's going on and having a good laugh. Experimenting with Rita and regex really shaped most of this project because I was mainly text focused and had also never used either one of those ever before. Although there are a lot of bugs and the project could be a lot more, I had a lot of fun and I learned a lot. (Also all of the trucker slang is real, here is a breakdown of what most of it means)

Trucker Slang Meanings