This is a critical encoding feature for dealing with large numbers of characters. UsdSkel leverages scene graph instancing to describe rest state instancing, by which the rest state of characters may be shared across multiple instances of a character, each of which has been assigned a unique animation – without deinstancing.Sparse animation-layering capabilities may eventually be introduced as part of an encoding of animation blending. Although these factors are negligible on a small number of characters, this provides substantial performance improvements when interchanging large numbers of characters.Īs a consequence of this, although UsdSkel allows a sparse skeletal animation to be defined, sparse layering of joint transforms is not supported. This avoids both excess prim and property bloat, while also greatly improving both read and write performance. In order to enable UsdSkel to efficiently encode very large numbers of characters, joint animations are stored using a compact, vectorized encoding on each Skeleton. Towards this end, some expressibility trade-offs have been made in the name of scalability:
UsdSkel was designed with the goal in mind of both being able to represent small numbers of characters, while also being efficient enough to be able to scale up to encoding crowds, consisting of hundreds of thousands of agents. This encoding supports both interchanging skinnable rigs, as well as the interchange of skeletal control rigs on their own. UsdSkel provides an encoding of simple skeletons and blend shapes, with the goal of interchanging basic skeletons and skinned models, both for game studios as well for the performant, scalable interchange of large-scale crowds.