Initial shape/size of the marker?

When you initially hit Assign or Assign and Connect - How does Ragdoll decide the initial shape and size of the marker it creates?

Welcome to the forums @Shae, and thanks for posting this question here. :partying_face:

The initial shape is based on what is being assigned, let’s start with the simple case.

Assigning to a mesh

In this case, Ragdoll has access to the translate and rotate channels of a transform node, along with the vertices of the mesh itself. So it’ll go ahead and assign a Marker with a default shape type of Mesh. It’ll also set the Extents and Radius and Length based on the bounding box of that transform node, in case you change your mind.

Assigning to a joint

The next best thing, these also have access to translation and rotation, in addition to a Radius attribute. Ragdoll defaults to a Capsule shape type with this radius as its own radius.

image

The funny thing here is that Maya’s “Radius” attribute is actually “Diameter”. So your Ragdoll shapes end up twice as large as you’d expect. This is a rendering issue of Maya, that renders them at the wrong size. We will adapt in the next version of Ragdoll, and also treat this as a diameter.

Assigning to a NURBS control

Like a mesh, NURBS controls also have points (CVs) so Ragdoll can use this in the same way as a mesh.

Assigning to an empty group

Not much to go on, aside from translate and rotate values, so it’ll default to a Sphere with a radius of 1.0. One Maya unit may not always be what you expect, e.g. if you expected 1 meter you would end up with a very small sphere. But Ragdoll doesn’t know what else to do here, there is no more information to go by!

Next, let’s have a look at the interesting and more common cases, assigning to hierarchies of objects.

Assigning to a hierarchy of joints

Now we’ve got access to both Radius and length. Since the distance between the parent and child is what you’d expect your Ragdoll capsule to use for its length.

The only uncertainty, which comes up often, is what to do with the last child.

Since the last child has no child of its own, how does Ragdoll know its length? In this special case, it’ll choose the length of its parent. The orientation may also not be what you’d expect, it would choose whatever its local axis is. In this case, aligned with the world.

The special remedy for this, is to always have 1 extra joint (tip joint) to anything you assign. Ragdoll will look at the child of the last actual joint, the tip, to determine both direction and length.

Assigning to a hierarchy of NURBS controls

The exact same thing happens here; we again have access to a length based on the distance between nodes selected. Except we don’t have a radius, so instead we look at the bounding box of the geometry to figure one out. This isn’t always accurate and typically requires some massaging after the fact.

And again, notice how the last control was given the wrong length. It’s the length of its parent, which for a hand is almost always wrong. But, Ragdoll has no more information to go by!

Summary

And that’s about it! There are a few more edge cases when it comes to objects with multiple children and the system is far from perfect. But it’s given users a good starting point thus far, and if you find any more edgecases where the defaults look off, just let us know here and we’ll adjust this algorithm to take those into account as well.

For the tech-savvy users out there, you can have a look at the algorithm for yourself, it’s written in Python.

commands.py:_infer_geometry

Thanks for the welcome Marcus and I really appreciate the detailed response!

I’m working on some overlap on some ears of an animal. The head was getting an unusual beginning shape, while the ears were a great starting point. It got me curious and now I understand better what was going on thanks to your response.

I’ll go with a replace mesh for the head and just tweak the ears with the manipulator.

Thanks again!