Final Project – Survey of Animation

Jamyr Laroche

Final Animation

Survey of Animation

Michael Patterson is a successful artist/animator that is mostly known for his many video production works in music videos throughout his career. Patterson gained his Bachelor of Fine Arts degree from the University of Illinois Urbana-Champaign in 1980. He was a graduate from Cal Arts (where he went to the M.F.A program in film graphics in 1981 to 1984), receiving his Master of Fine Arts degree and gaining much recognition from his animated short, Commuter (1981). With this short Patterson gained the Student Academy Award. Although just starting, Patterson later debuted his first video on MTV, Take on Me (1985), for the music group A-Ha. Later on, this piece would end up being celebrated in the exhibition, Spectacle: The Music Video (was originally at the CAC in Cincinnati and is now in New York at the Museum of the Moving Image), for its unique art form in the video. Most of his videos incorporated his own unique rotoscoping technique to create a truly memorable piece.  He would later work with many other animators and artists such as his wife, Candace Reckinger to create more video productions on MTV. Some of which include Luka, Be Still My Beating Heart, and Opposites Attract. Many of which are now held in the Museum of Modern Art’s permanent collection. Michael Patterson has not only done music videos, but also work for galleries across the world. He’s even had some national commercials created just for the Superbowl.

Patterson’s very first major piece, Commuter, was created in 1981 by the end of his time at California Institute of Arts. This piece was a silent yet strong production. In the work, there are many breaks from detail and shading in between frames as the video progresses. This technique gives the strong sense of constant movement throughout every second. Even when an object or person is static, the frantic line work somewhat prepares for the transition of stillness to movement whether it is fast or slow.

imgres-1.jpg

Another key component of this piece is the usage of negative space. He is also able to successfully use the negative space in an area to exaggerate the brightness of a surface on a variety of forms. He is also able to use the negative space to move between different frames. This can be specifically seen when the cars moving across the screen transitions to a close-up of a man’s face. Which later transitions to the man walking across the frames. This example of negative space also shows how easy it is to manipulate a space and change its perspective by simply using the object shown.

imgres-2.jpg

Michael Patterson’s most famous work, Take on Me, was released in 1984 and made the top 100 songs of 1985. Though he used basically the same technique as Commuter, it was an overall successful piece. This was due to the mixing of live-action film along with rotoscoped animation. The smooth transitions and mixture between these types of videography was an amazing step in animation. Unlike his previous work, Patterson added scenery and backgrounds in his frames to give an actual shape to the space. The walls and floors are identifiable and can mostly be seen when the two protagonists of the video run through the halls.

64c5faabc00398a8f6f04411ecd49ac7.jpg

a-ha-take-on-me.jpg

Another difference this has with Commuter, is that the shading is much more consistent throughout multiple frames. It can also be seen that the of the line work is cleaner and identifiable amongst the different shadings in the image. In addition, many of the lines even leave trails as the characters move faster to exaggerate the amount of movement they are doing from one position to another. The usage of lines and shades in this way even makes the piece seem as though it is a constantly moving gesture drawing, even more so when paired with the live-action filming. Lastly, the emotion this piece gives off incredibly reflects the music of A-Ha. The song gives off a lot of excitement and energy, while the animation shows this with the couple frantically running from their attackers. Even until the end when the man is coming from the comic into real life, the music and video work in perfect unison.

