Houdini 20.0 Nodes Geometry nodes

Vellum Solver geometry node

Runs a dynamic Vellum simulation.

On this page
Since 17.0

The Vellum Solver is a wrapper around a DOP network to simplify the running of Vellum solves.

Like most Vellum SOPs, it is a three input SOP. The first input is the surface geometry to solve. The second input should have the same number of points as the first, with point-to-point correspondence either with point numbers or id attributes. The second input also should have special primitives describing the constraint relationships. Constraints are how the connectivity between points are defined and controlled and can be created with a Vellum Constraints SOP. Note that the network tab menu has several macros to refer to common setups, such as Vellum Configure Cloth. The third input provides the collision geometry. The collision geometry should have matching topology frame-to-frame. In addition, some types of packed geometry are recognized.

You can dive into the solver to add DOP nodes to apply special forces. You can also use the Vellum Constraint Property DOP to adjust the constraint properties during the solve using these internal nodes.

If using collisionignore, the third input’s object can be referred to as external and the generated ground plane as groundplane.


Reset Simulation

Clears the entire simulation cache.

Start Frame

What frame on the Houdini playbar that the simulation should begin at.


Time Scale

Scales the effective time of the Vellum solve. This can be used to create bullet-time like effects where the physics of the Vellum solver run at a different rate than the Houdini playbar. A value of 2 will cause cloth to fall twice as fast, and 0.1 will slow it to a tenth the speed.

Global Substeps

Controls global substeps at the simulation level, as opposed to the vellum-specific substeps.

Global substeps are best used when you need to export the substepped geometry or have specific substepping on colliders. They will use more memory per frame, however, all the substeps will be kept rather than just the final values each frame.


Each frame will be broken into this number of substeps. Additional substeps are required for fast moving collisions or sudden forces.

The default substeps can be very aggressive, usually if the Vellum solver is too stretchy, raising substeps to 2 or 5 is a good first start.

Constraint Iterations

Within each substep, this number of passes will be taken by the constraint enforcement operations. Stiff constraints can require more iterations to converge. A good starting point is the diameter of the geometry - the number of edges between the farthest points.

Smoothing Iterations

The default constraint iterations use a Gauss-Seidel approach that is fast to converge. However, if it doesn’t fully converge due to too high stiffness, or impossible configurations, it will leave the error as bad looking triangles. The smoothing iterations use a Jacobi approach which is slower to converge but leaves error spread out in a more attractive fashion. The default of ten passes helps smooth out error, but might need to be increased if the overall Constraint Iterations is very high.


Enable Collisions

Controls if any collision detection is done at all.

Self Collisions

Controls if self collisions are detected.

Ground Plane

Adds a ground plane to the simulation. The ground plane will be visualized with a blue grid.

Ground Position

Location of the center of the ground plane.

Collision Passes

Number of collision detection passes to perform. These are interleaved between the constraint iterations. Since collision is expensive, it is best to minimize this. But frequent interleaving helps avoid tent-poling effects where a small collider is fighting with the no-stretch constraints. In practice we find 10 to be correct for most situations, and substeps often being a better solution to increase quality.

Post Collision Passes

After all constraints are performed, a final round of collision detection is done. Collisions are often the most noticeable failure mode, and it is ideal if the next frame can start with non-intersecting geometry. Thus a final cleanup pass can achieve these requirements. We have found that “number of stacked layers + 2” is a good estimate for this number. This allows the effect of the underlying collider to ripple through the stacked layers fully.

Polish Passes

In any collision pass, any colliding pair may not be fully resolved. This number of additional collider-pair passes will be run until they are resolved. Since these are only performed on active colliders (and no new collision search is done) this is very cheap.

Layer Shock

The layer integer point attribute is used to flag point as belonging to different layers of cloth. Higher numbers refer to higher layers. Layer Shock will make lower layers this many times heavier during collision evaluation, ensuring the higher layers will move out of their way. The rest of the dynamics are unaffected by this, and the difference is fixed regardless of the number of layers between the two. This can be thought of as a way to dial between one-way layering of sims and fully coupled sims.



