Stretchy Limbs causing awkward scaling issues in Unity

Our rigs are set up with stretchy limbs and spines (scaling the shoulder and elbow joints along the X axis to make them longer), and it Maya, that’s all that happens.

In Unity, everything in the heiarchy below the first scaled joint is also stretched. The wrist and fingers are scaled up by changing the shoulder length, and then stretched again by the changing of the elbow length.

Is this the only way Unity can handle joint scaling? Is there anything we can do make joints scale individually?

Not used Unity, but scaling works differently by default in each application.
The default way scale works universally though, is that it is inherited.
In Maya this is disabled on child bones to isolate the scaling to be on the bones you want to scale.
Unless there is a method to do the same in Unity then you will get scaling on all child bones as this is how transforms work by default ( they are relative to their parents ).

If you are able to modify the source code in your build then this might help:
or this:

In general - scaling is avoided in game engines as it is relatively expensive and can cause all sorts of complications. It is often worked around by using positional offsets to mimic the scale behavior without the need to actually scale.

1 Like

Good to know. I’ll ask our programmers to see how feasible these solutions are.

In Maya if you’re running a duplicated base skeleton on export what you can do is to wire up the inverseScale of each master jnt to the duplicate jnt, this by-passes scale issues, at least in our experience anyway and is what our exporter is doing under the hood. We no longer worry aboud segmentScaleCompensation, it just works.

That sounds fascinating and useful, and likely beyond my skill level. Is duplicating the skeleton standard practice? How do you copy the keyframes over?

Pretty standard yes as it gives you more ability to mess with the data prior to calling the FBX exporter. All you’d do would be to clean duplicate the skeleton hierarchy, then for jnt in jnts juts direct connect the source and duplicate jnts up to each other.