The initial state was a disc of evenly spaced points, these points become spheres, locked to a Y=0 'ground' plane in a rigid-body simulation using Bullet in Houdini. This essentially treats the spheres as simpler 2d colliding circles.
Forces are applied that attract all spheres towards the origin, this causes them to naturally pack into a hexagonal, triangular lattice pattern. Additional forces are applied that are intended to create rotational flow in the spheres, anticlockwise in the center of the disc, through to clockwise at the edge of the disc. I really wanted flow in both directions, and as it turns out, the packing is so stable that it can really dominate the dynamics of colliding circles, so the origin-attraction and the counter-rotating forces need to be very carefully tuned in order to actually get the bi-directional flow that you see here.
As a post-process to the the simulation, the animation of the 'circles' that resulted has been put through a geometric process that I've recently had some fun with (finally getting it right!?) which is called 'Circle Inversion'. I find it really fascinating! It is what makes these spheres have such different radii, and in fact go out potentially to infinity, even enclosing the whole scene at a massive size! - all based on where they are originally positioned with respect to the inversion centre (which is where you see the light positioned in this clip). The effect of the super-huge spheres in this render has been carefully filtered out and would have otherwise led to a flickery mess.
This was rendered using Mantra/PBR using a nice foresty HDRI, which you can see reflected in the background on the titanium spheres.