Ambient Rain
I wanted the lab section to have a bit of weather, something atmospheric and barely there. So I made 35 streaks that fall at their own pace, and each one ends its life in a flat little ellipse where it meets the ground.
Each drop is independent
Every streak carries its own x position, fall speed, length, and a randomised "ground" height. When a streak respawns I reroll all of those, so the rain never settles into a visible pattern or a shared rhythm.
Landing into ripples
A streak falls until its tip crosses its ground line. At that instant I push a ripple into a separate list and respawn the streak above the frame. The ripple remembers where it landed and a perspective factor based on how far down the scene it is.
Fake perspective
I draw the ripples as ellipses squashed to 35% height, which reads as a circle seen at a shallow angle. Ripples lower in the frame expand wider, and that alone sells a floor receding away from you without any real 3D.
Frame-rate independent
I multiply movement by the real elapsed time between frames, clamped so a backgrounded tab cannot make every drop teleport. The rain falls at the same speed on a 60Hz screen and a 120Hz one.