Quick attempt at explaining my understanding at metaballs without butchering them
The basic concept is to use a radial gradient, and set an alpha threshold that will be filtered. For example any pixel with an alpha lower than 150 will be set to an alpha of 0. This gives the metaball effect because when the gradients overlap, the areas that are normally hidden now have their alpha values added which brings them above the threshold.
So basically what I do is create a bunch of points, and set their velocities, positions and sizes.
|1 2 3 4 5 6 7 8 9 10||
Next I draw each of these onto a temp canvas
|1 2 3 4 5 6 7 8||
Then finally I read the pixel data, filter the alpha based on a threshold I set, and put the filtered data back onto the main canvas to be displayed.
|1 2 3 4 5 6 7 8 9 10 11 12||