Uniform gravity force to apply.

Built-in Wind

A uniform wind direction. Since this is a drag force, a wind of zero will act like still air and slow everything down; and a high wind will speed cloth up to that speed.

Built-in Wind Speed

A scale for the wind direction. You can set a normalized direction and then use this to set the actual wind speed, or use this as a way to increase or decrease wind speed without affecting the direction.

Built-in Wind Drag

The amount the particles are dragged by the wind force. This is also scaled by the tangential and normal drag forces specified on the Vellum Constraints SOP to provide unequal drag depending on orientation.

Wind Shadowing


The method to use to compute wind shadow.


No wind shadowing effect is done.


Rays are cast in the relative velocity of the particle to find shadowing geometry, and the wind is changed to match the shadowing geometry’s velocity.

External Shadow

Scale for how much shadow to apply when the external geometry is hit.

Self Shadow

Scale for how much shadow to apply when the geometry itself is hit.

Max Distance

The maximum distance to check for occlusions.

Self Shadow Bias

The distance to offset the ray from the particle. This is used to avoid self intersections if the node is used for self wind shadow.

Shadow Angle

The spread to send shadow rays. A value of 90 will sample the full hemisphere, and a value of 180 will send rays in all directions.

Shadow Samples

Number of samples to send randomly within the cone angle. If the cone angle is zero, only one sample will be taken.

Falloff by Distance

This ramp maps the distance of the particle to the to the output value of the mask.

Blur Wind Shadow

Apply blurring to the wind shadow mask and wind shadow velocity.

Blurring Iterations

The number of times the input geometry is blurred. The higher the number, the more blurring.

Blur Influence Type

Blurring relies on each point being able to see what its neighbors' attributes are. This parameter determines how points see their neighbors.


Neighbors are determined by mesh connectivity. Each point mixes its attribute value with the value of its neighbors to achieve blurring.


Neighbors are determined by proximity. Each point has a maximum number of neighbors given by the Max Neighbors parameter, where each neighbor must be within a certain distance away given by the Proximity Radius parameter.

Blur Proximity Radius

Determines how far points influence each other when Influence Type is set to proximity.

Blur Max Neighbors

Determines the maximum number of neighbors each point is permitted to have. Large numbers of neighbors may reduce performance.

Velocity Damping

A more brute force approach to reducing dynamic velocity. The velocity is scaled directly by this amount, causing sudden movements to be quickly damped.


Static Threshold

A threshold at which to apply full friction. When the ratio of the tangential velocity and the normal impulse is less than this, the tangential velocity will be fully eliminated through friction. This is roughly tan() of the slope angle that will allow sliding under gravity.

Dynamic Scale

If the static threshold fails, this controls what percentage the tangential velocity will be reduced in the dynamic friction case.

Enable External

A scale factor on the amount of friction effect to apply for collisions with external geometry.

Enable Self

A scale factor on the amount of friction effect to apply for collisions with self geometry.

Ground Static Scale

A scale factor for the ground plane’s static friction. Useful to create frictionless grounds.

Ground Dynamic Scale

A scale factor for the ground plane’s dynamic friction. Useful to create frictionless grounds.


Cache Enabled

Controls if the simulation is cached to memory.

Cache Memory (MB)

Maximum size of the memory cache.

Enable Automatic Resimulation

When any parameter inside a DOP simulation is changed, or when any referenced external node is changed, the cache of the simulation is marked as invalid. If this parameter is turned on, the next time the playbar is moved to reach a simulation time of 0, the cache will be cleared and the first simulation timestep will be recalculated. If the cache is invalidated while at a simulation time of 0, the initial state is recalculated immediately. If the current time is beyond time 0, then the most recent timestep will be recooked, and the cache beyond the current time will be cleared. But all prior timesteps will be left untouched other than to be marked invalid. If this parameter is off, the cache is marked as invalid in exactly the same way, but the cache is never cleared automatically. To recook a simulation in this mode, the Recook Simulation button on this parameter dialog or above the viewport must be used.

