root is xformable#

Code

HI.003

Validator

Compatibility

hierarchy usd

Tags

🔑

Summary#

The root prim of the asset hierarchy must be transformable

Description#

This requirement ensures that the root prim of any hierarchy is transformable, allowing the entire hierarchy to be manipulated through standard USD transform operations. The root prim must inherit from UsdGeomXformable, which provides the necessary schema for applying transforms such as translation, rotation, and scaling.

A transformable root is essential for:

  • Enabling the entire hierarchy to be positioned, oriented, and scaled as a unit

  • Supporting animation and keyframe-based transformations

  • Allowing proper integration with scene graphs and transform systems

  • Ensuring compatibility with USD’s transform evaluation pipeline

Why is it required?#

  • Enables the entire hierarchy to be transformed as a cohesive unit

  • Provides a single point of control for positioning and orienting the asset

  • Ensures compatibility with USD’s transform evaluation system

  • Supports animation workflows and keyframe-based transformations

  • Maintains consistency with USD’s transformable prim expectations

Examples#

# Valid: Root is an Xform prim (naturally transformable)
def Xform "RootXform"
{
    double3 xformOp:translate = (0, 0, 0)
    uniform token[] xformOpOrder = ["xformOp:translate"]
    
    def Xform "ChildXform" {}
}

# Invalid: Root is a Material prim (not transformable)
def Material "RootMaterial"
{
    def Mesh "ChildMesh" {}  # This violates the requirement
}

How to comply#

  • Ensure the root prim contains UsdGeomXformable

  • Use prim types that naturally contain UsdGeomXformable (Xform, Mesh, Sphere, Cube, etc.)

  • Avoid using non-transformable prims (Material, Shader, etc.) as the root

  • Verify that the root prim can receive transform operations

  • Test that the entire hierarchy can be transformed through standard USD operations

Exceptions to watch out for#

  • Nested Gprims: Geometric primitives (Gprims) such as Mesh, Sphere, Cube, Cylinder, etc. cannot be nested within other Gprims. For example, a Mesh cannot have a Sphere as a child, and a Sphere cannot have a Cube as a child. Use Xform prims as intermediate nodes when you need to group multiple Gprims together.

  • Non-transformable prims: Prims like Material, Shader, and other non-geometric types cannot serve as transformable roots or be part of a transformable hierarchy.

For More Information#