Houdini 20.0 Nodes Dynamics nodes

Smoke Solver (Sparse) dynamics node

Performs a sparse smoke simulation on the given object. This is a slightly lower-level solver that is the basis for the sparse pyro solver.

On this page
Since 18.0

See Pyro look development for information on using the parameters to achieve different flame and smoke looks.

The Smoke Solver is able to perform the basic steps required for a smoke simulation. Pyro Solver (Sparse) extends the functionality of this solver by adding flame simulation along with extra shaping controls.

Setting Up

The essential building blocks of a smoke simulation are the object, solver, and sourcing. The Smoke Object (Sparse) node creates a dynamic object containing the required fields, which are then evolved by the solver as the simulation proceeds. The simplest smoke simulation needs the following data:

  • density scalar field that contains where and how much smoke is present;

  • temperature scalar field that’s used for buoyancy calculations;

  • vel vector field that captures the instantaneous motion of the smoke.

This solver takes care of ensuring these fields change in a manner consistent with smoke, but sourcing is responsible for injecting these quantities through the course of the simulation. For example, you may want to continuously add to density at the soot source or temperature to cause hot regions to rise. See pyro sourcing for more information.


Tools under the Sparse Pyro FX shelf can be used to create setups involving the pyro solver.


By default, this solver operates in sparse mode; that is, the needed calculations are performed only in the areas of interest, as governed by the active field. This region is built by looking at the Reference Fields parameter under the Resizing subtab of the Advanced tab: positive areas of the specified fields are flagged as active. This intermediate active region is then dilated to provide a buffer for smoke to expand into. With the Reference Fields set to density, for example, the solver will run its operations near areas which have some soot, thereby concentrating the computational effort to the smoke’s visible region.

Inactive areas in sparse mode are treated as vacuum that smoke is free to move into. As such, if there are two puffs of smoke blowing at each other, they will be completely invisible to one another until they come sufficiently close for their disjoint active regions to merge.

When Enable Sparse Solving is disabled under the aforementioned tab, the solver will work in dense mode, performing a full global solve everywhere within the domain. With the previous example involving two puffs of smoke, they will be immediately aware of each other’s presence. However, dense mode can be substantially slower in some cases.


You can enable Active Region visualization under the Guides tab of the smoke object to see the active simulation areas.



A smoke object to work on.


When working in sparse mode, Enable Sparse Solving must be enabled on the smoke object.


Nodes attached to this input will be able to use the smoke’s accurate velocity field. The Gas Advect node can be hooked up, for instance, to advect the points of an attached geometry data along with the smoke.


It is not safe to modify the velocity through this input; use the Sourcing or Forces inputs instead.


This input should be used to modify the simulation fields, by sourcing with a Volume Source, for example. It is important to perform any sourcing that affects the active region in sparse mode through this input.


The active field at this point is not up-to-date; thus, if you want to perform an operation that can be done sparsely, it is best to use the Forces input.


Microsolvers attached to this input will be run before the final pressure projection. At this point, the active field can be used as a stencil for DOPs that support it.


Before the nodes attached to this input are executed, the active field is updated to account for any operations that were performed in the Sourcing input.



Calculate Speed Field

When enabled, the speed field is computed at each time step. This field stores lengths of the velocity vectors and can be used as the control field to attenuate the strength of attached microsolvers and shape operators. For example, you can weaken the effect of turbulence in areas with less motion by using speed as its control field.


Speeds are calculated after advection and before any forces are applied.

Time Scale

A scaling factor for time inside this solver. 1 is normal speed, greater than 1 speeds up the simulation, while less than 1 slows it down.


A blur factor on the velocity field. A value of 0 allows adjacent voxels to move in different directions without resistance, creating a more chaotic, turbulent look. Higher values of this parameter result in a more coherent velocity field, creating a more flowing look.


Velocity of passive wind. This force is treated separately by advection, so the simulation velocity field will not reflect the presence of Wind.



Advection-Reflection attempts to inject energy lost due to pressure projection back into the simulation. Enabling this option may exhibit better vortex retainment in the flow.


No reflection is performed; this is the recommended setting for simulations that involve non-zero goal divergence, such as explosions.


Performs a single pressure projection per timestep and adds the removed velocity components back at the next step. This option is marginally slower than Disabled, but requires an extra vector field to be carried between timesteps.


Performs two pressure projections and velocity advection passes per timestep. This option is a lot slower than Single-Project, but may yield better results and stability.

