Houdini 20.0 Fluids

Whitewater (DOP)

On this page

The Whitewater shelf tool on the Particle Fluids tab creates spray, foam, and churn based on an underlying FLIP fluid simulation. It sets up the source and solver for a whitewater simulation. Whitewater is created from a source FLIP simulation based on several criteria including fluid acceleration, curvature, and vorticity. Whitewater enhances the look of fluid animation with secondary effects such as spray, foam, and bubbles.


Dynamics of the whitewater particles are governed by several mechanisms.

  • Acceleration due to Gravity is applied uniformly to all particles.

  • With default settings, Buoyancy pushes particles in the opposite direction of Gravity and is responsible for surfacing of bubbles.

  • The particles move with the underlying liquid’s flow as they are passively advected through its velocity field.

  • Special repellant points on the surface push away nearby whitewater particles, breaking up the foam structure and giving rise to a cellular pattern.

  • The liquid’s surface tension and adhesion result in foam “sticking” to the surface, not allowing it to submerge or peel away. These effects can be simulated by enabling depth control.

  • Density control is responsible for maintaining local whitewater distribution, preventing particles from clustering too closely. Additionally, this mechanism gives rise to whitewater cohesion, as it fights dispersion.

The Whitewater Solver allows for fine control of these forces at different depths. For instance, it may be desirable to strictly control density at the surface, but less so for airborne whitewater that should easily separate; this effect can be achieved by attenuating the strength of density control.

Whitewater Lifecycle

The solver takes care of birthing new whitewater particles, using the emission volume created by the Whitewater Source node to determine the amount. When Limit Emission is enabled, the present distribution of whitewater particles is also considered, avoiding over-emission.

Aging and killing of particles is likewise handled by the solver. As simulation progresses, whitewater ages in an ordinary manner; however, particles do not have a prescribed lifetime. Instead, a death chance is dynamically calculated for each particle, taking into account its current condition. The following factors are considered when determining a particle’s dying probability:

  • age - Older particles are more likely to be killed.

  • depth - As depth varies, so does whitewater’s chance of dying, per values of the Aging Rates.

  • density - When erosion is enabled, whitewater density in a particle’s neighborhood is also used to augment its death chance.

Advanced users can further manipulate particle lives by accessing their deathchance point attributes.


Ignoring other factors, Lifespan is the statistical average for lifetime of whitewater particles.


In addition to storing the whitewater particles, a Whitewater Object also contains a Repellants geometry holding the system’s repellant points. These points apply a repulsive force on the nearby whitewater, breaking up its structure and creating “bald” patches that form a larger cellular pattern. Aside from calculating and applying these forces, the solver also advects the repellants to ensure that the foam pattern moves with the liquid and tries to control their distribution by removing points from denser regions and reseeding points in scarce regions. On their birth frame, repellants are organizes into a group called justborn.

The manner in which repellants affect whitewater and other repellants is largely controlled by their various point attributes, as outlined below.


Controls how strongly the repellant is currently pushing whitewater particles; acts as a multiplier for the repellant’s strength (magnitude).


Contains the repellant’s strength. In contrast to action, this attribute is meant to be a permanent (or long-term) property, as opposed to a temporary modifier.


Governs the repellant’s shape, value of 0 being perfectly circular and 1 being maximally “noisy”.


Repellants with the same noise attribute may still have different shapes, depending on the value of their phase.


Holds rate of change of the phase attribute. As the phase attribute changes, so does the repellant’s shape. Value of 0 indicates that the shape is static, while values further away from 0 cause the repellant to continuously evolve its shape.


Controls the repellant’s size.

By default, repellants are ageless and do not expire. However, if Life Range on the Whitewater Solver is enabled, they will be given a random lifespan at birth (stored in the life point attribute) and will also contain the age attribute, which holds the elapsed time since the repellant’s creation. In this case, repellants are destroyed once their age exceeds their life.

Image courtesy of Igor Zanic.


  • Values of repellant properties can be visualized by enabling the appropriate settings on the Whitewater Object node.

  • Repellants also have a crampedness attribute, whose value is a measure of how tightly repellants are packed. This attribute is used by the solver for reseeding purposes. Range of crampedness values is 0-1.

  • Unless Density Threshold is enabled, repellants are not affected by whitewater; thus, it is possible to examine their evolution throughout a simulation by temporarily disabling whitewater emission.

How to animate a wave tank with whitewater

This tutorial explains how to get a nice looking wave tank in the viewport and flipbook. This is useful to see how the waves will move and where whitewater will be created.

  1. Press D to open the Display Options dialog.

  2. On the Geometry tab, turn off the Display Sprites checkbox.

  3. Create a Wave Tank using the tool on the Oceans shelf tab.

  4. On the wavetank node, lower the Particle Separation value to 0.10 or 0.07. This will create a better looking wave tank.

  5. Navigate back to the OBJ level and click the Whitewater tool on the Oceans shelf tab. Select the tank when prompted to add whitewater to the existing network.

  6. In the Limits tab of the Whitewater Solver, disable Closed Boundaries to prevent particles from bouncing off simulation bounds.


    This parameter is linked to fluid object. Delete the channel first using ⌃ Ctrl + ⇧ Shift + LMB, then turn it off.

  7. In the Foam tab of Whitewater Solver, change the repellants' Feature Size Range to 0.1-0.2. This will yield smaller features in the generated cellular foam pattern.


    You can turn on Repellants under the Whitewater Object to get a better visualization of the repellant particles that give rise to the cellular pattern.

  8. Play the scene to perform the liquid and whitewater simulations.


For beginners


Particle Fluids (SOP)

Viscous fluids (SOP)

Optimization (SOP)

FLIP Configure tools (SOP)

Particle Fluids (DOP)

Viscous Fluids (DOP)

Oceans (DOP)