UsdSkel: points with 0.0 joint weights

Hi,

How are the unweighted points handled in the skeletal animation?

My assumption would be that if the point of a mesh is unweighted (each jointWeight is 0), then it should keep its local space transform. However, my experiments with usdview show that such point gets the skeleton object’s transform. It seems that this behavior corresponds to how it’s described in the UsdSkel docs, though.

I understand that normally rig shouldn’t have zero-weighted points and this is sort of an edge-case (at least similar discussion in glTF thread resulted in file specification restriction and an undefined behavior). So it’s more a question about “best practices”, how are DCCs expected to handle unweighted points? Is it extra static joint to assign such points to or may be there’re some other tricks to work around this?

Here’s a very simple usd-scene to reproduce this behavior: single-quad mesh (red), two joints and a reference non-animated mesh (green). The front-most points aren’t weighted. Usdview squeezes these points together to the skeleton prim origin.

zeroweight_cleaned.usda (3.0 KB)

Regards,
Ilia

On the screenshot: left - usdview, right - blender (doesn’t import display color though).

I can see it useful to emphasize, in the referred section, that unweighted points, therefore, are likely unintended and not useful in authored data, and add a validator for UsdSkel that flags such as a warning (or error?). But I think defining the joint-positioning behavior clearly, as the Skel documentation does, is as far as USD should go, prescriptively… I don’t think we can stipulate what DCC best-practice should be regarding how to devise (or alert the user) a method for dealing with unweighted points?

If others disagree, please join the conversation!

1 Like