An FX side project of mine was to attempt a procedural rain system. The system relies on a set of rules guiding the behavior of water droplets during the different phases of the droplet’s existence. Here is a rendered demonstration of the system and below is a short breakdown of research as well as a conceptual explanation of the components acting in the rain system. The alien 3D model is from the amazing artists at MAKE, which I used to demonstrate the system working on an animated and deforming model.
The purpose was to explore water behavior in small drops and mimic it on a production level. It all began in the shower… with an HDRI ball and some high speed video shot on a phone for reference. If you look closely, you can see myself and my curious assistant, Tina reflecting in the HDRI ball.
First the particles are emitted from the source and they can either hit the ground, a puddle, or a collision object. If they hit the ground, they simply splash into smaller droplets which die when they hit the ground a 2nd time.
If they hit a predetermined puddle of water, they will create a ripple in the puddle geometry and then splash into smaller droplets.
If they hit the collision object, they enter a new system that begins with the drop splashing against the collision object, creating a tiny splash of smaller particles.
A small percentage of the particles that hit the collision object will stick to the surface, stationary at first.
If a new droplet hits the surface near another droplet that is already stuck to the surface, then a larger droplet will be created in their place at the average position of both drops, simulating a buildup of water droplets. This buildup can occur up to three droplets before they are “heavy enough” that gravity overpowers adhesion and they begin to slide down the objects surface.
As the sliding droplets move down the objects surface, they maintain their movement properly on the object’s surface and take into account the object’s movement and deformation by inheriting the closest vertex velocity.
As the droplets slide down the object, they collect droplets in their path, leaving a clean trail behind them. As they slide, they also leave behind very tiny micro droplets of water. These micro droplets will snap together if they are emitted close enough, simulating a surface tension effect. The sliding droplets can slide down the object at one of three different main speed values with appropriate variation. The slower speeds have various levels of noise applied to them to imitate varying friction on the objects surface so as the droplets slide down, the slower ones stutter their speed. The trails left behind is also determined by how fast the droplet is sliding so the slower sliding droplets have a very small, or non-existent trail behind them, which was something I observed in the reference footage.
If the sliding droplets come near enough to any other sliding droplets, their simulated surface tension will pull them together and their combined weight will cause them to gain momentum from gravity.
As the droplets reach the bottom of the object, they maintain a primitive form of adhesion to the object’s surface so the particles will stay close to the surface until they reach the lowest point of the object. Once they are near enough to the lowest point and their overall velocity has gone below a threshold, they will enter a new phase of a collecting droplet that is about to fall. This droplet will combine with other nearby droplets that have also slid down to the lowest point on the object and once large enough, the droplet will finally fall from the object until hitting the ground and becoming a very small splash, which concludes the life of the droplet.
Overall, I feel there could be many improvements to the system and mostly, I want to see more variation in the shapes of the trails. I don’t really like that the trails are so consistently shaped like a tapered tube and I would prefer they have a more realistic shape similar to the first shot of the edit but that shot was simulated in Realflow and had the full SPH solver combined with some python scripting. From what I’ve observed, the shots that require rain systems are rarely close enough to perceive this level of detail so I do think my rain system may one day be useful but I’m more likely to re-build it and fine tune the behavior and add realism. For now, it’s time to move on to other explorations in the wonderful world of FX.