Reflection Amount

Fraction of the projected velocities to re-inject when Advection-Reflection is not set to Disabled. Values near 1 will do a better job of conserving energy, but may result in instabilities.

The following video shows Single-Project mode.

The following video shows Double-Project mode.


Temperature Diffusion

A blur factor on the temperature field. Higher values diffuse the temperature out further, emulating the spread of heat from hotter to colder areas.

Cooling Rate

How fast the temperature field cools to zero.

Ambient Temp (K)

Temperature corresponding to value of 0 in the temperature field (in Kelvin). This represents the ambient temperature of the environment.

Reference Temp (K)

Temperature corresponding to value of 1 in the temperature field (in Kelvin). The temperature range is used to calculate strength of the buoyancy force.


In general, value of T in the temperature field corresponds to a temperature of Ambient Temp (K) + T * (Reference Temp (K) - Ambient Temp (K)).

Buoyancy Scale

Hot gas expands, causing it to rise due to lowered density. Acceleration due to buoyancy is calculated using values of the ambient and reference temperatures, as well as the Gravity settings. Value of this parameter is used as a multiplier for the buoyancy force.


Gravity Acceleration

Acceleration due to gravity. Stronger gravity results in stronger buoyancy forces.

Gravity Direction

The direction in which gravity pulls. Hotter gas will tend to rise in the opposite direction.


Minimal Solve

Turns off certain parts of the evaluation network to facilitate fast OpenCL solving that avoids data copying between main and video memory.


This is a utility parameter used by the Pyro Solver SOP to implement Minimal OpenCL Solve; however, that feature relies on several moving parts to work correctly. As such, you should not unlock or change value of this parameter on the Smoke Solver (Sparse) or Pyro Solver (Sparse) operators.

Use OpenCL

Use the OpenCL device to accelerate computations.


OpenCL acceleration is currently only supported in dense mode (when Enable Sparse Solving is disabled).

Min Substeps

The solver will take at least this many substeps per frame. If you have unusual forces, you may want to increase this parameter for better stability. Increasing this parameter usually makes the simulation run noticeably slower.

Max Substeps

The solver will take at most this many substeps per frame.

CFL Condition

When Max Substeps is greater than 1, the solver uses this parameter to determine the number of substeps. The condition is that no substep can allow objects to interpenetrate by more than this many voxels. Higher values let the solver take larger substeps, possibly letting smoke pass through colliders.

Quantize to Max Substeps

When enabled, all substeps will divide the frame by Max Substeps. For example, if Max Substeps is set to 4, but the CFL Condition only requires 3 substeps, the solver will take frame steps 0.25, 0.5, and 0.25. This option can be useful for re-using input geometry that has been cached to file at increments of 1/Max Substeps.

Frames Before Solve

Delays the actual simulation this many frames after the object creation. Nodes attached to the Sourcing input will still be executed. This may be needed if some solve nodes can’t be processed before certain initial conditions have been met.

Single V-Cycle for Pressure Projection

When enabled, pressure projection will be done using a much cheaper (but less accurate) method.


Resize in Full Tiles

When enabled, size changes to the fields will be done in increments of 16 voxels. This is marginally more efficient, but the resultant fields will be larger than necessary.


Resizing is always done in full tiles when Enable Sparse Solving is turned on.

Reference Fields

List of fields that determine size of the simulation container. Resizing is done by first computing the bounding box around all voxels of Reference Fields that have a positive value, then expanding this intermediate region by Padding on all sides. This list of fields is also used to build the active region in sparse mode.


Amount of padding to add to the simulation region around the Reference Fields. Padding should be as small as possible, but large enough to ensure that moving smoke does not leave the container within a timestep.


When Enable Sparse Solving is turned on, Padding also controls size of the buffer built into the active region.

Extra Fields

By default, the smoke solver will resize density, temperature, divergence, active, vel, collisionvel, and flame (for pyro only). Additional fields may be resized by specifying them here.


Enable Sparse Solving

Puts the solver in sparse mode, allowing it to perform its computations only in relevant areas.


Enable Sparse Solving must also be enabled on the smoke object for sparse mode to work correctly.

Reset Rule

Rule that determines where the fields specified in Fields to Reset are modified.


Fields are not modified anywhere.

Newly Occupied

Fields are reset in the areas that were previously inactive but are now active.

Newly Deoccupied

