Houdini 18.5 Vellum

Vellum attributes

On this page

Setup attributes

Type

Name

Description

vector

materialuv

(Point) Set by the Planar Patch or Planar Patch from Curve SOPs. Used to determine warp/woof directions for anistropy.

float

bendname, stretchname

Scale by Attribute in Vellum Constraints defaults to these sorts to adjust the scale. Should be 0..1, note exponential map.

Sim attributes: geometry

Note

Geometry is also considered particles, so all of POP Attributes apply.

Dynamics: parameters

Type

Name

Description

float

dragnormal, dragtangent

(Point) How much to scale wind effects when the face of the cloth is heading straight into the wind versus sliding parallel to it. For hair, normal is cross-wise to the hair and tangent is along the hair direction.

Note

This controls the innate behavior of the cloth property, the strength of the wind is controlled with airresist.

float

inertia

(Point) The resistance of a particle to rotational hair constraints. If this is zero, the particle will not rotate.

integer

weld, branchweld, collisionweld

(Point) Default -1.

A value of 1 or a reference to itself means not welded, but something might be welded to this point. The value is a point number, unless there is an @id attribute. Then it is a point id.

@weld is the user accessible option. @branchweld is built by the hair constraints when it is forced to split points for hair simulation. @collisionweld is generated on demand to provide a single weld to the detangle algorithm.

float

friction, dynamicfriction

(Point, Detail) How much to scale the static friction (friction) and dynamic friction scale (dynamicfriction) settings by.

Note

These are combined by multiplication. So if two objects have a friction of 0.5, the applied friction will be 0.25.

float

pressurescale

(Point) How much to scale the effect of a Pressure constraint on a per-point basis, from 0 to 1.

Note

This attribute can be used for interesting inflation effects, but should be used with care as it can also lead to unbalanced forces if the pressurescale is near zero on only one side of an un-pinned balloon, for example.

Dynamics: state

Type

Name

Description

vector

P, pprevious, plast, v, vprevious, vlast

(Point) For 2nd order we need the previous frames position and velocity (pprevious, vprevious), and the frame before that, two frames ago (plast, vlast).

point, vector

orient, orientprevious, orientlast, w, wprevious, wlast

(Point) Hair requires point orientations and the corresponding angular velocity (w). Same previous/last.

integer

stopped

(Point) This is a standard POP attribute, but it is used and respected by Vellum. Auto-sleep and awaken will manipulate the stopped attribute. Pins that are to be released can be controlled using stopped rather than setting the mass to zero.

Stopped controls both orientation and position updates via bits 0 and 1.

  • 0 - Particle is free.

  • 1 - Particle can rotate, but is fixed in space.

  • 2 - Particle can’t rotate, but is free to move in space.

  • 3 - Particle can’t rotate or move.

Collision

Type

Name

Description

float

pscale

(Point) Radius at each point. Triangles are fattened at their corners by spheres of the corner pscales, tapered tubes on edges, and sloped planes in center.

integer

layer

(Point) Controls soft priority of collisions. Only greater/less matters, not magnitude of difference.

integer

disableself, disableexternal

(Point) A value of 0 means this point will use self collisions or external collisions.

0

This point will use self collisions or external collisions. (Note the double negative: setting disableself to 0 (off) means that point collisions are enabled.)

1 (or any other value)

Collisions are disabled for this point.

If any points in an edge or triangle are disabled (not 0), the whole edge/tri is fully disabled.

Auto-enable/disable does bitwise tricks with this value:

  • When Houdini auto-disables points:

    • If disableself was 0 Houdini will change it to 2 (disables collisions).

    • If it was 1 Houdini will change it to 3 (still disabled).

    • If it was 2, it will not be changed.

    (Technically, Houdini bitwise ORs the value with 2).

  • When Houdini auto-enables points:

    • If disableself was 0 or 1 it doesn’t change.

    • If it was 2 Houdini changes it to 0 (enables collisions).

    • If it was 3 Houdini changes it to 1 (still enabled).

    (Technically, Houdini turns the second bit off.)

This trick means that to disable a point independent of auto-detection, you should set the value to 1. However, if you want to re-enable something but aren’t sure if it is still tangled, you can set to 2 rather than 0 to delay enabling collisions until it is detected clean.

float

overlap_self, overlap_external

(Point) The default value is 10000.

