Animation – Final Project: Photoshop Tool Basics (feat. Pacman)

Title: Photoshop Tool Basics (feat. Pacman)



Link to my animation:

Description: Learn how to use tools in Adobe Photoshop with Pacman!

Credit: music: Rags 2 Riches Rag – Audionautix on Youtube audio library
sound effects: all from, public domain

My blog:


Actually my idea changed a lot throughout the second half semester. Initially I wanted to simulate a side-scrolling game, but extra actor of the main character would be needed to help me finish the animation and having someone that wasn’t enrolled in this class spend much time for my animation seemed to be impractical. Therefore, I changed my mind and decided to do an animation about color mismatch, but due to a property accident there wasn’t enough time left for me to shoot some scenes, and I also found that it was hard to keep consistency between different takes of the same scene because they were filmed in different days and time (and I didn’t use dragonframe). So I kind of kept the idea of doing something interesting as well as having a weird/mismatch feeling and finalized my idea —  to do a photoshop tutorial with paper cutouts simulating effects of different photoshop tools. I expected that after a short time of normal demo, things will go wild and become funny. I received feedback that I could use pacman as the character fighting against the cursor in order not to be photoshoped. I didn’t mean to let pacman interact with cursor, but I thought it would be really funny to do so, so I took this idea and developed my final story.

IMG_1427 (I can’t rotate it 🙁 )

For my animation I mainly used Dragon Frame to shoot frame by frame stop motion animation (the canvas) and scanned the paper collage Photoshop UI as the workspace. I used Premiere to edit, stabilize and merge Dragon Frame video clips, Photoshop to draw cursors and tool icons, crop out useful items (such as mac close buttons) from photos, and do other photo editing, and After Effects to composite my final animation and add sounds to it. I thought shooting photos would take up the most time, but the fact is I spent several times more time on After Effects. I need to take care of many subtle changes and details to make it look like what we actually do when we are using photoshop. For example, cursor is different when it’s on the canvas or on the workspace. Every time I switch to another tool, the tool bar should be replaced to the version where this tool is selected.

One of the most important thing I learned is to try to look at the bigger picture from the very beginning of a huge project. I changed my idea twice because I found new problems as I did the animation. If I could think over the potential obstacles and problems beforehand, some of the unnecessary trials could be avoided. Apart from that, I really learned a lot about AE. Before this course I knew nothing about it. But now I start to get familiar with it and learned how to organize files / compositions for a big project so that I won’t mess up when I want to modify only part of it. The last but not least thing I learned is sound really helps a lot tell the story in animation. In my animation if there were no sound effects, mouse clicking and character actions would not be highlighted, and audience wouldn’t have that strong immersive feeling.

NOC – Final Project: Color Adder, Sherry

Final Presentation Slides

I wanted to recreate a fish pond with flocking system so I experimented with my week 11 assignment flocking fish by using map() to convert the x and y position to color values of the fish so the color changes as fish move. (Code for this sketch can be found here).

I thought it was very beautiful and interesting therefore I decided to do something related to color changing instead of sticking to the fish idea.

I combined dat.gui.js with flocking system and created a very basic sketch in which users can hit buttons to generate two boids of different color they pick before. By pressing “blend” button, two boids will move to the center by seeking force and separating force, and during this process their colors will gradually change into a third color whose value is calculated by “red(c1) + red(c2), green(c1) + green(c2), blue(c1) + blue(c2)”. I still used map() because I want a more linear change. lerpColor() can work, but the color is altered too fast at the very beginning and fail to create the slowly merging effect I want.
Later I thought having only the colorful particles was a little boring, and I recalled what Moon suggested during the final concept presentation that it can work as an educational/informative project about color. So I built a function to show the name of the blended color also with particles. (I borrowed Chirag Mehta‘s ntc.js to get the name of colors. Thanks to his great library!) A very important problem I needed to deal with is how to let particles display in the shape of words. At first I came up with a method that is to create a text in where I want the particles to be, and then check pixels in and around the text area with a step of 5 whether the color of this pixel is the same as the third color. If so, a boid is created and displayed at this position. I modified the position of these particles by adding sin/cos values so as to add some energy to these particles. To end each color adding trial, I built reset function. Particles will explode toward outside the screen and shrink as time goes by. Once it moves out of screen or its lifespan decreases to below 0 it will be spliced from the array.
This sketch seemed to work well, but I found that once I pick some random colors it would return error. After a long time of debugging I realized that it is because when we pick colors on the dropdown palette in control panel, the values are float numbers, not integers. This would cause problem in dec to hex conversion and getting name of the color. After I added int() to all values the bug was fixed. [Code]

