Verlet Transform Tree

A simulation structure for animating hierarchical transforms using Verlet integration. Typically used for tails, ropes, chains, or foliage where child transforms follow dynamic, physics-based motion.

The VerletTransformTree defines and simulates a single transform hierarchy using Verlet physics. It handles node registration, per-frame simulation updates, and optional collision resolution based on settings curves. Each node retains a reference to its transform and original pose for positional and rotational constraints.


Public Fields

Root

public Transform root;

The root transform of the simulated hierarchy. All children (excluding those in ignoreList) will be registered as nodes.


Settings

public VerletTransformTreeSettings settings;

Reference to a VerletTransformTreeSettings asset that defines spring, damping, angle limits, drag, and collision curves based on depth in the hierarchy.


Ignore List

public List<Transform> ignoreList = new List<Transform>();

Any transforms to exclude from simulation. Useful for skipping specific branches of the hierarchy or static bone references.


Nodes

The list of simulated nodes in the hierarchy. Each node stores initial transform data and current simulation state.


Show Debug

If enabled, node data and wire representations (capsules, links) will be drawn in the Scene view.


Public Methods

Register Nodes

Scans the transform hierarchy starting from root and populates the nodes list. Excludes any transforms in ignoreList.


Add Force

Applies a global directional force to all nodes in the hierarchy.


Add Force at Position

Applies a radial force from a given world position, diminishing by distance. Useful for explosions or impacts.


Clear Forces

Clears accumulated external forces from all nodes.


Reinitialise

Resets all nodes to their original transform state and clears accumulated simulation data. Typically used after editing hierarchy structure in-editor.


Example Usage

Basic Setup

Attach a VerletTransformTree component to a GameObject and assign the root transform (e.g. a bone or empty parent).

Assign a VerletTransformTreeSettings asset to configure spring behaviour.

Optionally use the context menu "Register Nodes" to initialise the node hierarchy.


Runtime Force Application

This applies a one-time directional force to all nodes in the tree.

Last updated