Stores how much of the original pscale is overlapped. So 0 means that the pscale is fully used. This avoids first-frame explosion by effectively reducing the effective pscale by overlap_foo for collisions, so points don’t start overlapping. Visualizing thickness will draw cyan rather than green for points modified this way. As points separate, this will decrease to grab any exposed room. Thus a pscale that is too high will become unsteady as points grow and then fight distance constraints.

string

collisionignore

(Point) The default value is "".

Stores a pattern for the objects and collision groups to not collide with. This means the default empty string will enable all collisions. To disable all collisions, use the string *. This supports the common Houdini matching rules, so * ^foo will collide only against the object named foo.

The currently solving Vellum object always uses the object name self. The Vellum Solver SOP has the default object names of groundplane for any ground plane added, and external for any collisions in the third input. If packed primitives are in the third input, and they have a primitive attribute objname, that is used for those primitives implied object name.

Note that this will match against both the object name and the collision group. The latter is specified with the string collisiongroup point attribute. To match a specific object/collision group pair, use a slash. For example, external/bar will match only the collision group bar of the external object.

string

collisiongroup

(Point) The default value is "".

Gives the collision group that this point belongs to. If this matches a collision ignore label, it will not engage in collision detection.

The default empty string will only match against the * pattern.

Targeting

Type

Name

Description

string, integer

target_path, target_pt, pintoanimation, gluetoanimation

(Point) The target path and point number for any pins when the Target parameter is set in Vellum Source. If pintoanimation is 1, the pinned points' position will be updated to match the specified target point on the target path geometry. If gluetoanimation is 1, both the position and orientation will be updated.

float

targetweight

(Point) Affect the strength of the pinned points using a 0..1 weighting value.

Breaking

Type

Name

Description

float, string

breakthreshold, breaktype

(Point) The threshold for breaking welds and branch welds, measured against the breaktype, which can be one of the following: stretchstress, bendstress, stretchdistance, stretchratio, or bendangle. If breakthreshold is less than zero, no breaking will occur.

Pressure

Type

Name

Description

vector, integer

pressuregradient, volumepts, volume

(Point) When a point is part of a Pressure constraint, these attributes hold values computed during constraint evaluation. The pressuregradient is a vector pointing outwards along the direction of greatest volume gain, usually very close to a point normal. The volumepts array contains the points needed to compute the volume attribute for each point, which are added together to compare against the Pressure constraint’s restlength.

Internal worker variables

Removing/adding attributes every frame is expensive, so we have a few internal things that leak out.

Type

Name

Description

float

dP, dPw

(Point) Constraint displacements/weights. Likely of last iteration, so out of date.

string

patchname

(Point) Identifies each generated patch in a simulation so it can be updated/replaced.

Sim attributes: constraints

There are many types of constraints, so the meaning of these variables is often dependent on the constraint type. They usually live on the primitive.

Dynamics: parameters

Type

Name

Description

float

dampingratio

(Prim) 0..1 damping ratio.

Note

Higher than 0.1 likely stops the constraint from converging. Helps suck energy from system.

float

restlength, restlengthorig

(Prim) The initial "distance" of the constraint. The units are variable. Distance constraints use distance, bend constraints use angle in degrees, volume and pressure constraints use volume.

The actual dynamics use only restlength. restlengthorig is for convenience so you can animate scaling effects without extra math.

point

restvector

(Prim) Orientation constraints need a rest orientation, so store a quaternion here. This vector is also used to store target positions for pin constraints.

float

stiffness

(Prim) 0..1e10. How strongly to enforce the constraint. High values may not be achieved with a given iteration count, but low values should stop getting stronger at a certain iteration level.

float

compressionstiffness

(Prim) 0..1e10. How strongly to enforce the constraint when it is being compressed. High values may not be achieved with a given iteration count, but low values should stop getting stronger at a certain iteration level.

float

stiffnessdropoff stiffnessscaled stiffnessdropoffmin

(Prim) The distance from the rest state at which the stiffness of the constraint drops off to zero, or increases from zero to full stiffness, depending on the direction of the dropoff. A negative values indicates a decreasing dropoff, where the stiffness starts at full strength and decreases to zero at the Dropoff distance from the rest state. A positive value indicates an increasing dropoff, where the stiffness starts at zero and increases to full stiffness at the specified distance from rest. For stretch constraints this value is in length units; for bend constraints it is stored in degrees. The effective stiffness value used in constraint solving will be stored in stiffnessscaled when stiffnessdropoff is in effect. If the stiffnessdropoffmin attribute exists and is greater than zero, its value will be used as the minimum stiffness when calculating the final stiffness value due to dropoff.

