The Demo Scene never cease to amaze me. The technical quality of these demos is amazing – complex 3D scenes rendered real-time, procedural textures, real-time sound synthesis, and incredible low foot-prints.
Recently I stumbled upon demoscene.tv which features recorded videos (flash video) of many of the best demos. Of course part of the fun is actually running these demos, to be amazed that they are indeed real-time, but sadly my laptop is not geared towards neither CPU or GPU intensive activities.
By coincidence I came across Jeff Minter’s company Llamasoft and surprisingly discovered that it was still going strong.
Jeff Minter, probably most famous for his somewhat… surreal C64 games (“Attack of the Mutant Camels”, “Revenge of the Mutant Camels” and even “Metagalactic Llamas Battle at the Edge of Time”), apparently has been hacking away on light synthesizers for the past twenty years.
His light synthesizers are complex visualization modules either music-controlled or driven by human interaction. And his latest incarnation, Neon, is actually used in the Xbox 360’s dashboard.
The Neon Light Synthesizer in Action.
Who would have guessed that Llamasoft code would end up in the Xbox 360 firmware?
Well, I started worked on a spare time project, called Structure Synth: a small application for generative structure synthesis (in 3D). The app itself will be built around an embedded editor with a OpenGL visualization window next to it. Here is a mock-up shot:
Structure Synth GUI
The structures are designed in a simple language, EisenScript (named after the Great Russian director, Sergei Eistenstein, of course). It will be similar, but not identical, to the Context Free Design Grammer that Context Free uses.
An EisenScript defines a Rule Set, where each rule is defined as a number of Actions.
An Action would typically be to perform a Transformation and either call another rule, or one of the built-in drawing primitives. As in Context Free rules can be defined recursively in terms of themselves.
Rules are allowed to be ambiguous: more than one definition for a rule can exist, and when ambiguous rules are encountered the Builder will choose one at random. Again, as in Context Free, it will also be possible to specify a weighting for each of the rule definitions.
Here is an example of how an EisenScript rule set might look:
Structure Synth will be built in C++/Qt4.3/OpenGL and will be Open Source (GPL). It should be cross-platform (Windows, Linux, and Mac).
The Syntopia logo above was created by my first script in Context Free, a program I can highly recommend. It is a bit like Logo (does anyone remember this?) on steroids.
However, I’ve been thinking of ways of extending Context Free into 3D, and will start posting some of my design sketches for Structure Synth – an IDE/Language for creating generative art (like Context Free).
I plan to write it in C++/Qt4.3/OpenGL and it should be runnable on Windows/Mac/Linux.
Variation on the Syntopia Logo
For an example of a Context Free script, the syntax for the above picture can be downloaded here: circles.cfdg.
The syntax for Structure Synth will be quite similar to CFDG-script but with a few twists: like the ability to ‘retire’ rules after a certain number of either recursions or iterations, and the option to change (rendering) settings when a rule is executed. Naturally the ‘state’ operators (like rotations and deformations) also need to be adapted to a 3D world.
There will be an integrated OpenGL viewer, and I plan to add PovRay support for creating high-quality views of the 3D-models.
This is of course no trivial task, but the reason I have included it here, is because of its quite… futuristic interface, which has to be experienced. It runs directly inside your browser (also in Firefox! – but why isn’t it based on Silverlight?). Cool (and confusing).
Actually, though it is not quite as polished, the Automatic Photo Pop-up 2D to 3D conversion project, seems even more impressive:
It is possible to run the software yourself:
You will need to convert your input image to PNM format, but ImageMagick supports this format. After that you will need to run the ‘segment’ program to create the superpixel image. (Notice that the link is to source files – on Windows, VS2003 is able to compile it after changing ‘random()’ to ‘rand()’ a few places. I’ve also uploaded a Windows binary, in case you are too lazy).
I must admit that my humble attempts (requires a VRML viewer) with the software was nowhere as impressive as in the video. Also be aware that the conversion can be very slow for complicated pictures (~30 minutes for my tests).