asset-at-origin#

Code

VG.025

Validator

Compatibility

core usd

Tags

🔑

Summary#

Asset transforms shall be defined such that the asset is correctly positioned and oriented at the origin (0,0,0).

Description#

Assets should be authored with their local transformation setup so that when referenced into a scene at a particular location, the asset appears at that location as intended. This ensures predictable behavior when aggregating assets in larger scenes.

Why is it required?#

  • Ensures predictable asset placement in aggregate scenes

  • Simplifies asset referencing workflows

  • Provides consistent baseline for transformation operations

  • Facilitates automated scene composition and layout tools

Examples#

#usda 1.0

# Valid: Asset positioned correctly at origin
def Xform "Table_Valid" ()
{
    float3 xformOp:translate = (0, 0, 0)
    float3 xformOp:rotateXYZ = (0, 0, 0)
    float3 xformOp:scale = (1, 1, 1)
    uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
    
    def Cube "TableTop" {
        float3 xformOp:translate = (0, 0, 0.6)
        float3 xformOp:scale = (1, 1, 0.2)
        uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
    }
}

# Invalid: Asset with non-identity default transforms
def Xform "Table_Invalid" (
)
{
    float3 xformOp:translate = (0, 0, 0.6)  # Asset offset from origin by default
    uniform token[] xformOpOrder = ["xformOp:translate"]
    
    def Cube "TableTop" {
        float3 xformOp:scale = (1, 1, 0.2)
        uniform token[] xformOpOrder = ["xformOp:scale"]
    }
}

How to comply#

  • Position assets at the origin (0,0,0) in their local space

  • Set default rotation to (0,0,0) for neutral orientation

  • Set default scale to (1,1,1) for unit scale

  • Use transformation operations for instance-specific positioning when referencing into scenes

  • Test assets by referencing them into a scene at the origin to verify correct placement

For more information#