Sunday, November 25, 2012

Weekend diversions, software

So, for whatever reason, I feel my computer UI should look cooler.  Not be more functional (though hopefully not be incredibly less functional), but just look cooler.  Watching movies like Iron Man, Tron: Legacy, and Ghost in the Shell leaves me feeling like there's a lot of potential being wasted, if not in utility, at least in presentation.

Tron: Legacy in particular has a lot of UI elements scattered about, and for all its failings in story telling, has some of my favorite art direction of any film.  Happily, there's information out there by some of the people who worked on it about how they did some of the elements in the film:

When fixing Quorra, there was an element in the DNA interface called the Quorra Heart which looked like a lava lamp. I generated an isosurface from a perlin-noise volume, using the marching cubes function found in the Geometric Tools WildMagic API, a truly wonderful lib for coding biodigital jazz, among other jazzes.
I decided to see if I could approximate something like the effect shown, so I started fiddling with what tools I could find.  I started by trying to get a CUDA development environment working, but even though nVidia says they support development in Eclipse, they only actually do so for OSX and Linux.  If you're developing in Windows, you have to be using Visual Studio 2008 or 2010.  And not Visual Studio Express either, but minimum Visual Studio Professional which retails starting at $600.  I'm way more likely to reformat my machine to Linux than I am to fork over $600 to MS just to good off with visual effects, so I started looking into alternatives.  Happily there are some pretty nice Java libraries for providing bindings to OpenGL and OpenCL which are usable independent of what windowing system you happen to be using.  I tend to prefer SWT because even though it's a little harder to get off the ground, I feel it gives you a better experience due to the thin wrapping of native controls.

I'm still pretty far away from transforming a 4D noise function into a set of isosurfaces bounded by a sphere, but I have been able to get a 2D point mesh to deform over time by passing it through a 3D noise function (actually a whole set of different noise functions implemented in OpenCL, which I found here).  It's visible in this picture of my workspace on the top monitor, though a static image doesn't really do it justice.

No comments:

Post a Comment