string

type

(Prim) Type of the constraint.

distance, stitch, branchstitch

Constraints the points to be restlength apart. distance is used for intrinsic distance constraints, like the edges of triangles or hairs. stitch is an alias for distance. It acts the same, but semantically is used for non-topological elastics added to the sim. branchstitch is used for the automatic branch welding.

ptprim

Constraint between a point and a location on a primitive, usually created with the _Use Closest Location on Primitive option on the Vellum Constraints SOP. In that case restvector stores the UV coordinates of the location on the primitive. The primitive can be a line segment, triangle, or quadrilateral, meaning the constraint can contain 3, 4, or 5 points, respectively.

bend

A four-point constraint. The points represent the 4 points of two triangles that share an edge. The constraint is applied to maintain an angle along the shared edge.

trianglebend

A three-point constraint. The constraint maintains the distance between the middle point and the centroid of the triangle. This maintains the bend of lines.

angle

A three-point constraint. Maintains the dihedral angle measured at the middle points. This is used by the String constraint types.

tetvolume

A four-point constraint. Maintains the volume of the tetrahedron described by the four points.

pressure

A many-point constraint. All the points represent a surface of a mesh. Volume is computed on the mesh and stored on the points, and then all the points are inflated or deflated to maintain that volume.

attach, pin

Pins a point to a certain world space location. attach implies updating the target location from the target attributes per-substep. pin by contrast is updated according to the matchanimation attribute.

attachnormal

An additional constraint created for Attach to Geometry constraints when __Tangent Stiffness_ is enabled. This constraint keeps the constrained point aligned with the target object normal, as specified in the restdir attribute.

pinorient

Pins the orientation of the point to match the rest orientation.

bendtwist

Two point constraint. Constrains the orientation of points on an edge to be consistent, thereby creating torsion effects along hairs.

stretchshear

Two point constraint. Combination of both a distance constraint and a bend constraint for edges. This is used by hair.

tetfiber

A tetrahedral constraint that allows compressing the tetrahedron along the local space direction specified in its points' materialW attribute.

triarap

An As-Rigid-As-Possible stretch constraint on triangles that minimizes deviation from the triangle’s rest shape, stored in restvector.

tetarap*

An As-Rigid-As-Possible stretch constraint on tetrahedra that minimizes deviation from the tetrahedron’s rest shape, stored in restmatrix. There are variations of this constraint type for linear vs. non-linear and whether it is volume-preserving.

Dynamics: state

float

stress

The amount of stress applied by the constraint.

Sliding

float, string, string, string

slidingrate, target_group, slidingattrib, attribpromote

(Prim) The rate at which the target location should slide along the primitives specified by target_path within target_group. If there is a point attribute set to scale the rate, then its name is stored in slidingattrib. The method for promoting attribute values to scale the rate is stored in attribpromote.

Breaking

float, string

breakthreshold, breaktype

(Prim) The threshold for breaking the constraint, measured against the breaktype, which can be one of the following: stretchstress, bendstress, stretchdistance, stretchratio, bendangle. If breakthreshold is less than zero, no breaking will occur.

Plasticity

float

plasticthreshold, plasticrate, plastichardening, plasticflow

The threshold for applying plasticity to the constraint, which modifies the constraint’s restlength to match the current state, at a rate specified by plasticrate. If plastichardening is > 1, the constraint’s stiffness will be scaled higher at the same rate; if < 1 it will be scaled lower. The amount of plastic flow that occurs for a constraint is stored in plasticflow. Setting plasticrate to zero is the easiest way to disable plasticity for a constraint. If the plasticthreshold is negative for a stretch constraint, it is treated as a ratio of the current restlength. For example, -0.1 means plasticity occurs when the current length has deformed over 10% from the restlength.

Targeting

integer

matchanimation

(Prim) If set to 1 for pin constraints, the solver will lookup the constrained point’s target_path and target_pt, and update the constraint restvector to the specified point position, so that the pin constraint follows the target animation.

Internal worker variables

vector

L

(Prim) The amount of work done by a constraint, possibly along different stiffness or compression stiffness axes. Generally you should use the stress attribute instead to determine how much work a constraint is doing.

integer

pts

(Prim) Array of points affected by this constraint.

Vellum

Cloth

Softbody

Constraints

Collisions

Advanced