ituphi
2 supporters
Vellum Theory

Vellum Theory

Apr 23, 2021

Vellum general -  Its a continuations PBD ( point based dynamics ) technology now XPBD, applies constraints on a per point bases. There are 3 types major types of constraints, these form more complex constraints and other presets.

  1. Distance based  like Cloth

  2. Rotational based like Distance along edge

  3. Volume based  like Pressure

Vellum basically works by relaxing each point constraint by constraint - thats why iterations are so important for quality.  
Sub steps : are a multiplier for iterations. So lower the constraint iteration when increasing sub steps is a good rule of thumb.

Vellum can work on two levels :
1 - Inside a DOP net - Dynamic Network
2 - In the SOP context with the Vellum Solver - SOP level Solver

vellum object is the definition of constraints for the Vellum Solver.

The vellum constrain  - Presets of vellum are macros for different basic setups.

  • Balloon - preset set up "cloth + pressure” - Softer Preset

  • Soft body - preset “ cloth + struts” - More rigid

  • Cloth - Cloth constraint.

  • Edge Distance - Each edge in the display geometry is turned into a distance constraint maintaining that edge length.

  • Pressure -simulated pressured body- by gas or fluid

  • Hair- Works on curves, splines and strings

  • String - Lighter weight hair constraint. They are a distance along the edge and the angle between edges. But no twist constraint is present, so the edges can spin freely.

  • Pin to target- The specified points will be pinned to the corresponding point in the target geometry. The target geometry for a Vellum solver is usually the first input, so matches the animation, but can be overridden.

  • Attach to geometry - Attaches points of the geometry to other objects, can be set to calculate the distance, can use a point selection

    • Stiffness can be set to ( 1e10 ) == infinite stiffness

    • Compression stiffness - how much its the object allowed to compress

  • Stitch points- Stich back up different patches that have been fractured by edge fracture - uses a threshold to initialize tearing of the cloth

  • Glue- Each point will search for a nearby point that is not a member of its own piece. It will construct a distance constraint holding it to that point. This is useful for building systems that automatically glue together by proximity, especially when combined with breaking.

  • Tetrahedral volume-Each tetrahedron is turned into a constraint to maintain the volume of the tetrahedra. Note this does not include any shear or stretch constraints - additional distance constraints need to be added to make a proper softbody.

  • Struts - Creates inside structure that hold together the interior of the shape. Each point will search for a distant point that is of its own piece, but which it has a straight line-of-sight to. It will build a distance constraint to that point. This constructs a large number of toothpick like internal struts that give an object stiffness and volume without the expense of a fully FEM solve.

The vellum solver - can be used in SOP or DOP, level here we set parameters for the simulation like Sub steps Iterations on a per point bases and so on.

The vellum grain - Vellum as an extension of PBD can be turned into grains. POP forces can be used to manipulate the object. The vellum grain shelf tool automates the creation of a basic grain object. When the vellum grain its created automatically the “ Vellum Solver” sub-steps are increased to 5 because grains need more accuracy to begin with

Workflow 1 - SOP

Geometry can be fed into a “vellum constraint” - in SOP level at first input context. "Collision Geometry" can be fed into the second port of the constraint

  • The Vellum constrain Connects down to the Vellum Solver - passes info with Constrain and Geo.

  • The Vellum Solver outputs CONSTRAINS and GEOMETRY - this can be set to a null (OUT_GEO) to import into a DOP net

  • Or can be fed into the first two inputs of the DOP net node, the node by default will read on input 1 - GEO , input 2- CONSTRAINTS

Workflow 2 - DOP

At geometry level any object can be made “Vellum” by using a preset
This brings vellum into the DOP net as imported data
It uses OUT and CONS nulls to send info into the DOP net and read by a Vellum Source
The benefits of this its for example - “ Vellum Source “ can be set to continuous activation to work as a “Particle Emitter”

A simple expression can be set to activate every 10 frames using HSCRIPT and Modulo like this. Activation = FF%10==1

Rotation random  = 360rand($FF) == one rotation degree every frame 10 for speed


The Vellum object - its use to point to the SOP paths for general set upThe vellum source - will source the Constrains Info to be used in DOP net.

  • Vellum source should point to the correct SOP path, and GEO-SOP path of the “Vellum Object” must be switched off
    Simple Cloth -  This preset is a unified cloth simulator simplified to create fast cloths, Its geometry based approach makes it very fast, no simulations are crated by this method, has forces built in like wind and turbulence .
    Cloth tearing - geometry must be fractured first with a “Edge Fracture” node, create individual pieces, this GEO goes into a “ Cloth Configuration”Apply a constrain to “Vellum stitch points” stick the pieces back on - Turn on “breaking" to allow the setting of a threshold to tear or not.
    Pipeline - Vellum IO

"Vellum Post process" - This node allow for post simulation refinement like

  • SDS - Sub division post sim

  • Collision correction -

  • Extrude Thickness- Created a thick layer of cloth in post process
    “Surface collider” -  its a light weight static collision object, it has no VDB implementation for speed optimization/ its less accurate than other collision detection object like the “Ground Plain”
    A “Point wrangle” can operate on point before the vellum OUT null Where $FF = float frame  @Time = Current time in seconds Ex code //v@v ={0,0,2,};vector multiplier = {10,10,10};vector2 u = rand(@Time 111 + 43);//creates a random vector2v@v = sample_hemisphere({0,0,1}, 5, u)multiplier;//sample a hemisphere and create a vector with a bias a 5 inside that hemisphere

Enjoy this post?

Buy ituphi a beer

More from ituphi