Ribbons vs Motion Paths For Bendy and Twisting Limbs

Hi! I’m new here but have been lurking for years. That said, feel free to nudge me if there’s anything wrong with this post or if you need anything clarified.


I noticed that Advanced Skeleton’s bendy limbs are built with aim constrained joints on a motion path. Its the first alternative I’ve seen to the ribbon setup (using n-hair) which looks to be quite popular.

The main consequence I can observe is that Advanced Skeleton has a separate twist setup for the limbs. If I’m understanding correctly, most ribbon-based limb systems are equipped to handle bending and twisting at the same time.

Are there advantages/disadvantages to each of these approaches? Can we reasonably extrapolate why Advanced Skeleton opted for motion paths?


P.S.
This website is a goldmine. You guys are awesome!

Using only transforms and constraints (ie matrices), you’re limited to ± 180 degrees of twist between 2 controls, since there’s no way to represent greater rotations. Separating the twist from the shape lets you get as much as you want.
However in this case, I would sooner use the new uvPin node instead of the old nHair follicle method, it’s way more efficient. Then you can separately control the twist axis of your pinned joints with a ramp attribute.

1 Like

The basic things are:

  • Curves / Motion Paths - don’t have any real “up” direction for twist along the length, but they do work with maya’s built-in IK spline handles (for which you can configure the advanced twist setting, but still limited to ±180 degrees with this). It’s also pretty hard to support stretching on the ik spline handles while keeping the end joint position stable.
  • Surfaces - have very reliable surface normals for extreme twisting, and can much more easily support stable stretching with no additional steps if you’re already using follicles / uv pins to get the surface points. There are no built-in solutions / ik handles for working with surfaces though.

Occasionally there is something that I want to stretch the rig for, but not stretch the joints, and that’s easier with the curve + ikSplineHandle method.

The rest of the time I opt for the surface-based method due to its stability, though I end up using aim constraints for all joints in the end (getting the up-vector from follicles) since I primarily do work for games and I want all the joints to point to the next in the chain, rather than along the surface normal, which could be different.

Bonus Tip: When you set up your clusters / skin for your curve or surface to be manipulated by controls, don’t forget to manually tweak the skinning of the curve itself like you would for any other weights. It can dramatically change the way your final rig feels.

1 Like