Search

C World

Conor's Blog/Portfolio

Category

Animation

ROB3115 – A Neuro-Immersive Narrative

In-experience screenshot

ROB3115 is an interactive graphic novel that is influenced by the reader’s brainwaves. The experience is driven by the reader’s ability to cognitively engage with the story. ROB3115′s narrative and its fundamental interactive mechanic – the reader’s ability to focus – are tightly intertwined by virtue of a philosophical supposition linking consciousness with attention.

ROB3115 explores the intersection of interactive narrative, visual storytelling, and brain-computer interfacing. The experience, designed for an individual, puts the reader in the shoes of a highly intelligent artificial being that begins to perceive a sense of consciousness. By using a NeuroSky brainwave sensor, the reader’s brain activity directly affects the internal dialogue of the main character, in turn, dictating the outcome of his series of psychosomatic realizations. The system is an adaptation of the traditional choose-your-own-adventure. However, instead of actively making decisions at critical points in the narrative, the reader subconsciously affects the story via their level of cognitive engagement. This piece makes use of new media devices while, at the same time, commenting on the seemingly inevitable implications of their introduction into society.

This project was my thesis in graduating from Parsons with an M.F.A. in Design & Technology.

audioBuzzers – Audio Visualizer (Unity)

Summary

This is a Unity-built audio visualizer of the song Major Tom, covered by the Shiny Toy Guns.

Project Files

The Web Player: http://a.parsons.edu/~russc171/UnityHW/AudioBuzzers_2/AudioBuzzers_2.html

The Unity Project: http://a.parsons.edu/~russc171/UnityHW/hw_wk5_audioBuzzers.zip

Screenshot

Screen Shot 2013-03-06 at 5.11.50 PM

Demo Reel

DEMO REEL

DEMO REEL BREAKDOWN

DRB

Plasma Ball Concentration Game (openFrameworks + Neurosky’s EEG Mindset)

Project Summary

This project relates to the brain-computer interface work I’ve been doing for my thesis. As I will soon be creating generative animations that responds to brain activity, which are part of a digital graphic novel, I wanted to do a prototype of a visually complex animation that was dependent on a person’s brain activity. This project was written in openFrameworks and uses a Neurosky Mindset to link a player’s attention level to the intensity of electricity being generated from a sphere in the middle of the screen. The meat of the code is a recursive function that creates individual lightning strikes at a frequency inversely proportional to the attention parameter calculated by the Neurosky EEG headset. The project was visually inspired by the tesla coil and those cool electricity lamps that were really popular in the 90s (see below).

Once the connection between the Neurosky headset and the user’s computer has strong connectivity, the user can press the ‘b’ key (for brain) to link their EEG with the plasma ball. At any point the user can press the ‘g’ key (for graph) to see a HUD that displays a bar graph of their attention value on a scale from 0-100. The graph also shows the connectivity value of the device and the average attention value, calculated over the previous 5 seconds, being used to dictate the frequency of the electricity.

In order to get this application working on your computer, you must first download and install the Neurosky Thinkgear connector. You should be able to get it working with any bluetooth enabled Neurosky device; I’ve documented how to do so in the readme file on my github. You can get my code for the project on my Github page here: https://github.com/crussoma/conorRussomanno_algo2012/tree/master/Conors_Final

Also, if you just want to see the recursive electricity code working independent of a person’s EEG, download and install the app lightningBall (not lightnightBall_brain) from my github.

Project Video

To see this project in action check out my demo reel and jump to 35s.

Visual Inspiration

lightnightBall

lightnightLamp

Screenshots

Screen Shot 2013-03-06 at 5.29.23 PM

Screen Shot 2013-03-06 at 5.29.00 PM

References

My code uses some of the logic and algorithms Esteban Hufstedler’s processing sketch:http://www.openprocessing.org/sketch/2924

Additionally, a big shout out to Akira Hayasaka for writing the Neurosky openFrameworks addon that I used to pull this off:  https://github.com/Akira-Hayasaka/ofxThinkGear

Bull’s Eye – Hand-drawn Animation

This hand-drawn animation is of an archer readying and firing his bow:

Orbitorbs v2.1 – Solar System Simulator

Project Summary

This project is an extension of Orbitorbs v1.0.  I translated the code that I wrote in processing into Openframeworks, a C++ based programming language.  I added additional features that enabled more user control over the planetary system including:

  • The ability to pause the solar system simulation and edit planet parameters
  • A more intuitive interaction for editing planet parameters
  • The ability to turn on and off a function that links the computer microphone volume input to the strength of the gravitational constant dictating the force between the planets (activate by pressing the ‘e’ key and deactivate by pressing the ‘s’ key). The higher the volume, the higher the g-constant (directly proportional).

The algorithm uses 2-dimensional matrices to store the x and y parameters of the various planets and it implements Newton’s Law of Universal Gravitation:

newton

This project has the potential to be adapted into a new type of learning tool, allowing for a more fun and interactive method for teaching basic principles of physics including angular acceleration, gravitation, ideas of mass and density, and more.

Orbitorbs v2.1 (openframeworks) from Conor Russomanno on Vimeo.

The Code

If you want to play with this application or examine the code, please feel free to grab it from my github.

LCD Octopus Animation (to Oahu by The 6ths)

Summary

This was a project that I did in Physical Computing during my first semester at Parsons.  I used a 2-line by 16-character New Haven LCD Display and an Arduino.  Luckily, I found this great website that provides a hexadecimal generator for creating custom character designs for LCD displays.  The song in the animation is Oahu by The 6ths.

