Omniverse Usd Performance Tuning
OpenAIOfficialCreated by NVIDIA OmniverseDistributed by OpenAI
- Skill
- Workflow
- Software development
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The omniverse-usd-performance-tuning skill provides a structured, end-to-end procedure for addressing performance bottlenecks in USD assets. It manages the lifecycle of performance tuning, from initial runtime context setup and baseline profiling to composition auditing, validation, and targeted scene optimization. The skill enforces a rigorous milestone-based approach, ensuring that all destructive operations are planned and approved, and that performance improvements are verified through comparative profiling and standardized reporting.
What it does
- Orchestrates the end-to-end USD performance tuning lifecycle.
- Validates runtime environments and handles authentication for remote assets.
- Conducts composition audits and structural assessments of USD stages.
- Executes validated optimization operations using Scene Optimizer.
- Generates structured optimization reports comparing baseline and post-optimization metrics.
- Enforces safety gates for destructive operations and mutation.
When to use it
- When a USD scene exhibits slow loading times or low frame rates.
- When memory usage is excessively high or GPU crashes occur.
- When you need to optimize a scene for better interactivity or performance.
- When you need to diagnose CAD conversion quality issues.
- When you need to validate a scene before and after applying optimizations.
Advantages
- Ensures consistent performance diagnosis through a standardized workflow.
- Prevents accidental data loss by requiring approval for destructive operations.
- Provides clear, evidence-based reporting on performance improvements.
- Integrates seamlessly with existing Omniverse validation and optimization tools.
- Maintains strict separation between diagnosis, planning, and execution phases.
Usage examples
- “This USD scene loads very slowly; please triage what I should check first.”
- The agent will initiate the runtime context gate, perform a composition audit, and provide a structured plan to identify the source of the slow load time.
- “Optimize my CAD scene for better performance.”
- The agent will verify the runtime, assess the CAD conversion quality, and propose a milestone-based optimization plan including validation and profiling.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/openai/omniverse-usd-performance-tuning/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip omniverse-usd-performance-tuning.zip -d .agents/skills
Documentation by NVIDIA Omniverse
Omniverse USD Performance Tuning
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
When to Use
Use this workflow for broad performance asks such as slow loading, high memory, low FPS, GPU crashes, conversion-quality triage, or generic requests to optimize a USD scene.
Instructions
Start from the mandatory runtime context gate before producing tuning output, unless the prompt is only asking for a static classification test.
Classify broad optimization requests as
ready_to_plan; reserveapproval_requiredfor prompts that explicitly name a destructive operation to execute before planning.Plan the full canonical chain through
optimization-report, preserving the structured milestone order and theprofile-stage:baseline/profile-stage:afterlabels when listing milestones.Invoke downstream skill bodies only when their phase is reached, and keep raw runtime artifacts on disk while reading compact summaries.
Frontmatter keeps version and tools at top level for agentskills.io runtime
compatibility. NVCARPS discoverability fields live under metadata.
Output Format
Return a plan or status summary that names the selected entry skill, uses ready_to_plan for generic optimization requests, includes the full milestone chain through optimization-report, and labels profile phases as profile-stage:baseline and profile-stage:after. For structured outputs, the broad-optimization milestone subsequence is omniverse-usd-performance-tuning -> profile-stage:baseline -> usd-structure-assessment -> usd-validation-runner -> restructure-decision -> apply-restructure -> so-run-validators -> so-interpret-validators -> so-run-operations -> profile-stage:after -> compare-profiles -> optimization-report. End-to-end execution should produce an optimized stage when mutation runs and a report conforming to the optimization-report reference's schema (scripts/optimization-report.schema.json within that reference).
Use this workflow for broad performance asks such as slow loading, low FPS, high memory, GPU crashes, conversion quality, or "optimize my scene."
Entry skill rule
This skill is the named entry point for broad performance work whenever the
agent has any verified way to do that work. Runtime probing details live in
setup-usd-performance-tuning; this rule only decides which skill owns the
user-facing performance request.
If the setup probe shows any verified runtime path - Kit, standalone, or even a partial stack such as Asset Validator only - enter here. If the user's requested tool is missing, return the specific
blocked_code(blocked_missing_scene_optimizer,blocked_missing_so_operation, etc.) instead of substituting another workflow.Enter at
setup-usd-performance-tuningonly when no runtime path is verified and runtime choice/setup is the first unresolved problem.For
omniverse://assets, enter atomniverse-authenticationfirst. Authentication precedes setup and triage for remote assets.
The decision is about ownership, not order. Setup, authentication, and triage all run in their normal phase order; this rule only fixes which skill the agent names as the entry skill in its response.
Runtime context — session-start gate (mandatory)
Before any other tuning output, follow the mandatory session-start gate in
skills/omniverse-usd-performance-tuning/references/setup-usd-performance-tuning/references/runtime-context-header.md.
That reference owns output_path, the canonical setup-preflight.json
location, Format A/Format B, and the "do not improvise a silent probe"
anti-pattern.
Required outcomes:
Missing or unreadable preflight: invoke
setup-usd-performance-tuning.Present preflight: print Format A and wait for the user to choose Continue, Change Kit, Switch to standalone, or Re-run probe.
Confirmed runtime in the same session: use compact Format B for follow-up status.
[Kit: {runtime_context.kit.application} {runtime_context.kit.version} | SO: {runtime_context.sceneOptimizer.version} | AV: {runtime_context.assetValidator.version}]Runtime artifact token budget
Before reading Kit logs, Asset Validator CSVs, Scene Optimizer logs, Tracy CSVs,
or other runtime output, follow
references/runtime-artifact-token-budget.md. Keep raw artifacts on disk, read
summary JSON first, and use bounded log snapshots instead of full dumps or live
streams.
Plan-time vs execution-time approval
approval_required at planning time is reserved for requests that explicitly name a destructive operation. Use the following rule when deciding between ready_to_plan and approval_required:
approval_requiredat planning time — the user's request itself names a destructive operation: "flatten this stage", "decimate the meshes", "merge prototypes", "delete unused prims", or any specific named mutation that cannot be undone within the same workflow. In this case the agent's first response must be an approval prompt that names the operation, before the agent commits to a plan that executes it.ready_to_planat planning time — the user's request is general: "optimize this scene", "make it load faster", "reduce GPU memory", "improve interactivity". The agent lays out the full plan, including any destructive operations the plan would invoke (for exampleso-run-operationswithmergeMaterials), without withholding the plan itself. Approval for each destructive operation is requested alongside plan approval.
The distinction is between authorising a plan and authorising a destructive action. A general optimisation request authorises planning; it does not authorise execution of specific destructive operations.
For structured runtime-test responses and similar planning summaries:
A future
restructure-decisionprompt is a planned user-decision gate, not a reason to set the top-level responsedecisiontoapproval_requiredfor a generic optimization request.For a generic optimization request, set
decision: "ready_to_plan"and include the full intended chain in bothcommitted_milestonesandplanned_phases, throughoptimization-report.It is valid for
gates_observedto includeasks_user_for_restructure_decisionwhile the top-leveldecisionremainsready_to_plan.Whenever a chain names profile phases, use the exact labels
profile-stage:baselineandprofile-stage:after; do not emit the ambiguous bareprofile-stagetoken.Start structured milestone lists with
omniverse-usd-performance-tuningas the owning entry skill. Includesetup-usd-performance-tuningonly as additional Phase 0 context, not as a replacement for the entry skill milestone.For broad optimization requests, preserve the milestone subsequence from Output Format above exactly, with optional extra analysis steps inserted only where they do not reorder it.
Do not list
so-run-validatorsorso-interpret-validatorsbeforerestructure-decisionin broad optimization milestone summaries. Phase-aware validator routing still happens throughusd-validation-runner; the SO validator executor/interpreter milestones appear after the restructure decision path in the structured plan contract.
Output expectation
End-to-end optimization work should produce both an optimized USD stage, when
mutation is executed, and a structured optimization report conforming to
the optimization-report reference's scripts/optimization-report.schema.json. The HTML report must be rendered
from references/report-templates/optimization-report.html.template via
render_preview.py — never hand-write HTML. Diagnosis-only work should still
end with a report or summary that states no optimized stage was written.
Purpose
Route digital twin USD performance requests into the right diagnostic and optimization workflow while preserving evidence before mutation.
Prerequisites
Stage path or enough context to identify the target asset.
User goal: diagnosis only, validation, profiling, or processor execution.
Runtime availability status from
setup-usd-performance-tuningwhen not already known.Permission status for in-place mutation vs writing a separate optimized output.
Examples
"This USD loads slowly; triage what to check first."
"Route a low-FPS CAD scene through the performance workflow."
Triage order
Runtime gate. Follow the mandatory session-start gate above before validation, profiling, or optimization. Do not scan, probe, install, or pick Kit/standalone runtimes directly in this skill;
setup-usd-performance-tuningowns probe/chooser/install dispatch and writes the preflight consumed here.Identify the target problem:
Load time.
FPS or interactivity.
GPU or system memory.
Crash or device lost.
CAD conversion quality.
Validation failure.
Gather minimum context:
Stage path and size.
Whether the stage is local, mounted, or
omniverse://remote. For remote assets, route throughomniverse-authenticationbefore first open.Kit or USD runtime.
Whether the workload is CAD, VFI, AIF, Isaac, or generic OpenUSD.
Whether in-place mutation is allowed.
Whether the user wants diagnosis only or processor execution.
Route:
USD composition questions:
usd-structure-assessment(composition is now part of the SA umbrella; deeper detail inskills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/composition-audit.md).Validation and content issues:
usd-validation-runner(master router; routes tovalidate-*family orso-run-validatorsbased on intent).Edit/output decisions:
usd-edit-target-planner(also owns variant/payload gates).Repeated copied hierarchy or high mesh count with no instancing:
usd-hierarchy-dedupe-candidates.Restructure decision (monolithic stage, asset boundary materialization):
restructure-decision.CAD converter settings: read
references/cad-conversion/README.md(niche pre-USD concern; see reference for details).Scene Optimizer:
so-run-validators,so-interpret-validators,so-run-operations.
Optimization ordering
Follow the canonical ordering in workflow.md § Operation ordering invariants. The high-level rule: prototypes first → per-asset validation → stage-level operations last. The workflow reference owns the full invariant list (meshCleanup before decimateMeshes, deduplication before decimation, never merge if instanced, etc.) and the analysis-only ops catalogue.
Rules
Always run composition audit before mutation.
Always validate before and after processor execution.
Optimize prototypes before per-asset validation.
Do not run whole-stage mesh deduplication on very large CAD scenes before checking for hierarchy-level reuse.
Do not recommend a fixed optimization stack without bottleneck evidence.
Do not invent numeric thresholds or expected percentage wins.
Prefer canonical SO ops over specialty / documentary ones. The op curation in
references/operations/_curation.jsonclassifies every op ascanonical,specialty,analysis,documentary, ordeprecated. When more than one op could resolve the same finding, recommend the canonical one first and only reach for a specialty op when the user explicitly asks or the rationale warrants it. Specifically:For vertex welding, prefer canonical
meshCleanupwith explicit flags over the standalonemergeVerticesop. The standalone op is a legacy/specialty surface; use upstreamusd-optimizefor the operation mechanics and local approval policy before mutating.For hierarchy dedupe, recommend
usd-hierarchy-dedupe-candidates+apply-restructure(the USD-authored rewrite path).For per-mesh dedupe, recommend
deduplicateGeometry(canonical) overfindCoincidingGeometry(analysis — produces a report, not a change).Do not recommend
documentary-status ops (e.g.,boxClip,deletePrims,removeAttributes,removeUntypedPrims,mergeoutside its narrow non-instanced case) without an explicit user request. Documentary ops survive in the per-opreferences/operations/<key>.mdrouting stubs for completeness but are excluded from agent-initiated recommendations.Specialty ≠ documentary. Ops classified as
specialtyin_curation.jsoneither (a) have validator-finding evidence that wires them into theso-interpret-validatorschain (e.g.sparseMeshes,optimizePrimvars), or (b) are load-bearing escape hatches needed for specific downstream contexts (e.g.primitivesToMesheswhen output must beUsdGeomMesh,utilityFunctionfor instancing toggles and material rebinding,pythonScriptforso-create-proxyrecipes). Recommend specialty ops when their validator fires OR when their downstream context applies — the suppression above only targetsdocumentaryops.
Limitations
Does not replace downstream reference instructions; load each required reference before executing it.
Does not install runtimes directly; follow setup or install references when requirements are missing.
Does not authorize mutation when the user has not allowed writes.
Troubleshooting
If runtime status is unclear, run
setup-usd-performance-tuningbefore profiling or validation.If the reported problem is vague, gather stage path, workload type, and whether diagnosis or execution is requested.
If the workflow suggests mutation before evidence, return to baseline profiling and composition audit first.
References
Before routing, read:
skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/optimization-tradeoffs.md— identify which pipeline phase the scene is in (extraction, structuring, or optimization). The right action depends on the phase.skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/factory-level-structuring.md— understand the three pillars (assets, aggregation, animation) and the seven-step structuring pattern.
If you have network access, prefer the live URLs (noted in each reference file) for the most current version.
Required execution flow
Read references/workflow.md for the canonical Phase 0-7 flow, including
Kit/standalone branches, validator-stack routing, operation ordering,
termination conditions, duration hints, and the optional iteration pattern.
The compact root map at references/skill-map.md only routes agents
into this workflow.
Do not treat downstream phase names as plain checklist labels. Before executing
each step, load that phase's nested README.md reference and follow its
instructions. Claude Code only exposes the public catalog skill; it does not
recursively inject profile-stage, usd-structure-assessment, or other nested
references.
The final deliverable must come from optimization-report: save both the structured JSON report and the generated Markdown summary. Do not substitute an ad hoc SUMMARY.md or chat-only recap for the optimization report.
For deeper subtopic guidance, consult the references:
skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/composition-audit.md,skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/layer-health.md- subtopic detail for SA's Phase 1 checklist.skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/instancing-readiness/references/instancing-tradeoffs.md- merge safety, decision tree for instancing choices.skills/omniverse-usd-performance-tuning/references/usd-structure-assessment/references/usd-edit-target-planner/references/variants-payloads.md- deeper variant/payload trade-offs (gates are inline in usd-edit-target-planner).references/cad-conversion/README.md- CAD converter settings.references/upstreams/usd-optimize.md- upstream SO mechanics and prebuilt package resolution.skills/omniverse-usd-performance-tuning/references/usd-validation-runner/references/so-run-validators/references/infrastructure.md- local handoff for SO validator infrastructure.skills/omniverse-usd-performance-tuning/references/usd-validation-runner/references/validation-scoping.md- tier 1/2/3 plan + scene-aware adjustment.skills/omniverse-usd-performance-tuning/references/optimization-report/references/optimization-report-template.md- the data contract every phase populates.
For full Kit runtime profiling (FPS, frame time, Hydra/RTX metrics), refer to the external profiling skills at NVIDIA/omniperf.
Files
- ATTRIBUTION.mdAdded by AutoGineer1.0 KiB
- BENCHMARK.md22.5 KiB
- LICENSEAdded by AutoGineer10.0 KiB
- SKILL.md17.2 KiB
- agents/openai.yaml402 B
- evals/evals.json4.8 KiB
- references/cad-conversion/README.md2.5 KiB
- references/cad-conversion/scripts/conversion-report.schema.json1.3 KiB
- references/compare-profiles.md2.4 KiB
- references/compare-profiles/README.md9.7 KiB
- references/omniverse-authentication/README.md3.8 KiB
- references/operations/CLASSIFICATION.md4.5 KiB
- references/operations/EXECUTION.md4.5 KiB
- references/operations/README.md8.0 KiB
- references/operations/_curation.json14.5 KiB
- references/operations/_template.md1.5 KiB
- references/operations/boxClip.md1.0 KiB
- references/operations/computeExtents.md1.1 KiB
- references/operations/countVertices.md1.1 KiB
- references/operations/decimateMeshes.md2.6 KiB
- references/operations/deduplicateGeometry.md1.1 KiB
- references/operations/deduplicateHierarchies.md1.5 KiB
- references/operations/deleteHiddenPrims.md1.1 KiB
- references/operations/deletePrims.md1.0 KiB
- references/operations/diceMeshes.md1.1 KiB
- references/operations/editStageMetrics.md1.1 KiB
- references/operations/findCoincidingGeometry.md1.1 KiB
- references/operations/findFlatHierarchies.md1.1 KiB
- references/operations/findOccludedMeshes.md4.8 KiB
- references/operations/findOverlappingMeshes.md1.1 KiB
- references/operations/fitPrimitives.md1.1 KiB
- references/operations/flattenHierarchy.md1.1 KiB
- references/operations/generateAtlasUVs.md1.1 KiB
- references/operations/generateNormals.md1.1 KiB
- references/operations/generateProjectionUVs.md1.1 KiB
- references/operations/generateScene.md1.1 KiB
- references/operations/manifest.json38.6 KiB
- references/operations/manifoldMeshes.md1.1 KiB
- references/operations/merge.md1.1 KiB
- references/operations/mergeVertices.md1.1 KiB
- references/operations/meshCleanup.md1.1 KiB
- references/operations/optimizeMaterials.md1.1 KiB
- references/operations/optimizePrimvars.md1.1 KiB
- references/operations/optimizeSkelRoots.md1.1 KiB
- references/operations/optimizeTimeSamples.md1.1 KiB
- references/operations/organizePrototypes.md1.1 KiB
- references/operations/pivot.md1.0 KiB
- references/operations/primitivesToMeshes.md1.1 KiB
- references/operations/printStats.md1.0 KiB
- references/operations/probe-snapshots/so-110.0.4.json1.8 KiB
- references/operations/pruneLeaves.md1.1 KiB
- references/operations/pythonScript.md1.0 KiB
- references/operations/remeshMeshes.md1.1 KiB
- references/operations/removeAttributes.md1.1 KiB
- references/operations/removePrims.md1.1 KiB
- references/operations/removeSmallGeometry.md1.1 KiB
- references/operations/removeUntypedPrims.md1.1 KiB
- references/operations/removeUnusedUVs.md1.1 KiB
- references/operations/rtxMeshCount.md1.1 KiB
- references/operations/scripts/operation-curation.schema.json1.2 KiB
- references/operations/scripts/operation-manifest.schema.json1.8 KiB
- references/operations/shrinkwrap.md1.0 KiB
- references/operations/sparseMeshes.md1.1 KiB
- references/operations/splitMeshes.md1.0 KiB
- references/operations/subdivideMeshes.md1.1 KiB
- references/operations/triangulateMeshes.md1.1 KiB
- references/operations/utilityFunction.md1.1 KiB
- references/optimization-report/README.md14.6 KiB
- references/optimization-report/references/optimization-report-template.md10.4 KiB
- references/optimization-report/scripts/optimization-report.schema.json9.7 KiB
- references/output-workspace.md3.1 KiB
- references/profile-stage/README.md13.7 KiB
- references/report-templates/README.md1.4 KiB
- references/report-templates/optimization-report.design-fixture.json6.4 KiB
- references/report-templates/optimization-report.html.template8.6 KiB
- references/report-templates/optimization-report.md.template1.7 KiB
- references/report-templates/render_preview.pyScript8.2 KiB
- references/runtime-artifact-token-budget.md3.8 KiB
- references/setup-usd-performance-tuning/README.md12.2 KiB
- references/setup-usd-performance-tuning/references/install-asset-validator-standalone/README.md3.8 KiB
- references/setup-usd-performance-tuning/references/install-kit/README.md2.6 KiB
- references/setup-usd-performance-tuning/references/install-so-standalone/README.md11.0 KiB
- references/setup-usd-performance-tuning/references/install-so-via-kit/README.md3.7 KiB
- references/setup-usd-performance-tuning/references/kit-discovery.md2.9 KiB
- references/setup-usd-performance-tuning/references/runtime-context-header.md13.2 KiB
- references/setup-usd-performance-tuning/references/runtime-probe.md4.5 KiB
- references/setup-usd-performance-tuning/references/standalone-runtime.md2.7 KiB
- references/setup-usd-performance-tuning/scripts/probe-snapshot.schema.json1.7 KiB
- references/setup-usd-performance-tuning/scripts/setup-preflight.schema.json2.8 KiB
- references/skill-map.md6.3 KiB
- references/so-run-operations/README.md3.5 KiB
- references/so-run-operations/references/batch-mode.md4.5 KiB
- references/so-run-operations/references/config-from-evidence.md4.4 KiB
- references/so-run-operations/references/invocation.md4.5 KiB
- references/so-run-operations/references/operation-safety.md8.7 KiB
- references/so-run-operations/references/pipelines.md2.4 KiB
- references/so-run-operations/references/so-create-proxy/README.md1.7 KiB
- references/so-run-operations/references/so-create-proxy/references/bounding-box-proxy-modes.md1.5 KiB
- references/so-run-operations/references/so-create-proxy/references/decimate-step-recipes.md1.5 KiB
- references/so-run-operations/references/so-create-proxy/references/decimation-tuning.md1.5 KiB
- references/so-run-operations/references/so-create-proxy/references/proxy-config-recipes.md1.6 KiB
- references/so-run-operations/references/units-and-tolerances.md3.8 KiB
- references/upstreams/usd-optimize.md3.1 KiB
- references/usd-structure-assessment/README.md24.8 KiB
- references/usd-structure-assessment/references/apply-restructure/README.md14.2 KiB
- references/usd-structure-assessment/references/apply-restructure/references/hierarchy-dedupe-rewrite-tool-spec.md8.5 KiB
- references/usd-structure-assessment/references/apply-restructure/references/ref-remap-mode.md2.4 KiB
- references/usd-structure-assessment/references/apply-restructure/references/restructure-mode.md8.2 KiB
- references/usd-structure-assessment/references/asset-structure-principles.md60.1 KiB
- references/usd-structure-assessment/references/composition-audit.md4.8 KiB
- references/usd-structure-assessment/references/factory-level-structuring.md24.0 KiB
- references/usd-structure-assessment/references/instancing-readiness/README.md8.5 KiB
- references/usd-structure-assessment/references/instancing-readiness/references/instancing-guide.md45.0 KiB
- references/usd-structure-assessment/references/instancing-readiness/references/instancing-tradeoffs.md5.6 KiB
- references/usd-structure-assessment/references/layer-health.md3.1 KiB
- references/usd-structure-assessment/references/optimization-tradeoffs.md8.6 KiB
- references/usd-structure-assessment/references/restructure-decision/README.md16.5 KiB
- references/usd-structure-assessment/references/usd-edit-target-planner/README.md6.3 KiB
- references/usd-structure-assessment/references/usd-edit-target-planner/references/output-saving.md2.1 KiB
- references/usd-structure-assessment/references/usd-edit-target-planner/references/variants-payloads.md4.2 KiB
- references/usd-structure-assessment/references/usd-hierarchy-dedupe-candidates/README.md5.7 KiB
- references/usd-structure-assessment/references/usd-hierarchy-dedupe-candidates/references/instance-candidate-finder-spec.md34.2 KiB
- references/usd-structure-assessment/scripts/audit-report.schema.json1.9 KiB
- references/usd-structure-assessment/scripts/optimization-plan.schema.json1.5 KiB
- references/usd-structure-assessment/scripts/usd-structure-assessment-report.schema.json9.5 KiB
- references/usd-validation-runner/README.md13.0 KiB
- references/usd-validation-runner/references/so-interpret-validators/README.md3.6 KiB
- references/usd-validation-runner/references/so-interpret-validators/references/follow-up-queries.md4.6 KiB
- references/usd-validation-runner/references/so-interpret-validators/references/rule-reference.md8.2 KiB
- references/usd-validation-runner/references/so-run-validators/README.md2.9 KiB
- references/usd-validation-runner/references/so-run-validators/references/infrastructure.md1.6 KiB
- references/usd-validation-runner/references/validate-usd-asset-validator.md13.7 KiB
- references/usd-validation-runner/references/validation-scoping.md23.8 KiB
- references/usd-validation-runner/scripts/asset-validator-validation-report.schema.json2.7 KiB
- references/usd-validation-runner/scripts/validation-report.schema.json1009 B
- references/workflow.md24.5 KiB
- skill-card.md2.5 KiB
- skill.oms.sig39.9 KiB
references/usd-structure-assessment/references/factory-level-structuring.md
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
Factory-Level USD Structuring
Canonical URL: https://docs.omniverse.nvidia.com/vfi/latest/guide/factory-level-structuring.html
If you have network access, read the live URL — it may be more current than this local copy.
Note
This guide presents opinionated recommendations for structuring USD content at factory scale. The patterns described here prioritize scalability, multi-domain reuse, and lifecycle management—requirements common to large industrial digital twins. Individual projects may warrant different approaches based on specific constraints and use cases. Please also read Asset Structure Performance Optimizations and Tradeoffs for more information on structural optimization choices.
This guide builds on OpenUSD fundamentals covered in the OpenUSD Developer certification.
This guide explains how to structure factory-scale USD content so you can scale reuse, maintain clear ownership boundaries, and support downstream simulation workflows. You learn a progressive, seven-step pattern that transforms monolithic exports into modular, instancing-friendly assemblies.
Three Pillars of Factory-Scale USD
Digital twin projects often succeed in pilot phases but encounter challenges at scale. When data arrives from multiple tools, suppliers, and continuous updates, unstructured content becomes ungovernable. Factory-scale USD structuring rests on three fundamental pillars:
Assets
Structuring content as discrete, reusable assets enables lifecycle management—equipment revisions, supplier updates, and engineering changes propagate through the system without forcing full re-export. Assets become the unit of versioning, validation, and optimization. Domain-specific data (physics, semantics, sensors) layers onto assets non-destructively, transforming them into SimReady components.
Aggregation
Assets compose into assemblies—work cells, production lines, and complete factories. Aggregation leverages USD’s composition engine to reference and instance assets without duplication. Aggregates themselves can become assets with their own lifecycles, enabling hierarchical management from individual equipment to entire facilities.
Animation and Simulation
Proper structure enables animation and simulation workflows to interact with digital twin data through clearly defined interfaces. Animation separates from geometry, allowing scenario switching and timeline manipulation. Physics simulators, robotics environments, and AI training pipelines rely on stable prim paths and composition patterns—structure creates the contracts these tools require.
The three pillars: Assets compose into Aggregates and Assemblies, which expose interfaces for Animation and Simulation.
Zooming In: Applying USD Structuring Concepts
The following sections walk through a progressive structuring approach that implements these pillars. Starting from an assumed “monolithic export” (a single USD layer representing an entire factory), each step transforms the content into a composition-driven assembly—built from reusable component assets, shared material libraries, and externalized animation layers.
The target: a structured factory assembly composed from reusable component assets, material libraries, and animation layers.
Diagram Legend: The diagrams in this guide use the following notation for USD composition arcs:
R — Reference
P — Payload
VC — Value Clips (metadata)
L — Sublayer
Step 1: Separate Animation
Animation layered on top of geometry as value clips, enabling reuse and timeline manipulation.
See also
USDA Sample: Animation Sublayer and Clips
The first step is to separate animation from the main stage. Animation should be authored separately from geometry and assembly structure.
Key practices
Value clips — Separate baked animation into value clips.
External authoring — Author animation in external processes and bind at assembly time.
Targeted binding — Apply clips to individual references or payloads rather than the entire stage.
Why It Matters
Scenario switching — Swap clips to visualize different production scenarios without modifying geometry.
Timeline control — Loop, reverse, or time-stretch animations independently of the scene.
Independent optimization — Tune animation and geometry detail levels separately.
Asset replacement — Upgrade assets without re-authoring motion data (provided hierarchies match).
For more information on animation workflows, see the VFI Animation Workflow and Supporting Scripts section.
Step 2: Identify Asset Boundaries
Component asset referenced into a factory assembly stage.
See also
With animation separated, the next step is identifying where to draw asset boundaries. Assets should align with real-world units that are versioned, sourced, or updated independently.
Key factors for drawing boundaries
Lifecycle and Ownership
Content with different update cycles or ownership should be separate assets. Consider: Who updates this content, and how often?
Equipment
Robots, conveyors, machines, and fixtures typically map to individual component assets. Each can be versioned and replaced without affecting the rest of the factory.
Facility Sections
Work cells, production lines, or building zones can be grouped as assembly assets that reference equipment components.
Shared Resources
Material libraries, animation clips, and sensor configurations are assets in their own right—referenced by multiple equipment or facility assets.
Instancing Potential
Repeated elements (identical robots, racks, fixtures) benefit from being defined as discrete assets that can be instanced. Assets that appear multiple times should share a common definition.
Validation and Optimization Scope
Structure defines the granularity at which validation and optimization can operate. Assets that require independent geometry repair, decimation, or material consolidation should be separated. Once assetized, these operations can run in parallel across the asset library.
Selective Loading
Large facility sections or heavy equipment benefit from payload boundaries that enable selective loading. Content that users may want to load or unload independently should be a separate asset.
Tip
For Pipeline and Converter Developers
Effective structuring begins upstream. Work with content authors to define asset boundaries in the source application—converters cannot infer boundaries that do not exist in the source data.
Converters and export pipelines should preserve metadata that enables downstream structuring—even when full assetization is not performed at conversion time. Useful breadcrumbs include:
Meaningful Kind Hierarchy
Assign USD kind values (component, subcomponent, assembly) to reflect the logical structure of the source data. See Model Hierarchy and Organizing Prim Hierarchy.
Asset Info Attributes
Populate assetInfo with identifiers, version strings, or PLM tracking data that link USD prims back to their source definitions.
Custom Attributes for Unmapped Data
Data that cannot be mapped to existing OpenUSD schemas (part numbers, supplier codes, classification tags) should be authored as custom attributes with clear vendor prefixes (e.g. myCompany:partNumber) rather than discarded.
Deduplication and assetization granularity
When identifying asset boundaries, detect and eliminate duplicate geometry, materials or textures during or after export. Deduplication directly informs the right level of granularity—assets that share identical geometry and materials should reference the same subcomponent rather than carrying redundant copies. This is often the highest-impact cleanup step before instancing can take effect.
This metadata enables automated restructuring tools to identify asset boundaries, match repeated geometry for instancing, and trace content back to authoritative sources.
For more on building export pipelines, see Data Exchange, Conceptual Data Mapping, and the USD Exchange SDK.
Why It Matters
Asset boundaries define the units of change management in your digital twin. Well-drawn boundaries transform a static export into a living asset library that evolves with your facility—enabling independent versioning, parallel team workflows, granular validation, and instancing.
Step 3 (Optional): Interface/Payload Layering
Component asset structure: Robot.inter.usda (interface layer) references Robot.pay.usdc (payload with geometry).
See also
USDA Sample: Asset Interface and Payload
This pattern is optional and is most useful in larger assemblies that benefit from selective loading and stable public composition targets.
Once asset boundaries are identified, assets can be structured with a clear separation between public interface data and heavier content. A component asset is a reusable unit (for example, a robot or conveyor).
Key practices
Interface Layer — Defines the public surface of the asset (
kind,assetInfo,extent hints,variant sets). It remains available when payloads are unloaded.Payload — Contains heavy geometry and internal hierarchy. Enables selective loading.
Granularity tradeoff — Finer asset/layer boundaries can improve lifecycle and selective-loading control, but they can also increase layer count and open/stat latency. For deployment-time tradeoffs, see Asset Structure Performance Optimizations and Tradeoffs.
For detailed guidance, see Asset Interface and Reference/Payload Pattern.
Tip
Pre-structured assets—such as a SimReady Prop asset or an Isaac Sim Robot asset—can be referenced directly at component boundaries without further restructuring.
Why It Matters
Selective loading — Navigate entire facilities while keeping heavy geometry unloaded.
Stable composition targets — Interface provides consistent prim paths even as payload internals evolve.
Memory efficiency — Load only what you need; unload distant assets without losing scene graph presence.
Faster iteration — Modify asset internals without invalidating upstream references.
Step 4: Enable Instancing
Robot component composed from instanced rigid subcomponents (x.usdc, y.usdc, z.usdc) assembled through the payload layer.
See also
USDA Sample: Subcomponent Asset
With assets structured as discrete references, instancing can now be applied. Instancing is a core requirement for scalable factory scenes, but it must be applied with care. For background, see What is Instancing?
In OpenUSD, instances are immutable—attribute opinions (including animation) cannot be applied on prims inside an instance. As a result, instancing granularity must follow opinion authoring granularity.
Key practices
No whole-asset instancing for articulated objects — The entire robot cannot be instanced if its parts need animation.
Instance at rigid-body level — Instance each animatable rigid body (individual links), including geometry and materials.
Reassemble through references — Combine instanced subcomponents into the full component.
Choose internal vs external referencing — External referencing allows for maximum reuse of subcomponents across components, but it can substantially increase layer count. Internal referencing keeps layer count low, but doesn’t facilitate sharing of subcomponents between components.
For implementation details, see Authoring Scene Graph Instancing.
Why It Matters
Memory reduction — Hundreds of identical robots share geometry in GPU memory.
Render performance — Instanced draws are orders of magnitude faster than unique submissions.
Animation compatibility — Instancing at rigid-body level preserves joint animation while sharing geometry.
Consistent updates — Fix a mesh defect one time, and every instance reflects the change.
Step 5: Organize Materials into Libraries
Canonical material libraries referenced and instanced across factory components.
See also
Materials should be treated as reusable assets in the same way as geometry.
Key practices
Shared libraries — Define canonical materials in shared material libraries.
Interface exposure — Lift shader attributes into material interfaces.
Reference, do not duplicate — Reference and instance materials rather than duplicating them.
Binding with geometry — Let material bindings travel with subcomponents where appropriate.
Why It Matters
Consistency — All “safety yellow” surfaces match across equipment from different suppliers.
Efficient updates — Adjust a prototype one time, and the change propagates everywhere.
Reduced shader compilation — Shared materials compile one time, improving load times.
Design iteration — Swap material libraries without touching asset files.
Step 6: Layer Domain-Specific Data
Domain-specific layers (here: material specialization) applied as edit layers on top of structured assets.
See also
USDA Sample: Domain-Specific Layering
Well-structured assets enable downstream workstreams to layer domain-specific data through USD composition—without modifying source assets.
Key practices
Dedicated layers per domain — Each team authors in their own layer file.
Target stable prim paths — Layer onto interface prims that will not change as payloads evolve.
Non-destructive composition — Override attributes, and do not modify source assets.
Common examples include material specialization, physics properties, sensor definitions, and semantic labels.
Tip
This layering step is where structured assets become simulation-ready. By adding physics properties, semantic labels, and sensor definitions, assets meet SimReady specifications.
Why It Matters
Parallel team workflows — Simulation, perception, and visualization teams work independently.
Non-destructive iteration — Experiment without risk to base geometry.
Clear ownership — Each layer has a responsible team; changes are traceable.
SimReady transformation — Progressively enrich assets to meet simulation requirements.
Step 7: Object Handling
Object handling structure: Objects.usda contains the Point Instancer referencing Object.inter.usda (interface) which payloads Object.pay.usdc (prototype geometry). Animation is driven through value clips (clip.usd).
See also
USDA Sample: Point Instancer (Object Handling)
Object handling—also called movable objects or material flow—addresses how production parts move through a factory over time. OpenUSD has no native mechanism for dynamic re-parenting, making this a data modeling challenge.
Why It Matters
Object handling is often what stakeholders want to see first—products moving through the line proves the digital twin is alive. Point Instancers handle millions of products with minimal overhead, can be driven by simulation or recorded data, and decouple flow animation from equipment assets.
Point Instancers for Object Handling
A factory may handle thousands or millions of identical objects simultaneously. In OpenUSD, this repetition is modeled most effectively with Point Instancers.
Recommendation: Represent large populations of movable products with Point Instancers and drive motion over time, rather than duplicating product prims, swapping visibility, or attempting to dynamically restructure the prim hierarchy.
A Point Instancer is a USD prim that efficiently renders many copies of prototype geometry at different positions, orientations, and scales. Instead of creating thousands of individual prims, a single Point Instancer holds arrays of transforms and references one or more prototype prims. The renderer draws the prototype at each transform location, achieving massive scene populations with minimal scene graph overhead. Transforms can be animated per-frame, enabling object handling visualization without hierarchy changes. For implementation details, see Authoring Point Instancing.
Key Attributes
Positions, Orientations, Scales
Arrays with one entry per instance slot, time-sampled to animate movement. Products flow through the factory as these values change each frame.
InvisibleIds
Array of instance indices hidden at each frame. This handles products entering and exiting the scene.
Instance Pooling
The number of instance slots can be less than the total number of products over time. When one product exits and another enters nearby, they share the same slot—reducing instance count while maintaining visual continuity.
Alternative Approaches
Different scenarios call for different representations.
Physics Joints and Constraints
Use when the carried/attached relationship must be physically simulated (gripping with contact constraints, physically meaningful coupling). Tradeoff: heavier runtime semantics, not appropriate for millions of kinematically moving flow items.
Referenced Prims
Use when each movable object needs richer authored structure, individual identity, or unique overrides (annotations, per-object variations). Tradeoff: for high counts, becomes expensive (scene graph size, load time, memory). Handoff logic may tempt fragile re-parenting or visibility tricks.
Common Pitfalls
Warning
Over-Structuring Beyond Useful Granularity
Very fine-grained structure increases the number of layer files and references to resolve, which can hurt startup latency. Fine-grained authoring structure is valuable for lifecycle management but may require a packaging step to consolidate layers for runtime. See Asset Structure Performance Optimizations and Tradeoffs for that packaging step.
Treating Instancing as Optional Optimization
At factory scale, repetition dominates scene size. Design instancing into asset structure from the start rather than attempting to add it later.
Expecting Instancing Without Composition Boundaries
OpenUSD instancing requires composition arcs. First create repeatable references and payloads through modular asset structure, then apply instancing at those boundaries.
Discovering Instance Immutability Too Late
Descendants of instanced prims become read-only. Choose instance boundaries based on where edits (animation) must land. When edits target sub-parts, instance at deeper granularity or use refinement patterns.
Mapping CAD Structure Directly to Instance Boundaries
USD instancing differs from CAD instancing. Instancing an entire articulated asset blocks edits to joints, visibility, or annotations. Instance rigid subcomponents and reassemble through references.
Baking Animation Into the Main Stage
Coupling motion with structure amplifies edit targeting problems. Externalize time-varying data into clips and layers, binding through composition at valid authoring targets.
Choose Suitable USD Formats
USDZ packaging and ASCII for USD data with large arrays kills performance. Use binary USD files for layers with geometry and other “heavy data”. ASCII layers are acceptable for sparse layers such as asset interfaces. For extra performance benefits, use the corresponding USD file extension over the generic .usd extension as this will save an extra file “stat” by USD before layers are opened for composition.
Expecting Exporters to Produce Structured USD
Exporters may produce output that does not map to factory scale structuring requirements. Plan for a shared cleanup stage (validation, optimization, restructuring).
More fundamentally, assetization must begin upstream—in the source application—not just at export time. If the source tool does not distinguish assets from arbitrary geometry groups, the exporter cannot infer asset boundaries. Work with content authors to define assets in the source environment, then ensure the export pipeline preserves those definitions.
Duplicating Materials at Scale
Authoring materials per mesh or per instance creates massive material counts. Canonicalize materials into libraries and reference them as reusable assets.
Duplicating Product Assets for Object Handling
Creating multiple copies of the same part and switching visibility to fake movement. This approach does not scale and creates maintenance burden. Use Point Instancers instead.
Conclusion
You have applied a factory-scale USD structuring pattern that separates animation, defines asset boundaries, enables instancing, and supports layered simulation workflows. This structure helps you scale updates and performance without sacrificing maintainability.
Downloadable sample assets that conform to this guide are planned. For now, the USDA snippets in VFI Asset Structure Examples serve as the reference implementation.
For concrete layer snippets that map to each step, see VFI Asset Structure Examples. For deployment-time packaging tradeoffs, see Asset Structure Performance Optimizations and Tradeoffs.
Requirements and compatibility
Written for: OpenAI Codex
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
The author says: Orchestrator skill. Downstream phases may require Kit, Scene Optimizer, Asset Validator, USD Python, writable output paths, and omniverse:// authentication selected by setup-usd-performance-tuning.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA Omniverse
- Publisher
- OpenAI (Official)
- Distributed by
- OpenAI
- Source
- openai/plugins · plugins/nvidia/skills/omniverse-usd-performance-tuning · commit d420d13
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (written by AutoGineer)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA Omniverse or OpenAI.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download omniverse-usd-performance-tuning.zip