+---------------------+
| 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.