Walkthrough
Here are all the steps, consolidated into a few sped-up videos.
The Rig
In this case, the cloth is driven by these FK controls. The same would apply to anything more complex, like hierarchies of controls or layers of spline IK controls. At the end of the day, you get translate/rotate values out of Ragdoll, so any cloth driven by that is a possible usecase here.
Assign Markers
Nothing special here. The body is already assigned to, such that we can use it for collisions. If not, it would create a first Marker on the torso control here, that you can tweak retroactively for better collisions.
Edit Shapes
Turn everything into boxes and offset things.
Distance Constraints
We’ve now got 3 rows of markers, with shapes that are offset. They are connected everywhere except along the edge between the rows. If your controls all have the same shape, I found it easiest to create all distance constraints up-front, and edit them together via the Channel Box.
I made a minor mistake in the Assignment step, and missed one of the controls. Hence the gap here. But it’s fine and shouldn’t affect the results too much.
Tuning
Finding the Spring Type
attribute is probably the most technically involved step. In this case, I used the group created during assignment along with Ragdoll → Select → Group Members to quickly select all relevant markers. Then I used Maya’s Channel Control
to expose the attribute on all Markers.
Summary
This is the best technique that I have discovered so far. If you come up with any alternative, please post here!
The one thing this particular technique would do less well is bend resistance along the horizontal axis. For example, if you increased Pose Stiffness
/Rotate Stiffness
on the group of all cloth markers, they would try and follow the relative angle between your animation controls. But it would ignore the angle between neighbouring controls, which you would expect if the cloth was stiffer.
Luckily, in this case, and perhaps most cases, stiff cloth isn’t as useful.
To experiment with horizontal stiffness, you can try replacing the Distance Constraint for the Attach Constraint. This gives you control over both Translate and Rotate Stiffness and is identical to the stiffness between markers in general.
Future
Vertex-based cloth is on the roadmap. This will remain real-time and will continue to interact with other rigid bodies. I expect that to be a more proper way to do cloth; one where you can retarget each vertex to a given control. It would enable a much higher level of control and easier editing of the topology (because it would be regular polygons).
In this case, since Markers and Distance Constraints have different attributes for stiffness, to edit the overall stiffness one would need to select one of these at a time and edit them individually. In the scene file above, I’ve made that circular control to consolidate the stiffness attributes, as a workaround.
Enjoy and hope it helps!