Fall In
This is fairly straightforward: put 32 equally-spaced dots of (spherical) radius 0.03 on 20 equally-spaced circles of latitude on the unit sphere. Move the circles steadily down (with constant speed in the $z$-direction, not constant speed on the sphere), and project the whole image to the plane, adding in a color gradient. The key function is ProjectedSphericalCircle[]
, which converts a spherical disk to a stereographically-projected planar disk; the code for that function is here.
One slight nuisance is that Disk[]
doesn't seem to rasterize very well at low resolutions: the positioning of the disk in the resulting image is not very precise. I presume this is due to the discreteness of the pixel grid, and that the rasterization function tries to center the disk on a pixel or something of that nature, but the result is that outputting this to a GIF at the final resolution produces a bunch of dots that dance around quite a bit, as in this version:
To get smooth movement I ended up having to output at 2160x2160 and then resize in ImageMagick to the final 540x540 resolution.
Anyway, here's the code:
DynamicModule[{k = 32, l = 10, p,
cols = RGBColor /@ {"#EF476F", "#FFD166", "#06D6A0", "#118AB2", "#0C1C2C"}},
Manipulate[
p = Flatten[Table[
Normalize[{Sqrt[1 - #^2] Cos[?], Sqrt[1 - #^2] Sin[?], #} &[z - t]],
{z, -1. + 1/l, 1, 1/l}, {?, ?/k, 2 ?, 2 ?/k}], 1];
Graphics[
{{Blend[cols[[;; -2]], 1/2 #[[3]] + 1/2], ProjectedSphericalCircle[#, .03]} & /@ p},
PlotRange -> 2, ImageSize -> 540, Background -> cols[[-1]]],
{t, .001, 1/l}]
]