Simulation Type

Style of the simulation.


Each frame the simulation takes the inputs and runs them forward the given number of frames. The final result becomes that frames result. No frame-to-frame coherency is present.


Each frame is solved from the previous frame, and the inputs are used to setup the first frame only.

Quasistatic Frames

The number of frames to roll forward for the quasi-static simulation.

Clear Dynamics

All dynamic forces and states, such as velocities, are removed from the output. This allows the output of a clean state to start a new simulation from, such as when completing a drape.



Points on the simulation mesh can be marked as Pin to Target to follow the targeted animation. By default, this target is the first input. But in some cases the animation you wish to target may be present in another SOP node, so that can be specified here.

Target Path

The path of a node to refer to when simulation points are set to the target animation. Should have a one-to-one point correspondence with the simulation points, either by point number or id.


When integrating points forward by their velocities, curved motions like swinging pendulums will be mispredicted and be damped by the constraint projections. A second order predictor recovers more of this curved motion and maintains more energy in the system.

In any case, if collisions are detected the system will fall back to first order to avoid excessive bouncing.

Default Thickness

If the incoming simulation or collision geometry has no pscale attribute, it will be set to this value.

For simulation geometry, usually thickness should already be set by the Vellum Constraints SOP. For collision geometry, creating a pscale point attribute manually will override this thickness value.

Secondary Constraint Pass

Enable Secondary Constraint Pass

If this checkbox is turned on, all constraints in the specified Constraint Group will be solved in a separate, interleaved pass to the remaining constraints.

There are two main uses for this option. First, there are some expensive constraint types that do not need to be solved as frequently as the rest of the constraints, so enabling this option and choosing a low Solve Frequency can improve performance. For example, cloth bend constraints on high resolution cloth with low bend stiffness such a silk or cotton. You need to ensure that you're solving distance constraints every pass so the cloth doesn’t stretch. However, bend constraints are expensive and don’t need to be as strong, since silk and cotton have very low bend resistance and wrinkle easily. Solving the bend constraints as a secondary pass will give you strong performance gains. However, this method isn’t practical for stiffer material such as leather.

The second use case is constraints that cause frequent changes in the constraint topology, which causes the solver to re-order the constraint solve, possibly causing jittering in the remaining constraints. An example is organic tissue represented by tetrahedra and attached together with sliding Stitch constraints. As the sliding causes changes in the constraint topology the tetrahedra might jitter slightly as the constraint solve order changes. Moving the Stitch constraints to another pass by setting Constraint Group to @type=ptprim and increasing the Solve Frequency to 1 will retain the same stiffness but eliminate tetrahedral jittering due to changes in the solve order.

Constraint Group

The constraint group(s) that should be solved in the interleaved secondary pass. This parameter accepts standard group syntax, so can contain explicit group names and ad-hoc groups, often specifying one or more constraint types with something like @type==bend. Any constraint not contained in these groups will be solved in the primary pass as usual.

Solve Frequency

The frequency at which to solve the secondary pass. A setting of 1 will solve the secondary pass as often as the primary pass, while a setting of 0.25 will solve once every four passes of the primary pass (one quarter of the time).

Multi-Pass Solve

Enable Multi-Pass

The multi-pass options allow a substep to be repeated until certain conditions are met. The current conditions are designed to fix issues that are caused by disabled points causing geometry to be caught and cause the undisabled points to generate stretching. Since collisions always pre-empt constraints, the result is cloth or hair stretching. Points adjacent to auto-disabled points will be themselves disabled if too much stretching is detected. The solve step will then be repeated in the hopes this frees up the geometry.

Maximum Passes

The maximum number of times to repeat the substep. If no new points need to be disabled, the process will stop immediately.

Disable Stretch Ratio

