CMYK (Five Second Project)


The awesome Greyscale Gorilla Five Second Project challenges people from all disciplines to create cool animations within a certain theme. There is one important rule: they have to be five seconds long. CMYK, the famous subtractive color model used for color printing, was selected as the current theme. Of course CMYK is short for Cyan, Magenta, Yellow and Key (aka black). A suitable theme for a first time submission, so I decided to join the fun! You can see the short ‘n sweet result on Vimeo or by playing the embedded video above. The piece is based on two ideas. First, I wanted to feature the CMYK colors as prominently as possible. Second, I had this vision of a retro-ish pixelated 3D type that I could blow up! Funnily enough, the final result is very much like the doodle scribbled on a little piece of paper a few days ago. 🙂

What the hell is Processing?!?!

As far as I know, mine is the only competition entry made with Processing. Most of the other animations were created with programs like Cinema4D or After Effects. So I’m guessing some of you may wonder: what the hell is Processing?!?! Well, it’s an open-source programming language developed at MIT. It’s oriented at creating visuals, but you can do a lot more. It’s basically JAVA, with a nice wrapper around it. And last but not least, there are many user-made libraries that extend the capabilities of Processing. In this project for example I use a library for the global illumination rendering. There’s a lot more to say, but that’s the nutshell version. I’ve been using Processing a little over a year now. Given my graphic design (read: non-programming) background the first steps were actually easier than you might imagine, because it’s very direct and accessible. The adaptation of more advanced techniques took some time though. As I gain more control over Processing, I’m better able to take my ideas from concept to realisation. And compared to traditional programs, I feel it has given me a lot of additional creative freedom. This is probably what I love most about Processing. All in all, it’s been and still is a gradual and most importantly fun and exciting learning process.

Type in the Third Dimension

My approach to creating 3D blocky type was to use a black and white height map. The brightness at every x-y position translated into a corresponding number of boxes in the z-dimension. Black meant zero boxes, white lead to the full depth and greys to everything in between. I started with a small image made in Photoshop and got to work on the proof-of-concept for this idea. Once I saw that it actually worked, I implemented the whole thing into Processing. What I mean is that I no longer create the image beforehand, but I use an off-screen buffer directly in Processing. This means I can type anything I want and instantly give it the 3D-blocky-type treatment. So it’s much more flexible. In the development phase I experimented with the right font, blur amount, pixels dimensions and z-depth for a nice visual look. Mostly in realtime using keyboard input to change values and see the effect on-screen.

Tech Talk

I can imagine this might be total mumbo jumbo for some! Feel free to ask questions if you don’t understand something or would like to know more about it… Four renderers were used for the realisation of this project. OpenGL was the main renderer, used for most graphics and the previsualization of the P5Sunflow parts. The second, called Sunflow, is an open-source java-based global illumination renderer, hence the smooth lighting ;P The other two renderers were P2D and JAVA2D, both used mainly for the creation of the HUD-elements (using off-screen buffering). The OpenGL version basically runs in realtime. In P5Sunflow, it took about 3 hours to render 150 frames at 1280×720, which averages to 1 minute and 14 seconds per individual frame. I must say this is really acceptable for a ray-trace renderer with global illumination. I wrote a separate application, which handles the compositing of all layers. An alpha mask is used to accurately separate layers.

The greatest result is learning something new!

