joints : meaning of scales (Maya VS Max)

I’m kind of confused with the meaning of the scales for joint nodes in Collada : I’m not sure this is an implementation or design concern.

For instance in Max and Maya there is a different behavior:

  • In Max, when you scale a root bone, the size of children bones are affected.
  • Maya bones don’t appear to be regular nodes as the size of the child bones doesn’t change when the root bone is scaled (only their position and rotate do).

If joints transforms are exported the same way in Max and Maya, we get the same joint matrices, whereas the result is supposed to be different.

What is your opinion on the subject? Do you think it’s a design problem and Collada 1.4 would help on that too?

In Maya, when you create a skin, with a set of bones, the inverse of the scale factors at any bone is applied to its children, if they belong to the skeleton. If you ask me, that’s a nasty hack in Maya’s part.

In COLLADA, when you do a <scale> transform on a scene node, it should apply to all the children. So, when importing in ColladaMaya, the inverse scale factors mentioned above are NOT linked, which results in the wanted COLLADA behavior. The potential issue comes with the export of Maya’s skeletons that include scaling (worsened exponentially if they contain a scale animation). That issue is not yet resolved. I’m open to suggestions, if anyone has ideas on how to easily resolve this.

So, my opinion is: this is just another DCC-specific issue that the plugin needs to resolve. COLLADA says that a node’s scale transform applies to the children.


Do you think it would be alright if you added an invert scale transform to each bone’s children when exporting?
This wouldn’t be symmetrical to the import process though.

Adding an invert scale transform to each bone’s children would partially work, but would break most importers.

Assuming no scale pivots and no scale animations, I could merge the scale factors. With scale animations, I’d have to merge the animation curves/sampled value curves. If there are scale pivots: I guess I could add inverted scale pivot transforms. If the scale pivots are animated, it gets nasty, fast :slight_smile:

In the long-term, I’m sure we’ll find an elegant solution. In the mean-time, use bake transforms and sampling.

I didn’t think it would fix the problem with bake transforms but indeed, it does. Thanks :slight_smile: