Houdini 22.0 Nodes Copernicus nodes

Pyro Project Non-Divergent Electro Static Copernicus node

Removes divergence from a velocity VDB.

On this page
Since 21.0

Note

Although COP Pyro is in COPs, you need DOP level permissions to use it. This means that COP Pyro is not available in Houdini Core, but only in Houdini FX, Houdini Apprentice, Houdini Indie, and Houdini Education.

This node removes divergence from a velocity VDB. It is a core operation in fluid simulation that computes the closest physical velocity field from the input 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.

Divergence is computed using corner-sampled values. As a result, certain velocity field modes are not detected. Hourglass Filtering can be used to remove these modes.

Collisions are applied with Iterated Orthogonal Projection (IOP). This means that before each divergence removal step, voxels inside the collision SDF are set to the collision velocity.

The projection is approximate but converges toward the correct solution. Increasing the number of iterations improves projection quality and collision strength. The remaining tuning parameters typically do not need to be adjusted.

Parameters

Iterations

Controls how many times the projection process is repeated. Higher values increase computation time but produce more accurate results and improve the reliability of collision handling.

Ambient Velocity

Specifies the global implied velocity. The input velocity is assumed not to include this value. When using v, the ambient velocity is implicitly added to obtain the world-space velocity. Collision velocities are specified in world-space, not wind-space, and are adjusted accordingly.

Voxel Kernel Size

Controls the size of the voxel kernel. Larger values improve quality but significantly increase computation time.

Double Voxel Pass

Applies two voxel kernel passes before performing a block pass.

Block Pass

Turn on the block pass. During the block pass, divergence is reduced to dipoles over 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 values improve quality but significantly increase computation time.

Feather Blocks

Reduce the strength of the block correction over the farthest blocks. This helps avoid sharp transitions in the corrected velocity when strong impulses are present, but may require more iterations or computation time to fully remove divergence.

Point Pass

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

Hourglass Filter

Applies a smoothing operation to remove velocity modes that can be missed when projecting using corner-sampled divergence. This can reduce jagged artifacts.

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