It’s been something that I wanted to achieve for a quite a while, and finally got the right mix and enough to get it to work. Picking a WAVe file, get the spectrum decomposition of it (using a Fast Fourier Transform library named KISS FFT) and finally wrap the whole thing into a Custom ICE Node so that I could use it to drive particles.
Here is a few trial, one using a typical spectrum bars, and the other one using spectrum information to drive strands and deformation.
I’ve also made a tutorial on how to use the plug-in:
And finally here is a screenshot of the ICE Tree (there is a smaller ICE Tree before that that sets for each point its frequency, a normalized value between 0 and 1 covering the full frequency range from the audio file):
Scene is available for download: spectrumBars scene.
I am not an expert in C++ nor in Softimage Development, so there is sure some room for improvement! The code is available just for that 🙂 You can browse and fork it on Github: https://github.com/claudevervoort-perso/xsi-audio-spectrum. The DLL is also available on GitHub.
Today was the kick-off of the Learning Analytics Massive Open Online Course 2012 (http://lak12.mooc.ca/). I feel that is going to be a great experience on 2 accounts at least: last semester I took the Stanford Machine Learning class (I highly recommend it btw!), so I see that now that I got acquainted with the tools, I can see how they could be made to use in the context of Analytics in Education (for which I know very little).
The other very interesting aspect for me is the pedagogical approach. The Stanford course was a great course, but I would say very traditional, with centrally hosted and authored content, a very linear flow. That’s something I’ve always be used too and can easily comprehend. Here, in a MOOC, from what I comprehend, that seems all reversed. There is no central repository, facilitators more than instructors, and a network of content that’s alive and fed by participants, ready to harvest, re-hash and re-share the richness of the web. I’m curious to see how that will unfold!
Sounds like another post on ICE and Softimage Particles, but not at all! This semester I took 2 of the online courses offered by Stanford (introduction to AI and Machine Learning), that was a great experiment that I’m glad will continue on next semester. If you have not yet, check out those courses: ai-class.com and ml-class.org.
In the AI Course Sebastian Thurn introduced seemingly a key algorithm in Robotics: Particle Filter, which is used to derive the position of a robot based on subsequent observations of its environment. I decided to give it a try, also a good reason to play with HTML5 canvases. Although the core of the logic truly lies in a bit more than 10 lines of code, it ended up being a bit more to build all the environment around it. What I actually found the most challenging was to build the correlation between a particle’s observation and the robot’s one so that a proper weight could be derived.
Anyway, enough said. You can have a look at the experiment here: particle filter.
You can also follow some discussion on it on reddit.
I did not find any.
So I started working on one 🙂 and Nodles was born. Still in its infancy you can have a look at it here: Nodles Home Page. Right now the idea is just to provide a visual library to build simple trees. No evaluation framework (yet).
Carrying on the flocking experience, I moved to another layer of difficulty doing some kind of ‘Game of Life’. Here you have 3 type of particles:
- The Birds: they eat the flies and mate when healthy enough or die when exhausted
- The Flies: well, the flee the birds, they eat the leaves, and same as the birds, they mate whenever healthy enough or die of starvation
- Finally the leaves: they grow on tree at a rate that depends on the number of already existing leaves (until a plateau number).
So few leaves, small food, exhausted even faster, the flies dies, the birds too…
Also there is a bit a genetic algorithm: each particle as slightly different attribute (max speed VS max health), and the offspring takes the attribute of one of its parents… so evolution at work, only the fittest combination should survive.
I have always been intrigued by the vegetation generators, and so I finally decided to give it a try. So this flavor uses:
- Strands to grow the branches: a state machine drives the branching and the level of nesting.
- Billboards particles for the leaves: leaves are 2d images with an alpha cutout projected on Quads. The Quads sizes and Orientations change based on the age of the particles.
I have also done a tutorial in PDF that you can look at if you want to know more: ICE Vine Tutorial. It contains a detailed explanation with ICE tree screen captures. Hopefully that can get you going or spawn your own ideas!