Houdini 20.5 Nodes Geometry nodes

Ripple Solver geometry node

Runs ripple simulations on geometry surfaces.

On this page

The Ripple Solver SOP can simulate ripples propagating on surfaces. It can be used to simulate ripples due to rain drops on wet ground, or a cruise steering on the ocean. Although the Ripple Solver works best on flat surfaces, it can also be use on arbitrary geometries like a character. This could be useful for creating cartoon-like effects on fabric or skin. However, it is common for the ripple solver to cause degeneracies when it is applied to complex geometries. In this case, please be advised that the parameters should be carefully tuned.

Two types of forces affect wave evolution:

To generate ripples, you need a Rest Geometry and a Displaced Geometry. Rest Geometry indicates what the geometry is supposed to look like when all points are at rest, in which state no ripple should occur on its surface. Displaced Geometry indicates how points are displaced in space initially when using static displacements, or displaced over time when using animated displacements.

Besides specifying the displacement of points with Displaced Geometry, ripples can also be generated by introducing a Collide Geometry, which deforms the surface of the initial geometry when colliding with it. This provides an intuitive interface for the common scenario where ripples are generated due to other objects.

Since the waves are generated by point displacements, the amplitude can be clamped by specifying how thick each part of the geometry is, then the displacement will not go beyond the specified thickness value at each point.

Inputs

Rest Geometry

The geometry where all points are at rest, on which ripples are generated. See Attributes for a list of optional point attributes for this input geometry.

Displaced Geometry

The geometry indicating displacements on the rest geometry, its geometrical structure must match that of the rest geometry. If this input is empty, the solver will attempt to use the first input as displaced geometry, and rest attribute on first input as the rest geometry.

Collide Geometry

The geometry that collides with the rippling geometry to generate ripples during the simulation. No collision happens if this input is empty. Note that collisions on the surface geometry can only cause it to distort inwards (i.e. along the negative normal direction), so it does not support use cases such as a fish leaping from within the water into the air.

Outputs

Geometry with Simulated Ripples

Rest geometry, whose point positions are manipulated to reflect the simulation results.

Attributes

rest

A vector that indicates position of the point at equilibrium. When the Displaced Geometry input is empty, this vector is assumed to be the rest position, which is used to determine the amount of displacement at each point during the simulation. If this attribute is not present, the position of the point is substituted, in which case there is no point displacement besides collisions with other objects.

wavespeed

A float between 0 and 1 indicating how fast the waves should propagate through this point. See parameter Wave Speed for how the wave speed is determined. If this attribute is not present, the default is 1. The name of this attribute can be customized.

restspring

A float between 0 and 1 indicating how strong the rest spring force should be applied to pull the point back to equilibrium. See parameter Rest Spring for how the rest spring is determined. If this attribute is not present, the default is 1. The name of this attribute can be customized.

conservation

A float between 0 and 1 indicating how much velocity should be conserved on this point after each second. See parameter Conservation for how the conservation is determined. If this attribute is not present, the default is 1. The name of this attribute can be customized.

thickness

A positive number indicating how thick the geometry is at this point. It is used to clamp the height of waves at a point and to determine the amount of distortion due to collisions. If this attribute is not present, the point thickness is determined by settings on the Thickness tab.

Parameters

Reset Simulation

Clears the entire simulation cache.

Start Frame

The simulation will begin at this frame on the Houdini playbar.

Setup

Wave Type

Decides how the points on the surface moves to create waves.

Vector

All points can move freely in any direction in space.

Normal

Points can only move along their rest normal direction.

CFL Condition

Adjusts how conservative the adaptive substep should be. Values less than 1 will produce smaller substeps than are required, larger than 1 will produce larger.

Larger values of CFL are likely dangerous as the automatically computed value is close to the maximum.

Wave Speed

How fast the ripples travel from point to point, proportional to the average edge length of the geometry.

See parameter Wave Speed Scale Mode for how wavespeed is determined at each point.

Wave Speed Scale Mode

Determines how wavespeed is set at each point.

No Scaling

Set to the constant Wave Speed.

Use Attribute

Set to the attribute with name Wave Speed Attribute.

Scale Attribute

Set to the product of the constant Wave Speed and the attribute with name __Wave

Speed Attribute__.

Wave Speed Attribute

The name for the attribute used to determine wavespeed.

See parameter Wave Speed Scale Mode for how wavespeed is determined at each point.

Rest Spring

Determines the strength of the springs tying the points to their rest positions. Since the wave speed calculation only looks at curvature of the displacement field, it will not restore the geometry to the rest state.

The total displacement will be preserved by the wave speed. Adding rest springs will drag the points back to their rest position, and possibly induce new ripples in doing so.

See parameter Rest Spring Scale Mode for how restspring is determined at each point.

Rest Spring Scale Mode

Determines how restspring is set at each point.

No Scaling

Set to the constant Rest Spring.

Use Attribute

Set to the attribute with name Rest Spring Attribute.

Scale Attribute

Set to the product of the constant Rest Spring and the attribute with name Rest Spring Attribute.

Rest Spring Attribute

The name for the attribute used to determine restspring.

See parameter Rest Spring Scale Mode for how restspring is determined at each point.

Conservation

Conservation determines how much energy is conserved in the system. The velocity is modified by this rate directly. It measures the fraction of velocity that will be kept after one second of animation.

A value of 1 means no velocity is lost, 0.5 means 50% after one second, and 0 means the velocity is zeroed out every frame. Note that a conservation outside the 0-1 range has no mathematical meaning, so it will always be clamped to the 0-1 range.

See parameter Conservation Scale Mode for how conservation is determined at each point.

Conservation Scale Mode

Determines how conservation is set at each point.

No Scaling

Set to the constant Conservation.

Use Attribute

Set to the attribute with name Conservation Attribute.

Scale Attribute

Set to the product of the constant Conservation and the attribute with name

Conservation Attribute.

Conservation Attribute

The name for the attribute used to determine conservation.

See parameter Conservation Scale Mode for how conservation is determined at each point.

Use Input as Animated Displacement

When this checkbox is turned on, the difference of a point’s position in the displaced and rest geometry is treated as a displacement to that point at every frame. WHen this checkbox is turned off, only the displacement on the first frame is retrieved for the simulation.

This option could be dangerous if not properly setup. For example, if this option is enabled with a non-animated displaced geometry, energy will be added onto the system at every frame, causing the displaced points to move towards infinity in the direction they are displaced.

Simulation

Min Substep

Regardless of how many substeps need to be performed to keep the system stable, at least this number of substeps will be performed.

Max Substep

No more than this number of substeps will be performed. However, if this causes the system to be unstable, the wavespeed and/or restspring values will be clamped to keep the system stable. The output attribute Substep Clamped will be set to 1 to report this happening.

Global Substep

Controls global substeps at the simulation level. Global Substeps are best used when you need to export the substepped geometry. They will use more memory per frame, but all substeps will be kept rather than just the final results for each frame.

Cache Simulation

Controls whether or not the simulation is cached to memory.

Cache Memory (MB)

The maximum size of the memory cache.

Thickness

Max Thickness

The maximum thickness at each point. If the thickness attribute is not present and Thickness From Geometry is not turned on, the thickness of every point will be set to this value. Alternatively, if Thickness From Geometry is turned on, the computed thickness value will not exceed max thickness.

A lower max thickness value is advised for complex geometries such as characters to avoid degeneracies.

Thickness From Geometry

When this checkbox is turned on, point thickness values are recomputed from the rest geometry.

Thickness Multiplier

This value is multiplied to the original thickness estimation value. This can suppress artifacts due to overestiamted thickness estimates.

Median of Neighbors

When this checkbox is turned on, computed point thickness values will take the median of its neighbors. This can eliminate outliers due to computation errors when computing thickness.

Use Blur

Controls whether or not blur is applied when computing thickness.

Blurring Iterations

When this checkbox is turned on, computed point thickness values will undergo this amount of blur iterations. This can smoothen the thickness value across the geometry.

Ray Offset

The amount of ray origin adjustment when performing the ray cast that determines thickness. A smaller value provides better accuracy, while being more potent to self intersection error.

Clamping

Enable Clamping

When enabled, clamping is performed so that displacement on a point does not go beyond the thickness of that point.

Soft Clamp

A value between 0 and 1 indicating the range of displacement between 0 and thickness that should be soft clamped. Higher soft clamp means a larger range of displacements getting scaled down and vice versa.

Soft clamp provides a smoother transition when displacement is close to thickness at a point, at the expense of visual accuracy.

Soft Clamp Falloff

A value between 0 and 2 which is a multiple of the soft clamp range. This is used for the range of displacement beyond thickness that should be clamped lower than the thickness value. Typically a falloff between 1 and 2 provides smoother transition when displacement gets close to thickness at a point.

Output

Use Substep Clamped

When this checkbox is turned on, the substepclamped field will be exported by the solver. This field indicates if Wave Speed or Rest Spring is clamped due to Max Substep causing the system to be unstable.

Substep Clamped

Custom name of the substepclamped field to be exported.

Use Thickness

When this checkbox is turned on, the thickness field will be exported by the solver. This field stores the thickness value at each point used by the simulation.

Thickness

Custom name of the thickness field to be exported.

Use Displacement

When enabled, the displacement field will be exported by the solver. This field stores the displacement value at each point before Clamping.

This field is a vector if Wave Type is set to Vector, and a scalar is Wave Type is set to Normal.

Displacement

Custom name of the displacement field to be exported.

Use Velocity

When this checkbox is turned on, the v field will be exported by the solver. This field stores the velocity vector at each point.

Velocity

Custom name of the v field to be exported.

Show Rest Warning

When this checkbox is turned on, warnings are displayed if Displaced Geometry is empty, and in which case, if Rest Geometry is missing rest attribute. Note that such configs are technically valid, so this option should be turned off if you are confident about the setup.

Show Guide Geometry

When this checkbox is turned on, a wireframe guide for Collide Geometry is displayed for collision visualization.

Examples

RippleFlippy Example for Ripple Solver geometry node

This example demonstrates the use of the Ripple Solver SOP using animated collider geometry to create ripples on a grid.

Geometry nodes