The amount of stretch at the end of a solve step that will trigger points to be eligible for disabling. This is to detect when failed collisions are pulling the Vellum object apart. By failing additional points the object usually can be released and result in a better result than continuing to stretch.


Max Acceleration

Various acceleration limiting options can be used to prevent the simulation from being over-eager to obey non-realistic forces. These can otherwise result in large energy spikes.

Fallback to First Order Integration on Collision

If Max Acceleration is exceeded for a point, assume it signals a sharp, discontinuous collision where the second order prediction will be wrong and add erroneous motion, often in the form of bouncing. In this case, fallback to first order integration for the affected point.


Grain and Fluid particles are always considered for fallback to first order, not only in the case of collisions. While this control is helpful to calm down simulations and avoid stray particles, it can decrease overall splashiness of grain and fluid motion. Increasing Max Acceleration can restore that splashiness.

Limit Acceleration in Velocity Update

Cap the amount that velocity of a particle is allowed to change as a result of any of the dynamics. This is useful to prevent some instant motion being mis-identified as a massive force, and thus avoid fly-away particles.

Limit Displacement on Collision

During the collision resolution, if the collision correction moves a particle more than the acceleration amount, cap the effect. The hope is to fail more gracefully when a part of a model snags on the cloth and is pulling it in a surprising fashion.

Disable Broken Welds

When a weld breaks, the two new points start off next to each other. If the surfaces do not separate naturally due to whatever triggered the break, they may trigger collision detection and be pushed out, causing an explosive motion when breaking occurs. This option sets the disableself attribute when points are de-welded to avoid these self collisions. Note that this may cause layered cloth to self penetrate, however.

Normalize Stress

Normalize the stress computation over time, so that the computed values are more predictable as the Substeps parameter changes.

Sliding Method

The method used for finding the next closest position on the target geometry when sliding Attach to Geometry or Stitch Points constraints. Closest Point simply chooses the closest point on the target geometry to the projected sliding position. This approach is fast but can improperly jump across concavities in the target geometry. Traverse Polygons starts from the current target primitive and successively walks outwards, finding the closest point on the surrounding primitives. This approach is more expensive but handles concave target geometry better. Traverse Triangles (Optimized) is similar to the previous option in its improved handling of concavities, but can be many times faster as it uses specialized triangle distance functions. However, it can only be used with target geometry consisting of triangles.


Target geometry with quadrilaterals can be triangulated with the Divide SOP.


Enable Auto Sleep

Particles that remain near-stationary for sufficient time will be put to sleep by setting their stopped attribute to 1.

You can use the Pinned visualization to visualize which points are sleeping.

Velocity Threshold

How slowly particles need to be moving before they are eligible for sleeping. The amount of time they remain below this speed is accumulated in the deactivation_time attribute. If they exceed this speed, the deactivation_time is reset to zero.

Sleep Delay

How many seconds particles need to remain at or below the velocity threshold before they are put to sleep. See the POP Awaken DOP for methods to wake the particles back up again.

Grain Collisions

Vellum grains use a separate collision pass to deal with collisions between the grains. These parameters control that behavior. They are similar to those on POP Grains

Search Scale

Potential intersection particles are any within this scaled distance of the average of the two particles pscale attribute. This is an overestimate because usually collisions are not updated during the constraint iterations, so it needs to record not just the currently colliding particles, but those that may start to collide due to the earlier iterations.

This also effects the range of the attraction force in clumping.

Max Neighbors

The maximum number of particles that will be considered when searching for potential collisions over the substep. Capping this is useful to avoid excessive computations, if too many particles are created at one spot. This parameter is ignored if OpenCL Neighbor Search is enabled, in which case all neighbors are considered within the radius determined by Search Scale.

Assume Uniform Radius

The pscale attribute is used to determine the radius of each particle. If all particles have the same radius, faster acceleration structures can be used to find neighbors.

Ignore Neighbors with Same Name or Piece