Fields are reset in the areas that were previously active but are now inactive.

Newly Occupied or Deoccupied

Fields are reset in the areas that changed their activity status in either direction.

Fields to Reset

List of fields to reset, based on the Reset Rule. In the regions where they are modified, these fields are set to their initial value.

Extrapolate Velocity into New Tiles

When this parameter is enabled, newly-activated areas inherit their velocities from nearby active regions. This can help reduce tile artifacts that may appear on the smoke surface if the Padding is not large enough.

Falloff and Blendwidth parameters determine how new velocities are blended with the background field value (as set by Wind Tunnel Direction on the Smoke Object (Sparse) node). You should set Blendwidth to reflect the interpolation band around the active region: valid boundary velocities will be blended with the background value in a band of this thickness. If the Blendwidth is set too small, then extrapolation will not be effective at removing tile artifacts; however, if this value is set too large, then smoke will be accelerated outwards. If this happens, decreasing the Blendwidth or increasing Falloff (to a value on the order of simulation speeds) can help mitigate the problem.


When Extrapolate Velocity into New Tiles is enabled, valid velocity values are extrapolated into newly-activated nearby tiles. This parameter sets a minimum blending rate towards the background field value (as set by the Wind Tunnel Direction on the Smoke Object (Sparse) node). Increase this parameter if the smoke gets pulled outwards at the desired Blendwidth.


Controls the size of the interpolation band around the active region when Extrapolate Velocity into New Active Tiles is enabled. Newly-activated velocities in a band of this size will interpolate valid values towards the background value (as set by Wind Tunnel Direction). Increasing this parameter can help reduce tile artifacts that can appear when Padding is small.


The actual blendwidth is equal to the product of this parameter and Padding. Thus, if you change Padding by a significant amount, you may need to adjust the value of this parameter as well.

Expand by Velocity

When enabled, the active simulation region will take the motion of the gas into account. This will result in adaptive padding that is larger where the fluid is exiting at a faster rate. If this is disabled, the active region is expanded uniformly in all directions.

Min Padding

The minimum padding around the smoke when Expand by Velocity is turned on.

Max Padding

The maximum padding around the smoke when Expand by Velocity is turned on. You can enable this to limit the amount of internal expansion when using Expand by Velocity.


If Max Padding is less than resizing Padding, then Padding will be internally clamped to Max Padding (when enabled). This is done to avoid having layers of inactive tiles at the boundaries.

Expansion Rate

Controls size of the adaptive padding for the sparse active region, when Expand by Velocity is enabled. The active region will include more tiles (and the smoke will have a bugger buffer to move into) when this parameter is set to a larger value.

Tangential Rate

This parameter impacts the shape of the sparse active region when using Expand by Velocity. Smaller values of this parameter will permit sharper kinks in the active region. This can reduce the number of active simulation tiles, but may also negatively impact the motion of the fluid.

External Forces

Scaled Forces

A list of forces to scale by the value of the density field at each voxel.

Absolute Forces

A list of forces to apply uniformly to all voxels (ignoring their density value).


Field Advection

Advection Scheme

The algorithm used to perform advection. Semi-Lagrangian is the most basic: it simply traces trajectories through the Velocity Field once to update the Field values. Modified MacCormack carries out an extra tracing step to approximate and compensate for the introduced error; as a result, sharp features of the original field can be better preserved. BFECC performs yet another trace to predict the motion of the estimated error, producing the best results at the highest computational cost.

Clamp Values

The error correction steps of Modified MacCormack and BFECC advection may introduce final voxel values that lie outside the range of the original field: this can create negative densities or large velocities, for example. When such values are detected, the final field value depends on the setting of this parameter.


No clamping is performed.


Clamps the value to ensure it lies in the range that would have been seen by Semi-Lagrangian advection.


Falls back to the value predicted by Semi-Lagrangian advection.


Apply a smooth blend between non-clamped and clamped values as the advected field approaches the clamping limit. Particularly with the Revert option, applying a small amount of Blend (0.05-0.1) can reduce grid artifacts in the advected field.

Trace Method

Controls how trajectories are traced through the velocity field. Options in this menu are listed in the order of increasing accuracy and computational cost.


With an appropriate value for the CFL Condition, Forward Euler should be sufficient. Consider using a higher-order Trace Method if you need to use a larger CFL Condition or if you choose to disable that option altogether.

CFL Condition

