Asset Transformer Rules Reference#
This page provides a reference of all available transformation rules for the Asset Transformer.
For general usage, refer to Asset Transformer. For API and custom rule development, refer to Asset Transformer API.
Rules Overview#
Rules are organized into four packages based on their function:
Package |
Rules |
Purpose |
|---|---|---|
Core Routing |
SchemaRoutingRule, PropertyRoutingRule, PrimRoutingRule, RemoveSchemaRule |
Route USD opinions to dedicated layers |
Performance |
MaterialsRoutingRule, GeometriesRoutingRule |
Optimize assets through deduplication and instancing |
Structure |
FlattenRule, VariantRoutingRule, InterfaceConnectionRule |
Reorganize USD composition structure |
Isaac Sim |
RobotSchemaRule, MakeListsNonExplicitRule, PhysicsJointPoseFixRule |
Apply Isaac Sim-specific transformations |
Available Rules#
Select a category tab to view available rules. Expand each rule for detailed parameters and execution logic.
These rules route USD opinions (schemas, properties, prims) from source layers to dedicated destination layers. The routing process preserves composition semantics by creating override opinions in the destination layer while removing the original opinions from source layers.
SchemaRoutingRule
Routes applied API schemas and their associated properties to a separate layer. This enables modular organization where physics schemas, robot schemas, or other API schemas can be selectively loaded.
Fully Qualified Type: isaacsim.asset.transformer.rules.core.schemas.SchemaRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
list |
List of API schema patterns to route. Supports wildcards (for example, |
|
list |
Schema patterns to exclude from routing. Overrides positive matches from |
|
str |
Output USD filename (default: |
|
list |
Wildcard patterns to filter which prim names to process (default: |
|
list |
Prim name patterns to exclude from processing |
Execution Logic:
Schema Discovery: Traverses all prims in the stage and collects applied API schemas matching the specified patterns.
Property Namespace Resolution: For each matched schema, determines the property namespace prefix (for example,
PhysicsRigidBodyAPIusesphysics:namespace,PhysicsDriveAPI:angularusesdrive:angular:).Schema Transfer: Uses USD’s
TokenListOpto remove the schema token from the source layer’sapiSchemasmetadata and prepend it to the destination layer.Property Transfer: Copies all properties belonging to the schema namespace from the source layer to the destination layer using
Sdf.CopySpec, then removes them from the source.Layer Management: Sets the destination layer’s default prim to match the source and saves both layers.
PropertyRoutingRule
Routes properties matching name patterns to a separate layer. This allows organizing specific property namespaces (for example, physics properties, custom attributes) into modular layers.
Fully Qualified Type: isaacsim.asset.transformer.rules.core.properties.PropertyRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
list |
Regular expression patterns to match property names (for example, |
|
list |
Regex patterns to exclude from routing |
|
str |
Output USD filename (default: |
|
str |
Root prim path to limit the search scope (default: |
|
list |
Wildcard patterns to filter which prim names to process |
|
list |
Prim name patterns to exclude |
Execution Logic:
Pattern Compilation: Compiles the provided regex patterns for efficient matching.
Property Discovery: Iterates through all attributes and relationships on prims within the scope, checking names against the compiled patterns.
Property Copy: For each matching property, copies the spec from the strongest opinion in the prim stack to the destination layer using
Sdf.CopySpec.Source Removal: Removes the property spec from all source layers in the prim stack (except the destination layer) to prevent duplicate opinions.
Layer Finalization: Exports the destination layer and saves all modified source layers.
PrimRoutingRule
Routes entire prims matching type patterns to a separate layer. This enables organizing physics prims, render prims, or other typed prims into modular layers.
Fully Qualified Type: isaacsim.asset.transformer.rules.core.prims.PrimRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
list |
Prim type patterns to route. Supports wildcards (for example, |
|
list |
Prim type patterns to exclude from routing |
|
str |
Output USD filename (default: |
|
str |
Root prim path to limit the search scope (default: |
|
list |
Wildcard patterns to filter which prim names to process |
|
list |
Prim name patterns to exclude |
Execution Logic:
Type Matching: Collects all prims within the scope whose type name matches the specified patterns using
fnmatch.Composed Copy: Copies the complete composed prim definition (including all properties, metadata, and applied schemas) to the destination layer.
Complete Removal: Removes the prim spec from all source layers, including explicitly deleting all property specs (to handle override properties authored by other rules like
SchemaRoutingRule), clearingapiSchemasmetadata, and deleting the prim spec from parent namespaces.Layer Management: Exports the destination layer and saves modified source layers.
RemoveSchemaRule
Removes specific applied API schemas (and optionally their associated properties) from a target layer. Useful for stripping simulator-specific schemas when preparing an asset for a different physics backend.
Fully Qualified Type: isaacsim.asset.transformer.rules.core.remove_schema.RemoveSchemaRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Target USD filename to edit (for example, |
|
list |
Wildcard patterns matching API schema names to remove (for example, |
|
list |
Regex patterns limiting which prim paths are affected (default: |
|
bool |
Also remove properties belonging to the matched schema namespaces (default: |
Execution Logic:
Pattern Matching: Iterates over all prims in the target layer, matching applied API schemas against the specified wildcard patterns.
Schema Removal: Removes matching schema tokens from each prim’s
apiSchemasmetadata usingTokenListOpmanipulation.Property Cleanup: If
clear_propertiesis enabled, removes all properties in the matched schema namespace from the prim spec.Layer Save: Saves the modified layer.
These rules optimize assets for better simulation and rendering performance through deduplication and instancing.
MaterialsRoutingRule
Routes material prims to a shared layer with global deduplication, creates instanceable references at original locations, and transfers texture/MDL assets to a designated folder.
Fully Qualified Type: isaacsim.asset.transformer.rules.perf.materials.MaterialsRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Root prim path to limit material search (default: |
|
str |
Output USD filename for the materials layer (default: |
|
str |
Folder name for texture assets relative to destination (default: |
|
bool |
Enable material deduplication based on content hash (default: |
|
bool |
Download remote textures (for example, from Nucleus) to local folder (default: |
Execution Logic:
Material Discovery: Finds all material prims (
UsdShade.Material) within the scope, tracking which layer defines each material. Materials withPhysicsMaterialAPIapplied are skipped — these physics-specific materials remain in the base layer at their original paths so thatmaterial:binding:physicsrelationships continue to resolve.Asset Collection: Resolves all texture and MDL file paths referenced by materials, handling both local and remote (Nucleus) assets. Parses MDL files to discover embedded texture references.
Content Hashing: Computes SHA-256 hashes of each material’s content (type, attributes, connections, relationships) using resolved asset paths for consistent deduplication.
Asset Transfer: Copies all unique assets to the textures folder with global deduplication. Handles filename collisions by appending numeric suffixes. Updates MDL files to point to transferred textures.
Material Layer Creation: Creates a
/Materialsscope in the materials layer. For each unique material (by hash), copies the material definition with updated asset paths.Instanceable References: Updates each original material location with an instanceable reference to the deduplicated material in the materials layer.
Binding Update: Ensures
MaterialBindingAPIis applied to all prims with material bindings.Cleanup: Removes instanceable references for materials that are not bound to any surface.
GeometriesRoutingRule
Routes geometry prims to a shared layer with deduplication and creates a separate instances layer for per-instance overrides. Operates on a fully flattened stage (references and instances already resolved).
Fully Qualified Type: isaacsim.asset.transformer.rules.perf.geometries.GeometriesRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Root prim path to limit geometry search (default: |
|
str |
Output USD filename for base geometry definitions (default: |
|
str |
Output USD filename for instance-specific overrides (default: |
|
bool |
Reuse identical geometry definitions (default: |
|
bool |
Save the base stage as USD ASCII format (default: |
|
bool |
Log detailed transform decomposition information (default: |
Execution Logic:
Geometry Discovery: Identifies all geometry prims (Mesh, Gprim types) within the scope.
Content Hashing: Computes geometry hashes based on mesh data (points, face counts, indices), transforms, and intrinsic properties (type-specific attributes like
subdivisionScheme,orientation).Intrinsic vs Instance Properties: Separates intrinsic geometry properties (mesh data, UVs, normals, tangents) from instance-specific properties (visual material bindings, applied schemas like CollisionAPI, custom attributes). Physics-purpose material bindings (
material:binding:physics) are preserved as-is in the instance delta, pointing to their original target paths in the base layer rather than being rerouted throughVisualMaterials.Geometry Layer Creation: Creates geometry definitions under
/Geometries/{name}/{name}in the geometries layer. Identical geometries share the same definition.Instance Layer Creation: Creates instance entries capturing per-instance deltas: material bindings, applied API schemas, transform overrides, and custom properties.
Base Stage Update: Updates the base stage to reference the geometry definitions, replacing original geometry prims with instanceable references.
Delta Coalescing: Groups instances with identical deltas to reduce redundancy in the instances layer.
These rules reorganize USD composition structure for modular asset organization.
FlattenRule
Flattens the original input stage into a single layer with optional variant selection. This creates a neutral base representation suitable for subsequent transformation rules.
Fully Qualified Type: isaacsim.asset.transformer.rules.structure.flatten.FlattenRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Relative output path within the destination (default: |
|
bool |
Clear all variant selections before flattening to produce a neutral base (default: |
|
dict |
Dictionary mapping variant set names to variant selections. Only applies to variant sets on the default prim. Example: |
|
bool |
Match variant names case-insensitively when applying selections (default: |
Execution Logic:
Original Stage Access: Opens the original input stage (before any processing) to preserve relative asset paths that would be broken after initial manager processing.
Variant Selection Application: If
selected_variantsis specified, applies the variant selections to the default prim’s variant sets. Case-insensitive matching finds variants likephysxwhenPhysXis requested.Variant Clearing: If
clear_variantsis enabled, iterates through all prims and clears theirvariantSelectionsmetadata to ensure a neutral base.Stage Flattening: Uses
Usd.Stage.Flatten()to compose all layers, references, and payloads into a single layer.Export: Exports the flattened layer to the destination path. Handles USD layer caching by transferring content to cached layers when necessary.
Stage Switch: Returns the output path so the manager switches subsequent rules to operate on the flattened stage.
VariantRoutingRule
Routes variant set contents to separate layer files. Each variant is extracted into an individual USDA file organized by variant set folder. Handles composition arcs within variants by copying source assets and remapping dependencies.
Fully Qualified Type: isaacsim.asset.transformer.rules.structure.variants.VariantRoutingRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
list |
Optional list of variant set names to process. If empty, all variant sets on the default prim are processed. |
|
bool |
Convert variant option names to lowercase for output filenames and references (default: |
|
bool |
Collect external dependencies (referenced assets, textures) into a |
|
list |
Variant names to exclude from full processing. Excluded variants get empty USDA files created but contents are not processed. Useful for variants like |
Execution Logic:
Variant Set Analysis: Examines the default prim’s variant sets and builds a map of variant assets (payloads/references within each variant) to variant names.
Variant File Mapping: Creates a mapping from original variant asset paths to new output file paths (
{VariantSetName}/{variant_name}.usda).Dependency Collection: Uses
UsdUtils.ComputeAllDependenciesto discover all assets referenced by each variant’s source (sublayers, references, payloads, textures). Copies dependencies to adependenciesfolder.Asset Copy with Remapping: For variants with payloads/references, copies the source asset to the variant output file. Uses
UsdUtils.ModifyAssetPathsto remap all internal paths to point to new variant files or collected dependencies.Delta Application: Applies any direct overrides from the variant spec (attributes, relationships, child prims, composition arcs) as the strongest opinion on top of the copied content.
Inter-Variant Remapping: Updates references between variants to point to the new variant files. Remaps paths in collected dependencies to ensure consistency.
Excluded Variant Handling: Creates empty USDA files with just the default prim for excluded variants.
InterfaceConnectionRule
Generates the final interface layer with composition arcs to organize USD assets. Creates the top-level asset file that references/payloads the base asset and optionally generates variant sets from folder structure.
Fully Qualified Type: isaacsim.asset.transformer.rules.structure.interface.InterfaceConnectionRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Relative path to the base USD layer to connect (default: |
|
str |
How to connect the base layer: |
|
bool |
Generate variant sets from payloads folder structure (default: |
|
str |
Folder to scan for variant set organization (default: |
|
list |
List of custom connection specifications. Each spec is a dictionary with |
|
dict |
Dictionary mapping variant set names to default variant selections. Unspecified variant sets default to |
Execution Logic:
Interface Layer Creation: Creates the interface layer at the package root, named after the original input asset.
Default Prim Setup: Ensures the default prim exists as an Xform in the interface layer.
Base Connection: Connects the base layer to the default prim using the specified connection type (prepends Reference or Payload to the prim’s list, or inserts Sublayer).
Folder Variant Generation: If enabled, scans the payloads folder for subfolders containing USD files. Each subfolder becomes a variant set, with a
nonevariant (no payload) and variants for each USD file (payloaded).Custom Connections: Applies custom connection specifications. For Sublayer connections, adds to the layer’s sublayer paths. For Reference/Payload connections, adds to the default prim. Can modify the interface layer or any specified asset layer.
Extraneous Prim Recovery: Scans the base layer for root-level prims outside
defaultPrim(e.g./Render,/PhysicsScene). Copies each into the interface layer at the same root level usingSdf.CopySpec, then removes them from the base layer and saves it. This keeps those prims reachable in the composed stage and makes the pipeline idempotent — prims that would not survive a reference-based round-trip are promoted to the interface layer where they persist across re-transforms.Variant Selection Defaults: Sets default variant selections on the interface layer’s default prim.
These rules apply Isaac Sim-specific transformations for robot assets.
RobotSchemaRule
Applies the Isaac Sim robot schema to a target prim. Uses the robot schema utilities to detect articulation structure and populate robot relationships (links, joints, sites).
Fully Qualified Type: isaacsim.asset.transformer.rules.isaac_sim.robot_schema.RobotSchemaRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Target prim path to apply the Robot schema. Defaults to the stage default prim if not specified. |
|
str |
Output USD filename for robot schema opinions (default: |
|
bool |
Add sites to the robot by scanning child Xforms with no children under Link prims (default: |
|
bool |
If |
|
str |
Optional sublayer path to include on the working stage prior to applying the robot schema. Useful for including physics layers that define joints. |
Execution Logic:
Destination Layer Setup: Creates or opens the destination layer for robot schema opinions. Adds it as a sublayer to the source stage.
Sublayer Insertion: If a sublayer is specified (e.g., physics layer), inserts it as the strongest sublayer on the source stage.
Schema Detection: Checks if
RobotAPIis already applied to the target prim.Schema Application:
New Schema: Applies
RobotAPIto the target prim, then callsPopulateRobotSchemaFromArticulationto detect the articulation structure and populateisaac:links,isaac:joints, and optionallyisaac:sitesrelationships.Existing Schema: Calls
RecalculateRobotSchemato update the schema while preserving existing relationship order. Removes invalid entries and appends newly discovered links/joints/sites.
Schema Update: Updates deprecated schema versions if necessary.
Layer Isolation: Saves the edit layer and discards any changes to the root layer (since edits are isolated to the robot schema layer).
MakeListsNonExplicitRule
Converts explicit list ops on prim metadata and properties to non-explicit list ops (prepended or appended). This is important for USD composition because explicit lists override all weaker opinions, while prepended/appended lists combine with weaker opinions.
Fully Qualified Type: isaacsim.asset.transformer.rules.isaac_sim.make_lists_non_explicit.MakeListsNonExplicitRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
list |
Prim metadata names to convert. Supports wildcards (for example, |
|
list |
Prim property names to convert. Supports wildcards (for example, |
|
str |
Target list operation type: |
Execution Logic:
Pattern Matching: Uses
fnmatchto match metadata and property names against the specified patterns.Metadata Conversion: For matching prim metadata (like
apiSchemas):Extracts explicit items from the
TokenListOpCreates a new
TokenListOpwith items as prepended or appended (not explicit)Sets the new list op on the prim spec
Relationship Conversion: For matching relationships:
Extracts explicit target paths from the
targetPathListRecreates the relationship spec (preserving other metadata like variability, custom flag)
Re-authors targets using
Prepend()orAppend()calls instead of explicit list
Attribute Connection Conversion: For matching attribute connections:
Extracts explicit connection paths
Clears the connection list and re-authors using
Prepend()orAppend()
Layer Management: Saves all modified layers.
PhysicsJointPoseFixRule
Corrects physics joint local poses after upstream rules (such as GeometriesRoutingRule) change body world transforms. Compares joint world poses computed from the original input asset against the current working stage and updates localPos0/1 and localRot0/1 attributes on any joint whose world pose has drifted.
Fully Qualified Type: isaacsim.asset.transformer.rules.isaac_sim.physics_joint_pose_fix.PhysicsJointPoseFixRule
Parameters:
Parameter |
Type |
Description |
|---|---|---|
|
str |
Optional explicit path to the original composition stage. Defaults to the |
|
float |
Maximum allowed position difference (Euclidean distance) when comparing joint world poses (default: |
|
float |
Minimum quaternion dot-product deviation from 1.0 when comparing joint world poses (default: |
Execution Logic:
Original Stage: Opens the original input asset (before any transformer rules ran) via
input_stage_path.Joint Discovery: Traverses the working stage for all
UsdPhysics.Jointprims.World Pose Comparison: For each joint, computes the joint world pose from both
body0andbody1on the original stage and on the working stage usinglocal_pose * body_world_transform.Drift Detection: If the working stage’s joint world pose differs from the original beyond the configured tolerance, the affected body side is flagged for correction.
Local Pose Fix: Computes the corrective local pose as
joint_world_orig * inverse(body_world_entry)and writes the resulting translation and rotation back to the joint’slocalPosandlocalRotattributes.Layer Save: Saves the modified edit layer if any corrections were applied.
Idempotency Requirement#
All transformation rules must be idempotent: running the full profile twice on the same asset (once on the original, then on the first run’s output) must produce identical USD layers, with the sole exception of the doc metadata field which embeds absolute paths. The extension includes an idempotency test (test_profile_idempotency.py) that enforces this requirement.
Common sources of non-idempotency to watch for when developing new rules:
Floating-point drift – Matrix composition/decomposition round-trips introduce noise. Quantize values to a fixed number of significant digits, or read canonical xformOp values directly when possible.
Stale composition arcs – Extracting content from variant specs can leave behind self-referencing payloads or references on the destination prim. Strip any arcs that were not present in the source.
Inconsistent defaultPrim – Use
self.source_stage.GetDefaultPrim()(composed stage) rather thanself.source_stage.GetRootLayer().defaultPrim(root layer only) to reliably resolve the default prim across re-transforms.Non-deterministic merge decisions – When deciding whether to merge a child into its parent, account for scaffolding prims (e.g.
VisualMaterialsscopes, empty overs) left behind by previous runs.Extraneous root-level prims – After flattening, root-level prims outside the
defaultPrimhierarchy (e.g. viewport/render artifacts) do not survive a reference-based round-trip. TheInterfaceConnectionRulehandles this automatically by moving such prims from the base layer into the interface layer, but custom rules that introduce root-level prims should be aware of this composition constraint.
Rule Type Quick Reference#
Use these fully qualified type names in rule profiles:
# Core Routing
isaacsim.asset.transformer.rules.core.schemas.SchemaRoutingRule
isaacsim.asset.transformer.rules.core.properties.PropertyRoutingRule
isaacsim.asset.transformer.rules.core.prims.PrimRoutingRule
isaacsim.asset.transformer.rules.core.remove_schema.RemoveSchemaRule
# Performance
isaacsim.asset.transformer.rules.perf.materials.MaterialsRoutingRule
isaacsim.asset.transformer.rules.perf.geometries.GeometriesRoutingRule
# Structure
isaacsim.asset.transformer.rules.structure.flatten.FlattenRule
isaacsim.asset.transformer.rules.structure.variants.VariantRoutingRule
isaacsim.asset.transformer.rules.structure.interface.InterfaceConnectionRule
# Isaac Sim
isaacsim.asset.transformer.rules.isaac_sim.robot_schema.RobotSchemaRule
isaacsim.asset.transformer.rules.isaac_sim.make_lists_non_explicit.MakeListsNonExplicitRule
isaacsim.asset.transformer.rules.isaac_sim.physics_joint_pose_fix.PhysicsJointPoseFixRule