Ignore any neighbors that have the same non-empty name or non-negative piece point attribute. This option can be enabled to create separate clusters of grains that only interact with other clusters, often in conjunction with a Shape Match constraint to give rigid behavior.

Repulsion Weight

A weighting for how much the particle collision forces are weighted. A value of zero will disable particle collision.

Scale with the repulsionweight point attribute.

Attraction Weight

A weighting for how much the particles will naturally stick together when close. A value of zero will disable particle clumping.

Scale with the attractionweight point attribute.


Vellum fluids use a density constraint to keep fluids incompressible, as well as provide viscosity and surface tension. Any particle with a non-zero phase attribute is treated as fluid.


The viscosity of the fluid. Low values for viscosity help keep the simulation stable, while higher values can simulate liquids like honey. A per-particle viscosity attribute can be used to multiply this value for variable viscosity. Fluid particles will different phase values will be solved independently for viscosity, allowing multi-phase fluid behavior.

Surface Tension

The surface tension of the fluid. Higher values for this setting reduce the curvature of the fluid and cause it to form blobs. A per-particle surfacetension attribute can be used to multiply this value for variable surface tension. Fluid particles will different phase values will be solved independently for surface tension, allowing multi-phase fluid behavior.

Spatial Sort Interval

Vellum fluids and grains perform many calculations involving nearby points. Generally performance is greatly improved by ensuring that points that are near other in 3D space are also near each other in memory. This option enables a spatial sort of the particles at the specified interval of frames.


This sort will change the point numbers of the particles, so it can be useful to add an id attribute before simulation.


OpenCL Graph Coloring

When doing graph coloring, a fast parallel OpenCL algorithm is used. Unfortunately it may require 10× more memory than the rest of the solve on tetrahedral meshes. Thus, systems that might fit in memory for solving will not succeed the color pass. Disabling this forces all graph coloring to be done in a slower sequential manner, preserving RAM for the actual solve.

OpenCL Neighbor Search

Perform any neighbor searches for grains and fluids using OpenCL, which is faster than the CPU but can use a bit more GPU memory.


Show Collision

Show the collision object as a blue wireframe.

Show Guide Geometry

Show additional guide geometry from the solver.



Draw spheres for the pscale of the geometry. If the geometry has already solved it may have set the overlap_self attribute, if so, the actual effective thickness is drawn in cyan. This is useful to detect if the original thickness was too high - if so the extra thickness will be ignored by the simulation and just slow down the collisions.


Draw the thickness by offsetting the geometry in opposite directions rather than by using spheres.

Failed Self Collision

Draw failed self collisions as red spheres. These points will no longer collide with their own geometry, nor will any edge or triangle attached to them.

Failed External Collision

Draw failed external collisions as orange spheres. These points will no longer collide with external geometry, nor will any edge or triangle attached to them.


Draw which points have been semantically fused together with the weld attribute. These can be broken during the solve using the auto break options, or by setting weld to -1.

Radius Scale

Because the thickness may be small, the visualization spheres can sometimes be lost. This scales the visualization spheres allowing them to be readily seen.



Constraints are often added to different groups. This allows you to isolate one particular group to visualize.

Pin to Target

Draw spheres over points pinned to the target animation.

Stitch Points

Draw stitch constraints of points stitched together.

Attach to Geometry

Draw attachment constraints for points attached to external geometry.


The constraint guides are not scaled by the thickness of the object, so this provides an absolute scale for their size.


False Color Mode

Visualize properties of the constraints using a blue-to-red infrared coloring.


Leave the original colors.

Stretch Stress

Color according to the maximum stretching force applied by the constraints.

Bend Stress

Color according to the maximum bending force applied by the constraints.

Stretch Distance

Color according to how far constraints are stretched.

Stretch Ratio

Color according the ratio between original and current stretch.

Bend Angle

Color according to how many degrees the bend angle has deviated.

Stretch Plastic Flow

Color according to how much the stretch plastic flow has been triggered.

Bend Plastic Flow

Color according to how much the bend plastic flow has been triggered.

