I am playing around with skeletons again, trying to find an elegant solution to merge skeletons / skin weights between models to attach parts to a model and share animations. ( for example we have a selection of heads that go on a selection of bodies).
and thought I found a super easy way to merge skeletons, by just appending the missing joints, this would keep the joint indices the same for the existing joints, so I would not need to change the skin weights on those models. Unfortunately, when I create a situation very much like the example ( uniform token = [“A/B”, “A”] ), things break:
Warning: in _Init at line 108 of ...usd\23.11\src\pxr\usd\usdSkel\skelDefinition.cpp -- /world/.../rig/skel -- invalid topology: Joint 0 has mis-ordered parent 112. Joints are expected to be ordered with parent joints always coming before children.
Am I missing something here, or is that example perhaps misleading?
Also, in discussing this with our own crowds folks, @mati-nvidia , it was pointed out that the joints attribute in Skeleton prims requires that joints be ordered in a parent-first topology, but the joints attribute in a SkelAnimation prim should be able to specify joints in any order. We don’t exercise that ability in our pipeline, but that might be something to reinforce in the section you are improving?
@spiff Sounds good. In fixing the incorrect joint order I also switched the SkelAnimation joint order too to show that SkelAnimation is not strict. I’ll review those docs again. I think you’re right that those details could be put into words again and reinforced.