Creative Coding Frameworks
When I started working on the visualizer project, before I even had the idea for Orbiter in my head, I only had a vague notion of what I wanted to do and no idea how to do it. I hadn’t done any hobby programming for a while, so I started by looking into what tools I could use.
There are many ways to approach “creative coding” and I looked at a few of them. I was looking for a platform that’s easy to learn, flexible, and has a good support community.
Max is a powerful tool for both visualization (including OpenGL 3D support) and audio, and it can integrate tightly with Ableton Live. It’s more popular with professionals than hobbyists. I did a few tutorials and found it alien to me, as it’s a visual programming language, and I’m used to writing code. The programming style is similar to Quartz Composer which comes with OSX. It’s proprietary software and there is only a time-limited trial version.
Processing is an open-source Java framework for creative programming. It’s very popular, and I found many cool projects made with it, but it’s more targeted towards beginner programmers. Also it’s Java, which is not known for powering performance-intensive 3D engines. I didn’t actually try this one.
Unity is a full-blown game engine, but a game engine and a creative coding framework aren’t all that different underneath. Both are real-time 3D engines, but Unity adds a lot of useful game engine features like a scene graph, level editor, particle system, and so on. The programming can be done in C#, and I’ve used their IDE before and really liked it. It definitely would have been less work to use, but it’s not open-source and the free edition has limitations such as not being able to use custom plugins (needed for MIDI or OSC) or access to low-level rendering (for effects). Still one to consider as it would be the fastest to prototype with.
This is the most popular framework among creative programmers, from what I can tell. It is C++ and based entirely on open-source libraries. I originally heard about it from artist Evan Roth, who uses it for a lot of his Graffiti Analysis projects. It’s also multi-platform, including iOS and Android.
Cinder is another open-source C++ framework, very similar to openFrameworks. I looked into the samples for both and I like the coding style/conventions and API of cinder better. This interview with the creators of cinder explains the ideas behind it and the differences with openFrameworks. In the end I went with cinder because it felt more natural to me.
I should say that cinder is a pretty barebones framework, and I’ve mostly used the samples and forums as my guides since the documentation is minimal. I’ve had to write a lot of the engine infrastructure myself, but on the plus side I’m learning a lot and I have total control. Having experience with game engine programming certainly helps in this area.
This past weekend I added the ability to capture video of the scene. Cinder made this easy, it took more time trying to figure out the best compression settings than writing code. I sent one of the first captures I made to Diagraf to see what he thinks and less than a day later he had made this awesome video with it:
And that’s why I do this.