Volume Stress

Color according to the maximum volumetric force applied by the constraints.

Volume Distance

Color according to how far volumetric constraints have expanded from their rest state.

Volume Ratio

Color according the ratio between volumetric expansion and the rest state.

Display Visualization Geometry

Toggles if the simulation geometry is false-colored in addition to the constraints.

Max Stretch Stress

Scales the maximum stretch stress to be the maximum coloration.

Max Bend Stress

Scales the maximum bend stress to be the maximum coloration.

Max Stretch Distance

Sets the maximum stretch distance to be the maximum coloration.

Max Stretch Ratio

Sets the maximum stretch ratio to be the maximum coloration.

Max Bend Angle

Sets the maximum bend angle to be the maximum coloration.

Max Stretch Plastic Flow

Sets the maximum stretch plastic flow to be the maximum coloration.

Max Bend Plastic Flow

Sets the maximum bend plastic flow to be the maximum coloration.

Max Volume Stress

Scales the maximum volume stress to be the maximum coloration.

Max Volume Distance

Scales the maximum volume distance to be the maximum coloration.

Max Volume Ratio

Scales the maximum volume ratio to be the maximum coloration.


AnimatedConstraints Example for Vellum Solver geometry node

This example demonstrates animating Vellum constraint properties during simulation.

AnimatedPressure Example for Vellum Solver geometry node

This example demonstrates using the pressurescale attribute to create an animated inflation effect with the VellumSolver’s pressure constraint.

ArmLayer Example for Vellum Solver geometry node

This example demonstrates using the layer point attribute to improve collisions when simulating multiple layers of Vellum cloth.

ArmTarget Example for Vellum Solver geometry node

This example demonstrates using Pin to Target constraints to attract Vellum cloth to capture / deformed geometry.

CollisionDisable Example for Vellum Solver geometry node

This examples demonstrates using the disableexternal attribute to disable Vellum collisions on a point-by-point basis.

CollisionIgnore Example for Vellum Solver geometry node

This examples shows to use point attributes to directly control collisions with collisionignore and collisiongroup.

DynamicAttach Example for Vellum Solver geometry node

This example shows how to create Attach to Geometry constraints during a Vellum simulation based on proximity to a collision object.

DynamicStitchGlue Example for Vellum Solver geometry node

This example demonstrates dynamically stitching or gluing Vellum geometry together during a simulation.

GluedGrains Example for Vellum Solver geometry node

This example demonstrates gluing Vellum Grains together for sticky particle effects.

HairOrient Example for Vellum Solver geometry node

This example shows the most efficient and stable way to update the orientation for hair guides going into the Vellum Solver when used outside the standard Grooming tools.

ResolutionTarget Example for Vellum Solver geometry node

This examples shows how to target a hi-res Vellum cloth simulation to a previous low-res simulation to maintain overall motion while still getting fine wrinkles.

SimpleWeld Example for Vellum Solver geometry node

This example demonstrates simple breaking welds for tearing cloth using the Vellum solver.

StiffnessDropoff Example for Vellum Solver geometry node

This example demonstrates creating softly releasing Pin constraints using the Stiffness Dropoff parameter.

TetrahedralFiber Example for Vellum Solver geometry node

This example demonstrates the Tetrahedral Fiber constraint for simulating contracting softbodies.

VaryingFriction Example for Vellum Solver geometry node

This examples shows to use point attributes to get varying friction in Vellum cloth simulations.

VellumFluidPhasesReference Example for Vellum Solver geometry node

This example contains is a complete setup for creating interacting Vellum fluids with different Viscosity and Surface Tension settings through the Phase parameter.

VellumFluidPhasesStart Example for Vellum Solver geometry node

This example contains the necessary objects to create interacting Vellum fluids with different Viscosity and Surface Tension settings through the Phase parameter.

VellumFluidSetupGeo Example for Vellum Solver geometry node

The objects in this file are required to follow the workflows in Vellum fluid setups.

See also

Geometry nodes