One of Patterson’s most recent work was a music video for the band ELO (Electronic Light Orchestra and their 2012 song, Mr. Blue Sky. This was another project that he had worked with his wife, Candace, on. They also received the assistance of students from the animation program at the University of Southern California. This piece is extremely different from Patterson’s original style. Rather than using rotoscope for the entire animation, he uses a lot of cel animation, and at times a bit of 3D animation for specific characters. However, there is still an element of rotoscope seen within the character with a cane and hat. It also seems that there is a bit of cut-out animation within the beginning frames of characters walking back and forth across the frames.

This piece also uses a large amount of color not seen in any other of his animations. This visual piece is the most vivid of his works. It counters much of his previous videos with the many different objects and characters being shown, as well as the endless number of abstract concepts and imagery displayed throughout the music video. This change in visual music for Patterson is very intriguing and the reason behind such a change comes to question as well.

Overall, Michael Patterson’s work is thoroughly enjoyable and the time and effort he has spent creating them is very admirable. His illusion of constant motion using different line weight and shading gives an exciting feel to his pieces and draws attention to itself perfectly. His rotoscoped works are also visually and conceptually appealing. At times the details of an image is not shown and change in a swift second. This concept of a quick moment in time represents life, but also corresponds quite well with the fast-paced music that his animations are incorporated in.

Works Cited

USC Cinematic Arts. (n.d.). Retrieved from cinema.usc.edu: https://cinema.usc.edu/directories/profile.cfm?id=26962&first=&last=&title=&did=2&referer=%2Fanimation%2Ffaculty.cfm&startpage=1&startrow=1

USC Cinematic Arts. (n.d.). Retrieved from anim.usc.edu: http://anim.usc.edu/faculty/mike-patterson/

 

Posted in Time Based | Tagged , , , | Leave a comment

Ceramics Museum Gallery Write-Up

Untitled, 1976 – Graham Marks

15409457_1189027374465879_328554834_o

Landscape #2,2007 – Hongwei Li

15387437_1189027361132547_1236069320_o

Torso,1984 – David Horak

15417850_1189027334465883_2006850150_o

Leave Your Sumptuous Grandeur, and Return to these Rocks,2015 – Jesse Ring

15502822_1189027337799216_2035865112_o

Rah-Rah,2010 – Mahlon Huston

15515616_1189027354465881_957889019_o

The gallery I went to was at the Alfred Ceramic Art Museum in Alfred University. The gallery was made up of intricate and interesting sculptures. Many of which were based on human shapes, pottery, three-dimensional patterns, etc. The pieces I enjoyed the most, all have unique design elements or unique design concepts that I did not see in a lot of other pieces. ‘Rah-Rah’, for example, is a piece that incorporated movement. The gold pom poms on the wooden sticks can be seen moving in a circular motion against one another. This addition of motion to the sculpture draws attention and intrigue to the piece that somewhat forced me to observe it for a time. Pieces similar to ‘Leave Your Sumptuous Grandeur, and Return to these Rocks’, use materials that are not seen in most other artworks and can easily catch the eye. Others including ‘Torso’ and ‘Landscape#2′, have a very different feel. Though they use basic human shape, the creators take these shapes and add various aspects that not only makes it visually interesting, but also provokes the viewer to question the meaning behind the creation.

Posted in Lectures & Workshops, Writing | Tagged , , , , | Leave a comment

Self-Critique: 3D Animation

Self-Critique

Intermediate 3D Animation

Amanda Kozub

Over this semester, it has been a struggle figuring out how to successfully create 3D animations. There were many difficulties such as creating fluid movement in the model, making the movement as realistic as possible, and editing the playback as best as I could. However, as time progressed and I worked with the program more, I began to improve my work. I learned to make much more realistic work by studying the reference very carefully as well as acting out the movements I would be animating. This helped me to better understand the human shape and how it contorts and reacts to specific movements. This helped significantly and made animating much easier and at times fun to do. In reference to the projects using the Norman model, I have better learned how to move the entire body simultaneously in order to get the feeling of actual human movement. At times, it becomes difficult and tedious to move every part, but is simpler each time. Although I have improved there are a few aspects of 3D animation that I must work on. I need to work on timing my frames better as well as exaggerating the frames of key movements within the animation. I need to learn when to make the frames closer in order to speed up and when to make them farther apart to slow down the movements. I also have to study the human form in order to know the extent in which the body moves. This includes a few different body types. Overall, I feel as though I improved greatly from my very first 3D animation. I have learned much from simply working on these projects, using the knowledge I gained every time and making each one better than the last.

Posted in Best Work, Non-Time Based | Tagged , , | Leave a comment

Digital Wave

import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.video.*;
import blobDetection.*;
int i = 0;
int x=0;
float b;
int counter;
int interval=60;
Capture cam;
BlobDetection theBlobDetection;
PImage img;
boolean newFrame=false;

void setup()
{
// Size of applet
size(800, 680);
smooth();
rectMode(CENTER);

frameRate(50);
// Capture
cam = new Capture(this, 40*4, 30*4, 15);
// Comment the following line if you use Processing 1.5
cam.start();

// BlobDetection
// img which will be sent to detection (a smaller copy of the cam frame);
img = new PImage(80, 60);
theBlobDetection = new BlobDetection(img.width, img.height);
theBlobDetection.setPosDiscrimination(true);
theBlobDetection.setThreshold(.2f); // will detect bright areas whose luminosity > 0.2f;

}
void captureEvent(Capture cam)
{
cam.read();
newFrame = true;
}
void draw()
{

if (newFrame)
{
newFrame=false;
image(cam, 0, 0, width, height);
filter(POSTERIZE, 3);

img.copy(cam, 0, 0, cam.width, cam.height,
0, 0, img.width, img.height);

theBlobDetection.computeBlobs(img.pixels);
drawBlobsAndEdges(true, true);
tint(255, 127);
if( x>30){
x=x+5;{
}
}
saveFrame();
}

}
void drawBlobsAndEdges(boolean drawBlobs, boolean drawEdges)
{
noFill();
Blob b;
EdgeVertex eA, eB;
for (int n=0; n<theBlobDetection.getBlobNb(); n++)
{
b=theBlobDetection.getBlob(n);
if (b!=null)

if (drawEdges)
{

noStroke();
noFill();
for (int m=2; m<b.getEdgeNb(); m++)
{

eA = b.getEdgeVertexA(m);
eB = b.getEdgeVertexB(m);
if (eA !=null && eB !=null)
point(
eA.x*width, eB.y*height
);

strokeWeight(6);

counter ++;
if(counter>= interval){
counter= 0;
stroke(255,255,255);
line(eA.x*width, eB.y*height, 400,700);

}
}
}

}
}

Posted in Time Based | Tagged , , | Leave a comment

Input Program

 

import ddf.minim.*;
import ddf.minim.analysis.*;

import gab.opencv.*;
import processing.video.*;
import java.awt.Rectangle;
Minim minim;
AudioPlayer song;
AudioPlayer song_1;
AudioPlayer song_2;
AudioPlayer song_3;
AudioPlayer song_4;
AudioPlayer song_5;
BeatDetect beat;

Capture video;
OpenCV opencv;
PImage HappyThoughts;
float eRadius;
float diam;
float x;
float y;
float r;
float g;
float b;
float a;
int counter;

PImage src;

int myPixel;

int maxColors = 4;
int[] hues;
int[] colors;
int rangeWidth = 200;

PImage[] outputs;

int colorToChange = -1;

void setup() {

size(600, 500, P3D);
video = new Capture(this, 640, 480);
opencv = new OpenCV(this, video.width, video.height);

colors = new int[maxColors];
hues = new int[maxColors];

outputs = new PImage[maxColors];

video.start();

minim = new Minim(this);
song = minim.loadFile (“happy thoughts.mp3”);
song_1 = minim.loadFile (“Fight The Feeling.mp3”);
song_2 = minim.loadFile (“Flume – Say It feat. Tove Lo.mp3”);
song_3 = minim.loadFile (“swell – im sorry (feat. shiloh).mp3”);
song_4 = minim.loadFile (“Sober.mp3”);
song_5 = minim.loadFile (“Ta-ku – Higher (Flume Remix).mp3”);
}

void draw() {

background(150);
counter ++;
r = random(255);
g = random(255);
b = random(255);
a = random(255);
x = random(width);
y = random(height);
diam = random(200);
if (video.available()) {
video.read();
}

opencv.loadImage(video);

opencv.useColor();
src = opencv.getSnapshot();
opencv.useColor(HSB);

detectColors();
image(src, 0, 0);
filter(POSTERIZE, 2.5);
filter(BLUR);
beat = new BeatDetect();
ellipseMode(RADIUS);
eRadius = 20;
eRadius *= .90;
if ( eRadius < 20 ) eRadius = 10;

{
for (int i = 0; i < song.bufferSize() – 1; i++)
{
if (i>10) {
noFill();
stroke(r, g, b, a);

line(x, 50 + song.left.get(i)*50, y, 50 + song.left.get(i+1)*50);
line(x, 400 + song.left.get(i)*50, y, 400 + song.left.get(i+1)*50);

line(x, 50 + song_1.left.get(i)*50, i+1, 50 + song_1.left.get(i+1)*50);
line(x, 400 + song_1.left.get(i)*50, i+1, 400 + song_1.left.get(i+1)*50);

line(x, 50 + song_3.left.get(i)*50, y, 50 + song_3.left.get(i+1)*50);
line(x, 400 + song_3.left.get(i)*50, y, 400 + song_3.left.get(i+1)*50);

line(x, 50 + song_2.left.get(i)*50, y, 50 + song_2.left.get(i+1)*50);
line(x, 400 + song_2.left.get(i)*50, y, 400 + song_2.left.get(i+1)*50);

line(x, 50 + song_4.left.get(i)*50, y, 50 + song_4.left.get(i+1)*50);
line(x, 400 + song_4.left.get(i)*50, y, 400 + song_4.left.get(i+1)*50);

line(x, 50 + song_5.left.get(i)*50, y, 50 + song_5.left.get(i+1)*50);
line(x, 400 + song_5.left.get(i)*50, y, 400 + song_5.left.get(i+1)*50);

line(x, y + song.left.get(i)*50, y, x + song.left.get(i+1)*50);
line(x, y + song.left.get(i)*50, y, x + song.left.get(i+1)*50);

line(x, y+ song_1.left.get(i)*50, i+1, x + song_1.left.get(i+1)*50);
line(x, y + song_1.left.get(i)*50, i+1, x + song_1.left.get(i+1)*50);

line(x, y + song_3.left.get(i)*50, y, x + song_3.left.get(i+1)*50);
line(x, y + song_3.left.get(i)*50, y, x + song_3.left.get(i+1)*50);

line(x, y + song_2.left.get(i)*50, y, x + song_2.left.get(i+1)*50);
line(x, y + song_2.left.get(i)*50, y, x + song_2.left.get(i+1)*50);

line(x, y + song_4.left.get(i)*50, y, x + song_4.left.get(i+1)*50);
line(x, y + song_4.left.get(i)*50, y, x + song_4.left.get(i+1)*50);

line(x, y + song_5.left.get(i)*50, y, x + song_5.left.get(i+1)*50);
line(x, y + song_5.left.get(i)*50, y, x + song_5.left.get(i+1)*50);
}

textSize(20);
stroke(255);
fill(255);

if (colorToChange > -1) {
text(“click to change color ” + colorToChange, 10, 25);
} else {
text(“press key [c] to select color”, 10, 25);
}
}
}
}

void detectColors() {

for (int i=0; i<hues.length; i++) {

if (hues[i] <= 0) continue;

opencv.loadImage(src);
opencv.useColor(HSB);
opencv.setGray(opencv.getH().clone());

int hueToDetect = hues[i];

opencv.inRange(hueToDetect-rangeWidth/2, hueToDetect+rangeWidth/2);
opencv.erode();

outputs[i] = opencv.getSnapshot();
}
if (outputs[0] != null) {

opencv.loadImage(outputs[0]);
;
}
}

void mousePressed() {

if (colorToChange > -1) {

color c = get(mouseX, mouseY);
println(“r: ” + red(c) + ” g: ” + green(c) + ” b: ” + blue(c));

if (red(c) >= 150) {
song.play();
song_1.pause();
song_2.pause();
song_3.pause();
song_4.pause();
song_5.pause();
}

if (red(c) >= 130) {
song_3.play();
song.pause();
song_1.pause();
song_2.pause();
song_4.pause();
song_5.pause();
}
if (blue(c) >= 150) {
song_1.play();
song.pause();
song_2.pause();
song_3.pause();
song_4.pause();
song_5.pause();
}
if (blue(c) >= 130) {
song_4.play();
song.pause();
song_1.pause();
song_2.pause();
song_3.pause();
song_5.pause();
}

if (green(c) >= 150) {
song_2.play();
song.pause();
song_1.pause();
song_3.pause();
song_4.pause();
song_5.pause();
}
if (green(c) >= 130) {
song_5.play();
song.pause();
song_1.pause();
song_2.pause();
song_3.pause();
song_4.pause();
}

int hue = int(map(hue(c), 0, 255, 255, 255));

colors[colorToChange-1] = -1;
hues[colorToChange-1] = hue;

println(“color index ” + (colorToChange-1) + “, value: ” + hue);
}
}
void keyPressed() {

if (key == ‘c’) {
colorToChange = 1;
}
if (key ==’2′) {
song.pause();
song_1.pause();
song_2.pause();
song_3.pause();
song_4.pause();
song_5.pause();
}
}

void keyReleased() {
colorToChange = -1;
}

Posted in Time Based | Tagged , , , , | Leave a comment

Sound Program

import ddf.minim.*;
import ddf.minim.analysis.*;

Minim minim;
AudioPlayer song;
BeatDetect beat;

float eRadius;

float r;
float g;
float b;
float a;
int counter;
int interval = 100;
void setup()
{
size(400, 400, P3D);
minim = new Minim(this);
song = minim.loadFile(“Rather Be (feat. Jess Glynne).mp3”, 2048);
song.play();
// a beat detection object song SOUND_ENERGY mode with a sensitivity of 10 milliseconds
beat = new BeatDetect();

ellipseMode(RADIUS);
eRadius = 20;
}

void draw()
{
counter ++;
r = random(255);
g = random(255);
b = random(255);
a = random(255);

background(0);
beat.detect(song.mix);
float a = map(eRadius, 20, 80, 60, 255);

noStroke();
if ( beat.isOnset() ) eRadius = 80;
fill(255,g,0);
ellipse(50, 30, eRadius, eRadius);
ellipse(90, 60, eRadius, eRadius);
ellipse(180, 30, eRadius, eRadius);
ellipse(200, 60, eRadius, eRadius);
ellipse(270, 30, eRadius, eRadius);
ellipse(300, 60, eRadius, eRadius);
eRadius *= .90;
if ( eRadius < 20 ) eRadius = 10;

{
for (int i = 0; i < song.bufferSize() – 1; i++)
{
if (i>10) {

fill(r, g, b, a);
stroke(r, g, b, a);
line(i+200, 170 + song.right.get(i)*30, i+1, 350 + song.left.get(i+1)*30);
line(i+200, 300 + song.right.get(i)*30, i+1, 350 + song.left.get(i+1)*30);
line(i, 50 + song.left.get(i)*50, i+1, 50 + song.left.get(i+1)*50);
}
}
}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted in Time Based | Tagged , , , | Leave a comment

Peer Review

The animation had a smooth transition from standing to sitting. However, there are some things that can be worked on. The knees could have been bent more as well as the body being lowered much more. There also could have been much more keys added towards the end of the animation. The feet could have also been moved a little more for a more realistic animation. The arm movements were really good and matched the reference footage nearly perfectly. The key frames were placed well and made the animation move fairly realistically. There could have also been more flexibility shown within certain areas such as the back and the legs.

Posted in Interactive, Writing | Tagged , , , , , | Leave a comment

Animation Project 2

Posted in Time Based | Tagged , , , | Leave a comment

Digital Landscape

PImage man;
int value = 0;
float r;
float g;
float b;
float a;
void setup() {
size(600, 600);
background(0);
man = loadImage (“forest copy.jpg”);
image(man, 0, 140);
}

void draw() {

r = random(255);
g = random(255);
b = random(255);
a = random(255);
}
void mouseDragged() {
noStroke();
fill(value);
ellipse(mouseX, mouseY, 20, 20);
noStroke();
fill(r, g, b, a);
ellipse(mouseX, mouseY, 20, 20);
}
void keyPressed() {
if ( value == 0) {
value = 255;
} else {
value = 0;
}
}

Screen Shot 2016-10-06 at 1.52.00 PM.pngscreen-shot-2016-10-05-at-10-23-26-pm-copy

Posted in Time Based | Tagged , , , | Leave a comment

In Class Animate

long timer;
float framespeed= 50;
int circleX=100;
int Yo=180;
int circleW=186;
int circleZ=180;
int circleJ= 1;
int circleL =20;
int circleR =20;
int circleM =50;

void setup() {
size(300, 400);
smooth();
timer=millis();
}
void draw() {
fill(178,41,56);
ellipse(width/2, height/2, 200, 300); // head
fill(255);
ellipse(100, 180, circleL,circleR); // left eye
ellipse(186, 180, circleL, circleR); // right eye
fill(1);
ellipse(circleX,Yo, 10, 10); // left pupil
ellipse(circleW, circleZ, 10, 10); // right pupil

fill(185,38,205);
ellipse(143, 280, circleM, circleJ); // mouth

if (millis() – timer > framespeed)
{
timer = millis();

circleX=90;
circleW=176;
}
if (millis() – timer >= framespeed)
{
timer = millis();

circleX=110;
circleW=196;
}

if(millis() – timer <= framespeed){
circleJ = circleJ +1;}

if(circleJ>150){
circleJ=circleJ -1;
circleM=circleM+30;
}

if(millis() – timer <= framespeed){
circleJ = circleJ +1;}

if(circleJ>60){
circleJ=circleJ -1;
circleM=circleM+30;
}
if (circleJ>=67){
circleJ=circleJ-1;
circleM=circleM-30;
}
if(millis() – timer <= framespeed){
circleL = circleL+1;
circleR = circleR+1;
}
if(circleL>100){
circleL = circleL-1;
circleR=circleR-1;
}

}

Posted in Time Based | Tagged , , | Leave a comment