+---------------------+ | FFFF OO W W | | F O O W W | | FF L OO W W W | | F L WW WW | | F LLL W W | +---------------------- by: mystran Assembly 2018 - 4k intro. --------------------------- One ODE to rule them all: multiply the gradient of Perlin noise with the gradient of a signed distance field to get a divergence free vector field. Then take the gradient of the squared distance field and add this together with the previous DFVF scaled by the reciprocal of the squared SDF... or something along those lines (fudge factors may apply). Use the result as the acceleration for particles and they'll move towards the SDF surface when far away, then start to "curl" around on the surface once they get close enough. Having some inertia helps (a lot) to keep the particles from bunching up too much when the SDF keeps changing. The intro makes some minor effort to scale for framerate variance, but if the framerate drops too much (I really hope that won't be a problem on the compo machine), you'll probably see the particles bunching up more than they should... which an artifact of the Euler-integration that's sadly hard to solve without using a whole lot more code... and it'd make the whole thing run a bit slower too.. so like... whatever. Developed on GTX570 (which doesn't really even manage the 1080p properly), never tested on any AMD hardware... but if there's a problem I might be able to fix it after the party, as the size-bound is not terribly tight. The code is mostly GLSL obvious, but rest of it is C++ using MSVC08 and then crinkler (surprise) to pack it all up. Audio is made with fairly elementary Karplus-Strong model, fed with enveloped noise, with MIDI track exported from FLStudio and preprocessed with a small Python script into a few nice C-arrays... and at this point I'd like to thank Urs of Mercury for pointing out (in his last year presentation) that data actually does often compress really well compared to code. I'll promise to try to do something other than particles next year. ;) You can contact me at mystran@gmail.com.