Wave splash

For my advanced project, I have chosen to make a wave splash in Houdini. 

I found several reference images and videos. These videos were helpful to get an idea of the wave behaviour – especially speed and height.

Dramatic photos capture Beaverton man on Oregon Coast cliff during  Thursday's storm - oregonlive.com

I started by creating a base flip simulation. In Houdini, I made basic geometry. I used points from the volume node to scatter points onto the geometry. I then deleted portions of the points based on noise. The flip simulation was looking better when it was sourced from an irregular-shaped source. I converted the points into vdb and then into geometry. The final step was to hook the geometry into flip source node.

Source geometry

I created a dop network where I built the simulation. It’s a pretty basic flip simulation. In flip solver, I switched off reseeding and switched on detecting droplets and vorticity. I did add global drag and separated drag for droplets. Drag helped me to add air resistance to particles. In addition, to avoid particles being too fast, I did add pop speed limit. Because the wave splash is usually just white water, I knew I might not need to render the flip simulation, so I made the flip simulation low resolution. The flip simulation was important for sourcing white water.

Meshed flip simulation

To create white water, I made a white water source. White water source did need the flip simulation to generate volume on top of the flip. The volume is generated based on emission settings such as depth, speed, curvature, acceleration, vorticity etc. I made another dop network for white water. Inside dop network, I created a white water solver and white water object. I hooked the white water volume source to the white water solver. I also made a volume velocity field that I used as a wind.

Velocity field – wind

I used pop advect by volume node to advect the white water particles by the wind. The final white water sim had over 50 million points. To render out the white water, I rasterized the points into volume.

White water points
White water points rasterized into volume

To create the environment, I used assets and textures from Megascans. I adjusted the shaders of the stones and beach geometry by adding an extra layer of roughness to create wet spots. I also created a wet map that I used in the shader. The wet map was created by transferring attributes to beach/stones geometry whenever the meshed white water was at a certain distance. The attribute was then imported into the shader and added into roughness.

Visualised wet map – anything black is supposed to be wet.

As mentioned before, I rasterized the points of the white water into volume, rendering the white water as volume. I used Arnold for rendering. I usually prefer Mantra but Arnold was much faster with rendering volumes. I had to increase ray bounce to achieve the very bright white water look. The increased bouncing rays slowed down the rendering a lot.

Early render test

The white water in real life has a distinct wet look. Because I was rendering the white water as volume, I had to find a way to add the wetness on top of the volume. I meshed the white water sim into geometry and rendered the mesh with the default water shader. Later in Nuke, I put direct and indirect specular passes on top of the white water volume render. In this way, I achieved the white water wetness.

The specular pass

I had an issue with white edges around stone geometry that I had to fix in compositing. I managed to certainly fix it by extracting the edges of the stones and multiplying by the alpha of the white water. Then I put it over the stone’s beauty render. There are still some visible white edges. I didn’t manage to fix it entirely, but I think It’s better than nothing.

White edge issue – before
White edge issue – after

Otherwise, In Nuke, I adjusted the colours of the render. I did add sky that I projected on a sphere. I also created a subtle rainbow effect on top of white water.

Compositing – before
Compositing – after
Final work ^^

Leave a comment

Your email address will not be published. Required fields are marked *