Animation (Wait for it… waaait for it… :))

Custom Character Designs

Arduino Code

#include <NewSoftSerial.h>

int rxPin = 4;
int txPin = 5;

NewSoftSerial LCD (rxPin, txPin);

void setup(){
 Serial.begin(9600);
 delay(50);
 LCD.begin(9600);

LCD.print( 0xFE, BYTE );
 LCD.print( 0x41, BYTE ); // turn LCD on

LCD.print( 0xFE, BYTE ); // set conrast
 LCD.print( 0x51, BYTE );
 LCD.print( 30, BYTE );

LCD.print( 0xFE, BYTE ); // set brightness
 LCD.print( 0x53, BYTE );
 LCD.print( 6, BYTE );

loadCustomCharacters();
}

void loop(){

// LCD.print(0xFE, BYTE); //clear screen
 // LCD.print(0x51, BYTE); //move curs home

LCD.print(0xFE, BYTE);
 LCD.print(0x45, BYTE); //select curs position

LCD.print(0x00, BYTE);

LCD.print(0xFE, BYTE); //move right to adjust for movement
 LCD.print(0x56, BYTE);

printStretch();
 delay(1000);

LCD.print(0xFE, BYTE); //move back left to prepare for squish
 LCD.print(0x55, BYTE);

printSquish();

LCD.print(0xFE, BYTE);
 LCD.print(0x56, BYTE);

delay(500);

}

void printStretch(){
 LCD.print(0xFE, BYTE);//Set Cursor 00
 LCD.print(0x45, BYTE);
 LCD.print(0x00, BYTE);
 LCD.print(6,BYTE);
 LCD.print(0xFE, BYTE);//Set Cursor 01
 LCD.print(0x45, BYTE);
 LCD.print(0x01, BYTE);
 LCD.print(4, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x02, BYTE);
 LCD.print(0, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x40, BYTE);
 LCD.print(7, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x41, BYTE);
 LCD.print(5, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x42, BYTE);
 LCD.print(1, BYTE);

}

void printSquish(){
 LCD.print(0xFE, BYTE);//Set Cursor 00
 LCD.print(0x45, BYTE);
 LCD.print(0x00, BYTE);
 LCD.print(2,BYTE);
 LCD.print(0xFE, BYTE);//Set Cursor 01
 LCD.print(0x45, BYTE);
 LCD.print(0x01, BYTE);
 LCD.print(0, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x40, BYTE);
 LCD.print(3, BYTE);
 LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x41, BYTE);
 LCD.print(1, BYTE);

LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x02, BYTE);
 LCD.print(0x20, BYTE);

LCD.print(0xFE, BYTE); //Set Cursor 40
 LCD.print(0x45, BYTE);
 LCD.print(0x42, BYTE);
 LCD.print(0x20, BYTE);

}

void loadCustomCharacters(){
 headLeft();
 headRight();
 stretchTL();
 stretchTR();
 stretchBL();
 stretchBR();
 squishLeft();
 squishRight();
}

//START CUSTOM CHARS
void headLeft(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(0,BYTE);

LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x1e,BYTE);
 LCD.print(0x17,BYTE);
 LCD.print(0x1f,BYTE);
}

void headRight(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(1,BYTE);

LCD.print(0x1f,BYTE);
 LCD.print(0x17,BYTE);
 LCD.print(0x1e,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
}

void squishLeft(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(2,BYTE);

LCD.print(0x2,BYTE);
 LCD.print(0x19,BYTE);
 LCD.print(0x5,BYTE);
 LCD.print(0x13,BYTE);
 LCD.print(0xe,BYTE);
 LCD.print(0x6,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0xf,BYTE);
}

void squishRight(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(3,BYTE);

LCD.print(0xf,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0x6,BYTE);
 LCD.print(0xe,BYTE);
 LCD.print(0x13,BYTE);
 LCD.print(0x5,BYTE);
 LCD.print(0x19,BYTE);
 LCD.print(0x2,BYTE);
}

void stretchTL(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(4,BYTE);

LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x1e,BYTE);
 LCD.print(0x6,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0x7,BYTE);
}

void stretchTR(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(5,BYTE);

LCD.print(0x7,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0x6,BYTE);
 LCD.print(0x1e,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
}

void stretchBL(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(6,BYTE);

LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x8,BYTE);
 LCD.print(0x7,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0x0,BYTE);
}

void stretchBR(){
 LCD.print(0xFE,BYTE);
 LCD.print(0x54,BYTE);
 LCD.print(7,BYTE);

LCD.print(0x0,BYTE);
 LCD.print(0x1f,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x7,BYTE);
 LCD.print(0x8,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
 LCD.print(0x0,BYTE);
}

Zombie King (2D Flixel Game)

CLICK HERE to play the game!

Description

I designed this top down computer game, Zombie King with a few of my friends while at Columbia.  I worked as the teams primary concept artist and asset designer.  We used Flixel for our game engine, and I used a pencil, paper, and Photoshop for the asset design.  The mechanics behind the game are derived from a narrative where you are a zombie and you must lead a horde of fellow zombies in a war against the humans.

My Work Involved:

  • Character designs and animation sprites
  • Level Design
  • Concept Art
  • Cover Art
  • Game Mechanics

Game Art

Screenshot

CLICK HERE to play the game!

Blog at WordPress.com.

Up ↑