first commit

This commit is contained in:
dongchangxi committed 2025-01-15 09:31:42 +08:00
commit fb98172573
287 files changed
+43090

No files matched your search

@@ -0,0 +1,296 @@
#usda 1.0
(
""" This file contains a schema for supporting skeletal animations in USD.
"""
subLayers = [
@usdGeom/schema.usda@
]
)
over "GLOBAL" (
customData = {
string libraryName = "usdSkel"
string libraryPath = "pxr/usd/usdSkel"
dictionary libraryTokens = {
dictionary weight = {
string doc = """UsdSkelInbetweenShape - The weight location at
which the inbetween shape applies."""
}
}
}
) {
}
class SkelRoot "SkelRoot" (
inherits = </Boundable>
doc = """Boundable prim type used to identify a scope beneath which
skeletally-posed primitives are defined.
A SkelRoot must be defined at or above a skinned primitive for any skinning
behaviors in UsdSkel.
See the extended \\ref UsdSkel_SkelRoot "Skel Root Schema" documentation for
more information."""
customData = {
string className = "Root"
dictionary extraPlugInfo = {
bool implementsComputeExtent = true
}
}
) {
}
class Skeleton "Skeleton" (
inherits = </Boundable>
doc = """Describes a skeleton.
See the extended \\ref UsdSkel_Skeleton "Skeleton Schema" documentation for
more information.
"""
customData = {
dictionary extraPlugInfo = {
bool implementsComputeExtent = true
}
string extraIncludes = """
#include "pxr/usd/usdSkel/topology.h" """
}
) {
uniform token[] joints (
doc = """An array of path tokens identifying the set of joints that make
up the skeleton, and their order. Each token in the array must be valid
when parsed as an SdfPath. The parent-child relationships of the
corresponding paths determine the parent-child relationships of each
joint. It is not required that the name at the end of each path be
unique, but rather only that the paths themselves be unique."""
)
uniform token[] jointNames (
doc = """If authored, provides a unique name per joint. This may be
optionally set to provide better names when translating to DCC apps
that require unique joint names."""
)
uniform matrix4d[] bindTransforms (
doc = """Specifies the bind-pose transforms of each joint in
**world space**, in the ordering imposed by *joints*."""
)
uniform matrix4d[] restTransforms (
doc = """Specifies the rest-pose transforms of each joint in
**local space**, in the ordering imposed by *joints*. This provides
fallback values for joint transforms when a Skeleton either has no
bound animation source, or when that animation source only contains
animation for a subset of a Skeleton's joints."""
)
}
class SkelAnimation "SkelAnimation" (
inherits = </Typed>
doc = """Describes a skel animation, where joint animation is stored in a
vectorized form.
See the extended \\ref UsdSkel_SkelAnimation "Skel Animation"
documentation for more information.
"""
customData = {
string className = "Animation"
}
) {
uniform token[] joints (
doc = """Array of tokens identifying which joints this animation's
data applies to. The tokens for joints correspond to the tokens of
Skeleton primitives. The order of the joints as listed here may
vary from the order of joints on the Skeleton itself."""
)
float3[] translations (
doc = """Joint-local translations of all affected joints. Array length
should match the size of the *joints* attribute."""
)
quatf[] rotations (
doc = """Joint-local unit quaternion rotations of all affected joints,
in 32-bit precision. Array length should match the size of the
*joints* attribute."""
)
half3[] scales (
doc = """Joint-local scales of all affected joints, in
16 bit precision. Array length should match the size of the *joints*
attribute."""
)
uniform token[] blendShapes (
doc = """Array of tokens identifying which blend shapes this
animation's data applies to. The tokens for blendShapes correspond to
the tokens set in the *skel:blendShapes* binding property of the
UsdSkelBindingAPI."""
)
float[] blendShapeWeights (
doc = """Array of weight values for each blend shape. Each weight value
is associated with the corresponding blend shape identified within the
*blendShapes* token array, and therefore must have the same length as
*blendShapes."""
)
}
class PackedJointAnimation "PackedJointAnimation" (
inherits = </SkelAnimation>
doc = """Deprecated. Please use SkelAnimation instead."""
)
{
}
class "SkelBindingAPI" (
inherits = </APISchemaBase>
doc = """Provides API for authoring and extracting all the skinning-related
data that lives in the "geometry hierarchy" of prims and models that want
to be skeletally deformed.
See the extended \\ref UsdSkel_BindingAPI "UsdSkelBindingAPI schema"
documentation for more about bindings and how they apply in a scene graph.
"""
customData = {
string className = "BindingAPI"
string extraIncludes = """
#include "pxr/base/tf/span.h"
#include "pxr/usd/usdGeom/primvar.h"
#include "pxr/usd/usdSkel/skeleton.h" """
}
)
{
rel skel:animationSource (
customData = {
string apiName = "animationSource"
}
doc = """Animation source to be bound to Skeleton primitives at or
beneath the location at which this property is defined.
"""
)
rel skel:skeleton (
customData = {
string apiName = "skeleton"
}
doc = """Skeleton to be bound to this prim and its descendents that
possess a mapping and weighting to the joints of the identified
Skeleton."""
)
uniform token primvars:skel:skinningMethod = "classicLinear" (
customData = {
string apiName = "skinningMethod"
}
allowedTokens = ["classicLinear", "dualQuaternion"]
doc = """The skinningMethod specifies the skinning method for the prim."""
)
matrix4d primvars:skel:geomBindTransform (
customData = {
string apiName = "geomBindTransform"
}
doc = """Encodes the bind-time world space transforms of the prim.
If the transform is identical for a group of gprims that share a common
ancestor, the transform may be authored on the ancestor, to "inherit"
down to all the leaf gprims. If this transform is unset, an identity
transform is used instead."""
)
uniform token[] skel:joints (
customData = {
string apiName = "joints"
}
doc = """An (optional) array of tokens defining the list of
joints to which jointIndices apply. If not defined, jointIndices applies
to the ordered list of joints defined in the bound Skeleton's *joints*
attribute. If undefined on a primitive, the primitive inherits the
value of the nearest ancestor prim, if any."""
)
int[] primvars:skel:jointIndices (
customData = {
string apiName = "jointIndices"
}
doc = """Indices into the *joints* attribute of the closest
(in namespace) bound Skeleton that affect each point of a PointBased
gprim. The primvar can have either *constant* or *vertex* interpolation.
This primvar's *elementSize* will determine how many joint influences
apply to each point. Indices must point be valid. Null influences should
be defined by setting values in jointWeights to zero.
See UsdGeomPrimvar for more information on interpolation and
elementSize."""
)
float[] primvars:skel:jointWeights (
customData = {
string apiName = "jointWeights"
}
doc = """Weights for the joints that affect each point of a PointBased
gprim. The primvar can have either *constant* or *vertex* interpolation.
This primvar's *elementSize* will determine how many joints influences
apply to each point. The length, interpolation, and elementSize of
*jointWeights* must match that of *jointIndices*. See UsdGeomPrimvar
for more information on interpolation and elementSize."""
)
uniform token[] skel:blendShapes (
customData = {
string apiName = "blendShapes"
}
doc = """An array of tokens defining the order onto which blend shape
weights from an animation source map onto the *skel:blendShapeTargets*
rel of a binding site. If authored, the number of elements must be equal
to the number of targets in the _blendShapeTargets_ rel. This property
is not inherited hierarchically, and is expected to be authored directly
on the skinnable primitive to which the blend shapes apply."""
)
rel skel:blendShapeTargets (
customData = {
string apiName= "blendShapeTargets"
}
doc = """Ordered list of all target blend shapes. This property is not
inherited hierarchically, and is expected to be authored directly on
the skinnable primitive to which the the blend shapes apply."""
)
}
class BlendShape "BlendShape" (
inherits = </Typed>
doc = """Describes a target blend shape, possibly containing inbetween
shapes.
See the extended \\ref UsdSkel_BlendShape "Blend Shape Schema
documentation for information.
"""
customData = {
string extraIncludes = """
#include "pxr/base/tf/span.h"
#include "pxr/usd/usdSkel/inbetweenShape.h" """
}
)
{
uniform vector3f[] offsets (
doc = """**Required property**. Position offsets which, when added to the
base pose, provides the target shape."""
)
uniform vector3f[] normalOffsets (
doc = """**Required property**. Normal offsets which, when added to the
base pose, provides the normals of the target shape."""
)
uniform int[] pointIndices (
doc = """**Optional property**. Indices into the original mesh that
correspond to the values in *offsets* and of any inbetween shapes. If
authored, the number of elements must be equal to the number of elements
in the *offsets* array."""
)
}