When enabled, trajectory tracing will be done in steps to ensure that the calculated path reflects variations in the velocity field. The step size is governed by the value of this parameter. Particularly, the number of field voxels traveled in each step is equal to the CFL Condition.

Max Steps

Provides a safety limit on the number of steps that can be taken to trace trajectories.


Step limiting will also always apply to velocity advection, even when Use Field Advection Settings for Velocity is disabled.

Max Batch Size

To minimize the cost of tracing paths through the Velocity Field, the target fields are organized into batches (based on their voxel sampling settings), and each batch is advected simultaneously. Enabling this option allows you to limit the number of fields that can be processed in each batch. This is useful for reducing peak memory usage of the advection step.


The batch settings will also always apply to velocity advection, even when Use Field Advection Settings for Velocity is disabled.

Extra Fields

By default, the solver will advect density, temperature, vel, and flame (for pyro only). Additional fields may be advected by specifying them here.

Velocity Advection

Use Field Advection Settings for Velocity

When enabled, Field Advection settings will also be used to advect the velocity field. Turning this option off allows you to change advection settings for velocity.

The remaining settings in this section are the same as the ones listed under Field Advection.


Build Collision Mask

If this option is enabled, the solver will build the collision and collisionvel fields, allowing automatic interaction between smoke and collision objects.


Controls how far from the collision objects the relevant fields are to be built. This value is measured in voxels. If disabled, the fields will be initialized everywhere.

Use Point Velocity for Collisions

The local velocity of an affector object is a combination of the angular and linear velocity. However, if the object is deforming and points match frame to frame, the local point velocity can be used as well to estimate the deformation effect.

Use Volume Velocity for Collisions

If an affector object doesn’t have a stable point count, but does have a volume representation, the change in the volume representation can be used as an estimate of deformation velocity.


This does not include any velocity tangential to the volume surface: a conveyor belt will appear to be stationary as the volume remains unchanged frame to frame.

Collide with Non-SDF

Normally, the collision relationship uses the signed distance field for each object. However, if the object is a different type you can use other ways of getting its effective signed distance field. If this option is enabled, the object is examined for a surface scalarfield, which is treated as a signed distance field. If a density field is present, it is treated as a fog volume with a 0.5 cutoff. If a Geometry geometry is attached, and it consists of a single volume, that volume will be treated as a fog volume (with cutoff of 0.5). However, if its boundary condition is set to SDF, it will be treated as an SDF.

Correct Collisions

When enabled, the specified fields will be reset inside the colliders.

Fields to Correct

These fields will be reset inside the colliders when Correct Collisions is turned on.

Feedback Scale

The degree to which the colliders are affected by smoke is controlled by the value of this parameter. Higher values will increase the effect of pressure forces on the colliders. A value of 0 will prevent any feedback.

IOP Iterations

Colliders are integrated into the system using a weak coupling approach. The number of projection iterations is controlled by this parameter. Larger values will slow down the simulation, but yield better interaction with collision objects.


IOP stands for Iterated Orthogonal Projections. This method works by first making the velocity field compatible with colliders (while ignoring the prescribed divergence), then matching the desired divergence (without considering collision objects). If these steps are repeated enough times, the resulting velocity field will have the desired divergence and respect the colliders.

Hourglass Filtering

Filter Hourglass Modes

Enables filtering of spurious divergent modes that may survive pressure projection when Velocity Sampling on the smoke object is set to Center.


Strength of hourglass filtering. Value of 0 disables the filtering altogether, while 1 performs full filtering.

Scale by Divergence

Instead of performing the filtering everywhere, it can be selectively applied to voxels where divergence is still detected by turning this option on.

Use Relative Divergence

Similar to Scale by Divergence, this setting applies the filtering with different strength in different places. Instead of pure divergence, however, the quantity used to control filtering strength is the ratio of divergence to speed.

Divergence Scale

Controls how sensitive filter strength is to the remaining divergence (or divergence relative to speed if Use Relative Divergence is enabled). That is, the relevant quantity is multiplied by this amount before it is used to determine filter strength.

Visualize Filter Strength

When using an adaptive filter (Scale by Divergence turned on), the strength field can be visualized by enabling this option.

Plane Orientation

Orientation of the cutting plane for visualization.

Plane Position

Relative position of the cutting plane inside the bounding box.

Visualization Mode

Determines how strength values (which fall between 0 and 1) are converted to colors.

See also

Dynamics nodes