But another obvious issue with this version is that it takes a long time to go through pixels within a certain area and the sketch gets stuck when doing this. I tried to solve it by increasing the step (x+=8 instead of x+=5) and decreasing the size of the text, but it didn’t help that much and lost many points like this pictureaaa

While trying to solve this problem, I kept coming up with new improvements such as building functions to show names of addend colors as well and relating the amplitude of oscillation to the value of saturation of the color. The more saturated the color is, the more violently the particles vibrate. [Code]

After researching online, I found that there’s a function called textToPoints() that can return an array of points on the outline of text in the font you call the function on. It improves system performance a lot and there’s no delay. [Code]

Another improvement I would like to implement is to have particles move and then form the color name rather than directly appear in place. I tried to use the same boids for generating color and moving to form words (a rough demo below)

However it turned out that for each word there were hundreds or even thousands of points. In this case at the very beginning there needs to be hundreds of particles flocking, which is an extremely heavy burden to my laptop. To keep my sketch running smoothly, I did two adjustments: 1) giving up the soft body model I drew for every single boid instance (using vertex polygons to create soft, bouncing feeling); 2) separating the generating color boids from moving to form text boids. So when “name” button is clicked, a new array of boids will be generated at the center of the original flocking boids. The new particles will each be assigned a target point on the text and move according to the seeking force. I disabled separating force, in order to keep frame rate high. Apart from that I tested a lot to try my best to optimize my code and that’s really a tricky part. For example, every time either addend color is changed, the blended color should be recalculated, and the boids should be recreated. So these instructions should be executed more than once, but at the same time performing them once every frame will slow down the sketch a lot. My solution is to monitor color changing constantly, but only recalculate and regenerate things when it is the first time being executed or one of the two colors is changed.

After all these efforts, here’s my final demo!

It feels really good to create something I enjoy using the knowledge we have learnt in class!! Bringing in a natural and organic feeling into art makes the art even more beautiful 🙂

[Final Code]


NOC – Week 10: Tree Generator, Sherry

We learnt to code autonomous agents that can follow the flow field this week. For this week’s assignment I created a tree generator which can draw a tree including the crown, the trunk and the root.

Each frame two agents are generated, one in green and one in brown. I give them different initial velocities and positions so they can grow as the crown and trunk separately.

To improve system performance and keep the sketch tidy, vehicles will stop moving and be deleted when the length of vehicles array exceeds 500 or they grow out of the sketch.

NOC – Week 9: Skittles Burst, Sherry

This week I combined what we’ve learned – particle system and spring and created a skittles fountain. The colorful particles in the inclass example really reminds me of some of the skittles ads I’ve seen.

skittles skittles1


I defined an array containing the five colors of skittles and use random() to assign color to newly created particles. Also I set ellipses to be of the same width but different heights so it kind of created a feeling of 3D skittles. The particle source is at the draggable end of the spring.
Instead of lifespan, disappearance depends on the position of each particle. Particles fall below the certain height will disappear. Also I drew a tray moving along with the mouse. Particles with a positive speed on y-axis (i.e. falling particles but not ascending ones) will disappear once they touch the tray.