With the SVG/Bézier approach I doubt you could do 3D, true :)
In order to render a surface you have to either use a contouring algorithm like marching cubes to generate a mesh like the above three.js demo, or raytrace or raymarch them. Because metaballs describe a distance function, its really easy to use SDF raymarching and there is a whole category dedicated to metaball shaders on shader toy (https://www.shadertoy.com/results?query=tag%3Dmetaballs).
Works on Unix, Mac, iOS and Android
Code mirror is here - https://github.com/Zygo/xscreensaver
W.P. van Paassen's metaballs C code is here -
https://github.com/Zygo/xscreensaver/blob/master/hacks/metab...
Also, you can set various parameter tweaks for the metaballs from the command line or settings - count, radius etc.
Metaballs are way too expensive.
On a related note, one of the annoying things about metaballs for fluid surfacing is that there's some spooky action at a distance. Two drops of water will reach out towards each other as they come closer together, which makes no physical sense at all.
> SPH ... with 500 000 particles ... about 2.5 fps on my GTX 1070
Still slower than what CNCD & Fairlight demonstrated in 2011 with "Numb Res", at 120fps (stereo 3D) on a geforce 280:
> The demo features up to 500,000 particles running under 3D SPH in realtime on the GPU, with surface tension and viscosity terms; this is in combination with collisions, meshing, high end effects like MLAA and depth of field, and plenty of lighting effects