All posts by Mikael Hvidtfeldt Christensen

Structure Synth v0.8.5 Released (“Exonautica Reloaded”)

Well, it turned out that version 0.8.0 missed a few dependencies for the Windows build (so it would not run on a clean Windows XP SP2 install). So, before going away on my summer holiday, I made a quick intermediate release of Structure Synth. Now, if it would just stop raining…


Version 0.8.5 changes:
The provided Windows binaries did not work for Windows XP (without installing the VS2008 C++ Runtime manually)
Size and position of window are now stored in registry.
Fixed a missing include statement causing compilation errors on Debian.
Fixed a bug which caused errors to be highlighted on the wrong text line in GUI, when comments were present.
Fixed a newly introduced bug which caused the ‘maxdepth’ property for a custom rule to fail.
Bug fix: TemplateExporter: All objects may now use the {UID} tag.
Bug fix: Reset View did not reset scale.

The Second Coming of JavaScript

Some months ago, John Resig created processing.js – an impressive JavaScript port of processing, which draws its output on a ‘canvas’ element entirely client-side inside your browser (at least if your web-browser is Firefox 3 or a recent nightly build of WebKit, that is).

Now Context Free (the original inspiration for Structure Synth) has been ported to JavaScript too: Aza Raskin has created ContextFree.js (Source here).

JavaScript has undergone a tremendous evolution. From creating cheesy ‘onMouseOver’ effects for buttons on web pages to being the ‘glue’ binding together complex applications like Firefox or Songbird (the Mozilla application frameworks works by stringing together C++ components with JavaScript). Likewise Microsoft chose to build their Silverlight technology on .NET components which can be controlled by JavaScript in the browser.

And of course the ActionScript in Adobe Flash is also JavaScript. Adobe (and/or Macromedia) has put a lot of effort into creating fast JavaScript implementations – most notably their Tamarin virtual machine and Just-In-Time compiler, which in theory should make JavaScript almost as fast as native code – or at least comparable to other JIT compiled languages such as Java and the .NET languages. Tamarin is open-sourced, and will eventually make it into Firefox 4.

Finally, while the Tamarin virtual machine was built to execute (and JIT) bytecode originating from JavaScript, other languages may target Tamarin as well. Adobe has demonstrated the possibility of compiling standard C programs into Tamarin parseable byte-code (their demo included Quake, a Nintendo emulator, and several languages like Python and Ruby).

So perhaps a future version of Structure Synth could be running as C++ compiled into Tamarin bytecode in a Flash application…

Structure Synth 0.8 (Exonautica) Released

A new version of Structure Synth – version 0.8.0 – has been released.

Binaries available for Windows XP and Vista. Source available for Linux and OS X (a binary OS X build is on its way).

– The new template rendering system allows for easily defining custom exporters (with examples for PovRay and Sunflow).
– Control of the random seed from GUI.
– Minor bug fixes.
– Splash Screen.

Download at:

Third Party Structure Synth Export

David Bucciarelli has written a nice Structure Synth template for creating Luxrender export:

He has also written a very useful Blender import script, that makes it possible to import Structure Synth creations directly into Blender:

This opens up a lot of possibilities since it is now possible to control the lightning and tweak the objects and textures and so on, before rendering.

David’s scripts can be found here together with some more examples.

In order to use the template export in Structure Synth it is necessary to pull the source from SVN and compile it, since the latest binary version (0.7) does not support export templates.

BTW, I plan to release version 0.8 of Structure Synth as soon as I pull myself together to create a build of the current SVN sources.

When the going gets weird, the weird turn pro

While Steve Reich is not directly related to generative art, I think he somehow fits the overall theme of this blog. Even though his minimalistic phrases phasing in and out of sync easily could be performed by a computer, for a human the rhythmic skills necessary to perform his compositions are beyond imagination.

‘Piano Phase’ was originally composed for two pianos (and two piano players). Here both parts are performed by Peter Aidu, a Russian composer and piano player.

Peter Aidu performing Piano Phase (YouTube)
High Quality recording of the above

Another (only vaguely related) keyboard video:
Sun Ra Keyboard Solo (1980)

Structure Synth on Mac OS X

Structure Synth development has been quite idle for the past month (due to lots of work including a Japan visit).

But after a few hours of frustation, I managed to get Structure Synth to compile on Mac OS X – so now Structure Synth is officially supported on Windows, Linux and Mac OS X.

Build instruction (and probably binary builds – if I manage to create an installer) will be added at next release.

Structure Synth – Mac OS X screenshot

Structure Synth – Mac OS X screenshot

Are Boxes too Square for Sunflow?

Structure Synth is now able to export boxes to Sunflow. That was actually a lot harder than spheres.

Boxicity (Sunflow render)

Boxicity (Sunflow render).

Sunflow has some amazing global illumination lightning, but why doesn’t it have a ‘box’ primitive in its scene graph language? I mean, it has Banchoff Surfaces, tori and teapots, but not a simple box?

By the way, for those who really dig boxes, check out the Flickr Boxclub (a few Structure Synth creations may also be spotted there).

Structure Synth Rendering Templates

Creating a reasonable way of exporting Structure Synth objects to other renderers, like Sunflow and POV-Ray turned out to be more difficult than I expected. Not because they have complicated scene description languages – they don’t – but because there are a lot of settings and parameters, and I do not want to wrap and support every single one of them.

Sunflow export

Example Sunflow rendering with Global Illuminated Ambient Occlusion.

The approach I came up with is quite simple – it is now possible to define a number of rendering templates which are XML-files containing a number of text fragments, one for each of the primitives (box, sphere, …) and a ‘start’ and ‘end’ fragment.

For instance, a fragment (for a Sunflow exporter) for the ‘sphere’ primitive could look like this:

object {
  shader "s05"
  type sphere
  c {cx} {cy} {cz}
  r {rad}

where the center and radius parameters would be substituted for each instance of the primitive.