I learned a lot from this project. Not in the least due to some much-needed creative problem solving along the way. The fact that it’s only five seconds lowers the barrier for entry, but the skill set you’re using – and improving – is basically the same whether it’s a short or long animation. So I’d have to compliment Greyscale Gorilla on this very inspirational initiative! Five seconds is short. Sure. But the flip side is you can up the production value per frame. Add as much details as you can and just tweak it like there’s no tomorrow. Furthermore, this project introduced me to motion graphics and short animations, which is a whole new and exciting world for me. On the technical side, I learned about the pro’s and con’s of different renderers. OpenGL has excellent gradient capabilities and is very fast, even with loads of geometry flying around. P5Sunflow makes stuff look cool through global illumination. Finally JAVA2D and P2D are extremely useful for the creation of smooth 2D graphics. On the other side of the coin. The latter don’t do 3D, while OpenGL isn’t the best choice for 2D. And P5Sunflow, well everyone who has used it knows it can be slow as hell!😀 So what matters is that you choose the one that best fits your project. Or even within a project, use the one that’s appropriate for that specific purpose. Another good thing is that I can re-use most of the code written for this project. Because it’s written in an object-oriented manner, which means it’s modular and different parts can be used (and improved) in future experiments. Last but not least, the final thing I learned is that a clear goal and a hard deadline work well for me!🙂

Flickr sets related to this post:

  1. CMYK
Comments
12 Responses to “CMYK (Five Second Project)”
  1. stefanobeck says:

    You use mograph module from cinema4d?

    • Amnon says:

      No, I did not use mograph nor did I use cinema 4d to begin with. As you can read in the post above, I used a programming language called Processing together with a global illumination renderer called Sunflow.

  2. Ross says:

    Very very nice.

  3. Liquid says:

    super nice!!

  4. Justin says:

    Hey Amnon, I’m digging your site a lot. I almost feel inadequate because I’ve known about processing for a while and it seems like you know way more than I do. In particular, this piece and the long form pieces you recently posted to Flickr. I’m even impressed with the blue and orange post because it didn’t occur to me to use symmetry (I still haven’t figured this out for myself) and I’m curious to know how to create those “bombs”.

    I for one would like to know more general specifics about how you work in processing (if that makes sense).

    I think a big help for me would be to understand how to add real-time controls to a sketch so that I can play more. I’ve already made some simple keystroke controls for some of my sketches to do things like draw a background, get new random colors from my colorpool, and save the frame as an image (of course). I think I’m just intimidated about using that library, ControlP5.

    Awesome stuff.

    • Amnon says:

      Hi Justin, good to hear you’re digging my experiments! I’ll keep your suggestion about specifics in mind. I’ve been figuring out a way to post source code on WordPress, which would also be fruitful. If you refer to the blue and orange bombs piece, that’s easy. Start with a radius of zero, increase it while you’re moving down, then stop moving and decrease the radius to zero again. Repeat from the top. Here’s some basic code you can use, hope this helps!🙂

      // put this before setup
      int radius;

      // put this in draw
      ellipse(mouseX,mouseY,radius,radius);
      ellipse(width-mouseX,mouseY,radius,radius);

      // put this in keyPressed()
      if(key == ‘z’) {radius -= 2;}
      if(key == ‘x’) {radius += 2;}

      By the way, I use controlP5 sometimes and it’s great. But like 90% of the time I just use keyboard input. Just remember that everything in your sketch that’s a number can easily be replaced by a variable and increased/decreased like the radius example. Just play around with it🙂

  5. Karl says:

    Just bumped into your site after searching vimeo for processing work. I’m very astounded by your work and inspired. My background is also in motion graphics and after becoming frustrated with learning cinema4D, I have recently begun learning processing. After being dissapointed with the primitive aesthetics of sketches I’ve been making it’s good to know you can make realistic and beautifully lit renders using sunflow. I’ll definately take a look into it! big cheers mate.

    • Amnon says:

      Thanks! You’re stepping in timely because right now -in addition to P5Sunflow- there are two other sunflow-in-processing libraries that are being actively developed (sunflowapiapi and joons). Also see the other post for more info on this. So there are actually multiple alternatives for bringing sunflow to Processing.

Trackbacks
Check out what others are saying...
  1. […] Two months ago I went a little further to create a short motion graphics experiment for the 5 second project. All my Sunflow projects until that time worked through the P5Sunflow library. The main advantage […]

  2. […] per un’estrusione (argomento di un post precedente), prendendo ispirazione da questo post di […]



%d bloggers like this: