Houdini 21.0 Nodes Copernicus nodes

Pyro Project Non-Divergent Electro Static Copernicus node

Removes divergence from a velocity VDB.

On this page
Since 21.0

This operation removes the divergence from a velocity VDB. This is a core operation for fluid simulations as it finds the closest physical field to the provided set of velocities.

The Electro Static in the name derives from how it does the projection. It builds an electrostatic potential from the divergence and applies the resulting field. This allows a multi-scale approach to accelerate the removal even with sparse fields.

The operation is done using corner-sampled divergences. This means there are certain modes of the velocity field that are invisible to it. Hourglass filtering can eliminate these.

Collisions are applied with Iterated Orthogonal Projection (IOP). Essentially, this means that any voxel inside the collision SDF is set to the collision velocity before each divergence removal.

The operation is approximate, but will converge to the correct results. To improve quality or to have stronger collisions, increase iterations. The other tuning parameters should likely be left as-is.

Parameters

Iterations

The projection process is repeated this number of times. Increased iterations takes longer, but will produce a more accurate result. It will also increase the reliability of the collision operation.

Ambient Velocity

The global implied velocity. The actual provided velocity is assumed to not contain this, so any use of v must implicitly add it to get the proper world space velocity. In particular, the collision velocity has to be adjusted by this as collision velocities are in world space, not wind-space.

Voxel Kernel Size

Size of the kernel to apply at the voxel size. Larger will be higher quality but at a rapidly increasing cost in time.

Double Voxel Pass

Apply two voxel kernel passes before performing a block pass.

Block Pass

Enable the block pass. In this pass divergence is reduced to dipoles in large blocks, allowing action at distance without having to increase the voxel kernel size.

Block Kernel Size

The size, in blocks, to accumulate the surrounding block’s dipoles when updating a voxel. Larger will be higher quality but at a rapidly increasing cost in time.

Feather Blocks

Reduce the strength of the block correction over the farthest blocks. This avoids sharp transitions in the corrected velocity if there are strong impulses, but will require more iterations or time to correct divergence fully.

Point Pass

Combines the block dipoles into an even coarser set of points. These are then applied to every voxel. This ensures global effect of divergence in a single pass.

Inputs

v

Input velocity VDB to remove divergence from.

reference

A Float VDB with same topology as v, this used to compute divergence.

goaldiv

An optional Float VDB providing the goal divergence of each voxel. If non-zero, the final velocity field will still have this divergence. This can be used to create expanding or contracting fluids.

collision

An optional Float VDB storing a signed distance field (SDF) of the collision. Any voxels with negative values will be considered inside the collider and reset to the collision velocity.

collisionv

An optional Vector VDB providing the collision velocity at a point. This, plus the ambient velocity, will be what colliding voxels will be set to.

Outputs

v

The velocity VBD without divergence.

See also

Copernicus nodes