Skip to content

Active Chain

Link multiple rigid bodies together to form a "chain".


Usage

From the Ragdoll menu, select the Active Chain option.

chainusage


Attributes

Some of the most relevant attributes of the rdRigid node type.

Attribute Description
Simulated Toggle between animation and simulation
Global Strength Affect all Guide Strength of this chain at once


Simulated

Animate without physics, and then turn physics back on.

chainwalkcycle


Global Strength

Affect all guide strengths in a chain or tree.

globalstrength

More Control

Each connection between two rigids have its own Guide Strength you can use to tweak values at an individual control level.


Tree

  • 2 chains make a branch
  • 3+ chains make a tree

That's how ragdolls are made!

chain

Root

Every chain has a "root", namely the first selected object. This is where the Simulated and Global Strength attributes are put and may also start its life as a Passive Rigid; configurable in the Active Chain Options.

image


Controls

Anything with a Translate and Rotate channel can be made into chain.

  • Joints
  • NURBS Controls
  • Polygon Meshes
  • Empty Groups
  • ...


Overlapping Shapes

Ragdoll tries generating shapes that best represent the underlying joints, but sometimes the result can have overlapping shapes.

There are 3 typical solutions for this.

Solution Description
Avoid overlap Ideally the shapes would not overlap, but this is not always possible
Collide = Off Disable collisions for the offending rigid(s)
Ignore Contact Constraint Disable collisions between the two overlapping rigids

overlappingshapes


API

Here's how to use the Active Chain from the Ragdoll API.

chainexample

from maya import cmds
from ragdoll import api as rd

ctrl1 = cmds.createNode("joint")
ctrl2 = cmds.createNode("joint", parent=ctrl1)
ctrl3 = cmds.createNode("joint", parent=ctrl2)

cmds.move(0, 5, 0, ctrl1)
cmds.move(5, 5, 0, ctrl2)
cmds.move(10, 5, 0, ctrl3)
cmds.rotate(0, 0, 30, ctrl1)

scene = rd.createScene()
chain = rd.createChain([ctrl1, ctrl2, ctrl3], scene)

cmds.setAttr(ctrl1 + ".globalStrength", 0.02)

cmds.evalDeferred(cmds.play)

Last update: 2021-08-08