Generative Music Software
Adam M. Smith has begun working on cfml – a context-free music language. It is a Context-Free Design Grammar – for music. I’m very interested in how this develops.
A graphical representation of cfml output (original here)
Cfml is implemented as an Impromptu library. Impromptu is a live coding environment, based on the Scheme language, and has existed since 2005. Andrew Sorensen, the developer of Impromptu, has created some of the most impressive examples of live coding I have seen. In particular, the last example, inspired by Keith Jarrett’s Sun Bear Concerts, is really impressive. (I might be slightly biased here, since I believe that Jarrett’s solo piano concerts – especially the Köln Concert and the Sun Bear Concerts – rank among the best music ever made).
Finally, Supercollider 140 is a selection of audio pieces all created in Supercollider in 140 characters or less. An interesting example of using restrictions to spur creativity. Another example is the 200 char Processing sketch contest.
Free Indy Game Development
This month also saw the release of the Unreal Development Kit, basically a version of the Unreal Engine 3, that is free for non-commercial use. This is great news for amateur game developers, but for me, the big question was whether this could be used as a powerful platform for generative art or live demos. I downloaded the kit and played around with it for a while, but while the 3D engine is stunning, UDK seems very geared towards graphical development (I certainly do not want to do draw my programs, and the built-in Unrealscript does not impress me either).
In related news, that basic version of Unity 2.6 is now also free. The main focus of Unity is also game development, but from a generative art / live demo perspective it holds greater promise. Unity offers an advanced graphics engine with user-scriptable shaders, integrated PhysX physics engine, and 3D audio.
Unitys development architecture is also very solid: scripts are written in (JIT-compiled) JavaScript, and components can be written in C# (using Mono, the open-source .NET implementation). Using a dynamic scripting language such as JavaScript to control a more rigid body of classes written in a more strict, statically typed environment, such as C#, is a good way to manage complex software. All Mozilla software – including Firefox – is built using this model (JavaScript + XPCOM C++ components), and newer platforms, such as Microsoft’s Silverlight platform also use it (JavaScript + C# components).
I made a few tests with Unity, and it is simple to control and instance even pretty complex structures. I considered writing a simple Structure Synth viewer using Unity, but was unfortunately put a bit off, when I discovered that Screen Space Ambient Occlusion and Full Screen Post-Processing Effects are not part of the free basic edition. The iPhone version of the Unity engine is not free either, but that is probably as could be expected.
It will be interesting to see if Unity will be picked up by the Generative Art community.
SIGGRAPH Asia
Finally two papers presented at SIGGRAPH Asia 2009 should be noted:
Shadow Art creates objects which cast three different shadows.
Sketch2Photo creates realistic photo-montages from freehand sketches annotated with text labels.
Re: Unity Ask and you shall receive 🙂
I dug out an LParser I wrote in .net oooh 4.5 years ago that I’ve never got around to write a front end too, spent a couple of evenings playing with unity and volia..
ah… it striped out the link…try again
http://oxidizer.sourceforge.net/unity.png
Nice! That is a 3D Hilbert curve, right? I had a discussion some month ago, about whether it is possible to generate such a curve in Structure Synth.
I think it requires a system with slightly more expressive power (such a an L-system), but I’m not completely sure.
Yes, its a 3D Hilbert curve, it was the most complicated 3D structure in ‘The Algorithmic Beauty of Plants’ that I could do based on how much of the turtle language my Unity code could interpret (I’ve added branching since, but not parameters, the LParser is supposed to be a full implementation of the LParser described in the book if my memory serves, I think I finished it).
Hilbert curves are fairly simple in an LParser, the rules in the book consist of straight forward turns and local x axis translations and LParsers don’t really recurse to generate the rules they’re more iterative building by replacement which helps.