This project covers stylized rain effect using Houdini and Octane render engine. As always full project files are available for download on my Patreon page.

First, let's take a look at the splash geometry. The main elements that make up this effect are shown below. The last gif displays all elements combined to make the final splash geometry sequence. Note that each element is fully procedural and can be regenerated by using a different seed attribute. This gives us infinite variation in splash geometry while keeping the overall shape consistent. Once we have the splash geometry we store it as a sequence of geometry files.

First, let's take a look at the splash geometry. The main elements that make up this effect are shown below. The last gif displays all elements combined to make the final splash geometry sequence. Note that each element is fully procedural and can be regenerated by using a different seed attribute. This gives us infinite variation in splash geometry while keeping the overall shape consistent. Once we have the splash geometry we store it as a sequence of geometry files.

To simulate rain, we use a particle simulation and emit points with a downward velocity. Once a particle collides with the ground plane, we freeze the particle at its hit point. We then store an attribute on each frozen particle that denotes the number of frames that have elapsed since the collision occurred. Next, we spawn our splash geometry onto each frozen particle and use the 'elapsed frames' attribute to drive the splash's animation frame. We kill the frozen particle if the 'elapsed frames' attribute is greater than the total number of frames in our splash geometry sequence.

To create a water ripple effect, we will displace our ground plane geometry at each particle hit point and use this displaced geometry as one of the inputs for the ripple solver. Additionally, we want to generate a surface foam-like effect. This can be achieved by filtering our ripple geometry and retaining only the polygons with a non-zero vertical displacement. Furthermore, we can enhance the breakup effect by randomly deleting some primitives.