applied · Level 3
Inspect an OpenUSD scene before physics simulation
Inspect hierarchy, metrics, collision and material evidence with an original CPU OpenUSD laboratory.

Your next step
Start this course online
Register your start, then work through the lessons and exercises at your own pace. You can download the PDF separately. Where a scored exam is available, you will find it after the lessons.
Register or resume your course
Start with the essentials
The short answer
Inspect the composed OpenUSD stage rather than trusting a rendered image or one source file. Check authored units, inherited transforms, collision APIs, mass, bound physics materials and dependencies against a stated project contract. This original CPU lab uses the actual OpenUSD SDK for static inspection; it does not run a physics solver or award NVIDIA readiness approval.
What you will learn
- Inspect a composed OpenUSD hierarchy and distinguish prim types, API schemas and source layers.
- Check authored scene metrics and composed transforms against a physical-size requirement.
- Distinguish visible geometry, collision shapes and rigid-body participation before simulation.
- Inspect explicit mass and bound physics-material properties without inferring them from appearance.
- Find unresolved asset dependencies and review a narrow AI-assisted scene edit.
- Create a reproducible static-inspection record and state what still requires engine testing.
Who it is for
Python beginners moving into technical scene workflows, digital-twin builders and developers reviewing AI-assisted OpenUSD edits.
Before you start
- Read a small Python program, run a command and recognise JSON objects.
- Understand basic 3D axes and multiplication; no prior OpenUSD project, GPU, model account or renderer is needed.
- Use the supplied original local fixtures; this is not a sandbox for arbitrary untrusted USD assets.
Run the synthetic exercise
Download the exercise source, tests and instructions (ZIP)
No real records, external service or model is used by this exercise. Extract the ZIP into a fresh folder, read README.md and follow its local test instructions. Complete WORKSHEET.md before consulting ANSWER-KEY.md.
Commissioned for MICKAI Training Academy and drafted with AI assistance. Independent teaching, assessment and release reviews must be recorded for each exact edition. Local files do not establish current course, exam or certificate availability.
Learn in your browser · Chapter 01 of 06
Read the scene that is actually composed
Begin with a small original asset and ask what the composed stage actually contains. No GPU, rendering tool or model account is required.
An OpenUSD stage is the composed scene view, not merely the text in one file. Open the stage and inspect its prim hierarchy. In this lab, ready-candidate.usda references accessory.usda, so the marker appears under /World/Attachment even though its original definition lives in a different layer. [S1]
Use complete prim paths when identifying a finding. Shape alone is ambiguous if several branches contain a prim with that name. The project expects the moving crate body at /World/Crate and its cube at /World/Crate/Shape. A path tells the reviewer which composed object the report describes.
The default prim is an asset entry point, not a command to simulate everything below it. Our project contract expects /World as that entry point. A different valid default may serve another asset, so report a project mismatch rather than claiming that every other default prim is invalid USD. [S1]
A prim type and applied API schemas answer different questions. Cube describes geometry; PhysicsCollisionAPI adds collision-related properties. Inspect both the type and applied APIs instead of treating a Cube label as evidence that physics participation has been configured. The inspector uses IsA and HasAPI for those distinct checks. [S2]
A successful open and traversal show the composed objects currently available to that stage. They do not prove every possible variant, unloaded payload, time sample or custom resolver configuration has been checked. Our fixture path uses ordinary local references at default time; keep that limited scope in the result.
Preserve supplied source assets. The inspector reads them and returns a report without saving an edited stage. If a repair is needed, propose a separate candidate or reviewed override rather than silently modifying the source that produced the earlier evidence. Retain before-and-after identifiers so another person can trace the change.
The exercise scene is deliberately small: one crate, one floor, a material, a PhysicsScene and a local referenced marker. It is original teaching data, not a model of a real factory or a validated product. The marker is decorative; the crate and floor are the task-relevant collision objects.
Try it yourself · Activity 01
15 minDraw the composed hierarchy
Inspect ready-candidate.usda and accessory.usda, then predict where the marker will appear in the composed stage.
- Write complete paths for the body, shape, material and referenced marker.
- Explain why the root text is not the whole composed result.
- Run the inspector or compare your drawing with the answer key.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
The crate body is /World/Crate, the cube /World/Crate/Shape, material /World/Looks/Surface and marker /World/Attachment/Marker. The local reference composes the marker into the referencing branch.
from pxr import Usd
s = Usd.Stage.Open("fixtures/ready-candidate.usda")
for prim in s.Traverse():
print(prim.GetPath(), prim.GetTypeName(), prim.GetAppliedSchemas())Learn in your browser · Chapter 02 of 06
Check scale, axis and inherited transforms
Scene metrics and inherited transforms can turn plausible-looking numbers into a physically different object. Inspect the result before correcting it.
Check whether metres-per-unit was authored as well as reading its value. OpenUSD returns 0.01 when that metadata is absent. The project requires an explicit value of 1.0, so a missing declaration is a finding even if an application supplies a fallback. A fallback is not evidence of the author intended unit. [S3]
Convert a fully transformed world-space length using the stage metric. In the ready fixture, the crate measures about 0.4 scene units and the metric is 1 metre per unit, giving about 0.4 metre. At 0.01 metre per unit the same world length would describe about 0.004 metre. [S3]
Ancestor transforms can change a child shape size without changing its local size attribute. The scaled-parent fixture keeps cube size at 0.4 but applies scale 100 on the crate parent. Its world dimension is therefore about 40 metres with this fixture metric, violating the project requirement. Inspect composed transforms, not just the child field. [S4]
The project explicitly uses Z as its up axis. Setting an up-axis label describes a convention; it does not rotate already authored geometry to fit that label. When combining differently oriented assets, review their actual transforms and the intended conversion rather than fixing orientation by changing metadata alone. [S5]
Transform operation order matters. Translating then scaling and scaling then translating can produce different world placement. Inspect xformOpOrder and the composed result when an AI edit moves an object unexpectedly. A list containing the same operations is not sufficient evidence that the resulting placement stayed the same. [S6]
The inspector constructs a fresh transform cache for each inspection. A reused XformCache does not automatically invalidate when stage values change, so clear or replace it before trusting post-edit results. Otherwise an apparently unchanged world position may be a stale computed value rather than proof that the edit had no effect. [S4]
Use tolerances suited to the measurement. The project allows an absolute 0.001 metre difference around each 0.4 metre crate dimension, accommodating small floating-point representation differences. It does not round 40 metres to the expected result. This tolerance is an exercise contract, not a universal engineering acceptance limit.
Try it yourself · Activity 02
15 minPredict physical dimensions
Predict the ready, missing-units and scaled-parent dimensions before running the inspector.
- Separate local size from ancestor scale.
- Apply metres-per-unit to the transformed world length.
- Explain the difference between a fallback and an authored metric.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
Ready is about 0.4 metre per axis. Missing units falls back to 0.01 and produces about 0.004 metre, while also failing explicit-unit authorship. Scaled parent produces about 40 metres. The tolerance accepts floating-point noise, not those scale errors.
from pxr import Usd, UsdGeom
s = Usd.Stage.Open("fixtures/ready-candidate.usda")
print(UsdGeom.StageHasAuthoredMetersPerUnit(s))
print(UsdGeom.GetStageMetersPerUnit(s))
print(UsdGeom.GetStageUpAxis(s))Learn in your browser · Chapter 03 of 06
Separate appearance from collision and body behaviour
Appearance, contact geometry and body motion are related but separate parts of scene description. The fixture makes those differences inspectable.
A visible object is not automatically a collider. The visual-only fixture retains the Cube and its size but removes PhysicsCollisionAPI. The scene can still describe visible geometry while failing the project collision check. Adding lights, textures or a more realistic render would not repair that missing API. [S7]
The crate Xform carries PhysicsRigidBodyAPI and the child cube carries PhysicsCollisionAPI. The first identifies the body intended to move as a unit; the second identifies collision-related shape behaviour. A collider without a rigid-body ancestor can represent static geometry such as a floor. Do not add body motion simply because an object needs contact. [S8]
Applied schema presence and enablement are separate observations. A shape may carry PhysicsCollisionAPI while physics:collisionEnabled is false. The project checks both. The API label alone is insufficient to conclude that the intended collision is enabled in the scene description. The chosen engine must still support and consume that description. [S7]
A simple proxy may represent collision more usefully than a detailed visual mesh. Its shape must still preserve task-relevant openings and contacts. For an open crate, a single filled box would erase its interior; for this solid teaching cube a box representation is appropriate. This choice is about task geometry, not visual polish.
Keep the floor static in this exercise: it has collision properties and no rigid-body API. Adding a rigid body to both objects would change the intended setup, not merely improve completeness. The reviewer must understand which objects should move before deciding whether another body API is an appropriate repair. [S8]
The PhysicsScene prim supplies scene-level physics description. Its existence is a useful structural check, not a report that a solver has run or that objects settle correctly. Our CPU inspector confirms the expected prim type without advancing time, computing contact forces or evaluating a robot controller. [S8]
The project linter is intentionally narrow. It checks the named crate collision and a scene prim, but it is not a comprehensive scan of every collider, contact filter, mesh approximation or engine extension. A passing report must state those omissions. Use an engine-specific test plan for the next gate rather than treating this fixture contract as universal readiness.
Try it yourself · Activity 03
15 minExplain a visual-only failure
Compare ready-candidate and visual-only without changing either supplied file.
- Find the relevant schema difference.
- State which object should be dynamic and which static.
- List one engine behaviour the CPU report does not test.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
The cube in visual-only lacks PhysicsCollisionAPI. Crate is the dynamic body and floor is static collision geometry. The CPU report does not establish contact response, settling, penetration or solver behaviour.
Learn in your browser · Chapter 04 of 06
Inspect mass and the bound physics material
A physically plausible scene needs more than a geometry label. Trace mass and material values to the object that will use them.
The lab requires a finite positive explicit crate mass and explicitly authored kilograms-per-unit. Its ready fixture uses mass 2.0 with one kilogram per mass unit. Rejecting the negative-mass fixture is our project rule. Do not infer the mass from how heavy the crate looks in a render or assume that an absent explicit mass always invalidates every USD asset. [S9]
Mass and density are not interchangeable fields. In USD Physics, a positive, non-zero explicit mass takes precedence over density on the same object; zero mass is ignored and permits density-based calculation; density-derived mass also depends on the interpreted collision volume. Recording a density value without checking which mass definition applies can give an incorrect account of the actual scene description. [S9]
A material used for appearance need not provide physics material properties. Inspect PhysicsMaterialAPI and the material bound for physics purpose. A gold-looking surface or a shader roughness setting does not establish friction or restitution. The inspector resolves the binding and then checks the material API. [S10]
A material can exist in the scene without being bound to the crate. The unbound-material fixture keeps Surface but removes its direct physics binding from the shape. Its existence in the hierarchy cannot prove that the crate uses it. Resolve the applicable bound material instead of finding any suitably named material. [S11]
Our project requires finite non-negative friction values and restitution between zero and one. The invalid-material fixture has restitution 1.2, so it fails that stated range. These numeric checks screen the authored fixture; they do not establish experimentally measured friction or predict how a particular engine combines two contacting materials.
Record the evidence behind a material value. A measured coefficient, a supplier value and an invented teaching value have different status. The lab coefficients are fictional teaching choices, not measurements of wood or metal. Do not export them as a validated library of real materials simply because their values pass a numeric range check.
Several schema getters can return fallback values when a property is not explicitly authored. Decide which fields your project requires to be explicit, and inspect authored opinions for those fields. A non-empty returned value does not by itself prove that someone measured, reviewed or intentionally supplied that value. [S2]
Try it yourself · Activity 04
15 minTrace a material to its user
Inspect unbound-material and invalid-material. Explain why they fail for different reasons.
- Find whether a physics-purpose binding resolves.
- Inspect the bound API and numeric values if it does.
- Distinguish a fictional coefficient from a measurement.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
Unbound material retains the material prim but has no physics binding on the crate, causing PHYSICS_MATERIAL. Invalid material remains bound but its restitution is 1.2, causing MATERIAL_RANGE under this project contract. Neither teaches measured coefficients of a real material.
Learn in your browser · Chapter 05 of 06
Resolve dependencies and review AI edits
A file is not necessarily a complete package. Keep dependencies, sources and AI-proposed changes visible to the reviewer.
A USD file can depend on other layers and assets. Package and inspect the dependency set, not just the root file. In this lab, accessory.usda is required for the composed marker. A root file that opens with a missing reference warning can still produce an incomplete stage, so opening alone is insufficient. [S12]
The inspector calls ComputeAllDependencies to report resolved layers, non-layer assets and unresolved paths. The missing-dependency fixture deliberately references absent.usda and must produce an unresolved finding. It is an expected negative fixture, not a reason to delete that report or silently replace the reference with an unrelated asset. [S12]
Use the supplied original local fixtures, not arbitrary downloaded USD files. Asset resolvers, plug-ins and dependencies can change what opening an asset accesses. This exercise is not a security sandbox or a scanner for hostile assets. Do not attach network resolvers, credentials or untrusted plug-ins merely to complete the lab.
Ask an AI assistant for a narrow proposed difference, such as restoring the crate collision API in a separate candidate. Review the actual changed fields before executing generated code. A request to make it SimReady is too vague to establish which contract, asset version or evidence the assistant should preserve.
Do not repair one finding by hiding its test. Deleting the scaled-parent check makes the report quieter while leaving the scale error intact. Preserve the expected result, make the intended asset change, reopen it and rerun the full suite. The negative fixtures help demonstrate that the checker can still notice the defect.
Keep the original composition relationship when comparing a repaired candidate. Flattening can be useful for a particular delivery, but it changes the representation and may remove the layer relationship a reviewer needs to inspect. Record any such transformation explicitly and keep the source package and provenance available. [S1]
Try it yourself · Activity 05
15 minReview a proposed AI repair
An assistant proposes deleting the dependency check and changing the parent scale. Write a review response before applying anything.
- Identify the intended fault and the unrelated edit.
- Preserve source files and test expectations.
- Specify a narrow candidate and the evidence required afterwards.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
Reject removal of the dependency check. Request a separate candidate containing only the intended asset correction, explain why parent scale needs changing if relevant, preserve the negative fixture, and reopen/rerun all checks against unchanged expectations.
Learn in your browser · Chapter 06 of 06
Build evidence for the next validation gate
Finish with useful evidence and a bounded claim. The practical exercise is ungraded and this training is educational and non-accredited.
The executable route performs actual OpenUSD static inspection through pxr, not a handwritten USDA string search. Opening, composing, retrieving applied schemas, resolving a physics material and computing world bounds are SDK operations. It still does not execute a physics solver; name that boundary precisely in the evidence record.
The ready candidate should pass the selected project checks, and each flawed fixture should fail its corresponding check. A suite that rejects every file does not demonstrate a useful inspection process. Pair positive and negative fixtures and assert both the decision and the expected finding code rather than merely counting warning messages.
Preserve the SDK version, project-check version, root and dependency digests, fixture names and findings. The report identifies the actual bytes and environment inspected. A digest can show consistency with a reference, but cannot establish physical accuracy, author identity or lawful ownership of an asset.
A static pass is an invitation to the next test, not certification. The next owner must choose an engine, inspect collision behaviour and run an appropriate physics rehearsal. NVIDIA uses SimReady in its learning material, but this original exercise is not its validator or certification process and supplies no NVIDIA approval. [S13]
Keep authored, independently reviewed, runtime-checked and publicly released status distinct. This candidate has an actual CPU SDK inspection route; it still needs independent course/bank review, artwork, workbook/browser checks and release integration. The knowledge exam does not score the practical exercise or certify a real digital twin.
The scored final sitting contains twenty knowledge questions. Seventeen correct answers pass the strictly-above-eighty-percent rule; sixteen do not. MICKAI educational completion is non-accredited and does not establish professional competence, NVIDIA affiliation, simulation safety or learner identity.
Try it yourself · Activity 06
15 minWrite a readiness handover
Prepare a short handover with observed results, exact limits and the next validation owner.
- Include package and dependency digests and SDK version.
- State positive and expected-negative fixture outcomes.
- Name the remaining engine-specific rehearsal and independent review.
What is demonstrated by this observation, and what would still need to be tested elsewhere?
Worked answer
Record actual OpenUSD static-inspection results and input digests, identify each expected finding code, and state that no solver, NVIDIA validator, browser or PDF was run. Assign engine-specific rehearsal and independent course/exam review before any release claim.
# Run with the isolated environment described in README.md.
python inspect_scene.py ready-candidate
python inspect_scene.py visual-only
# The second command intentionally exits 1 with COLLISION_API.
python -m unittest -v test_inspector.pyKeep learning
The complete workbook
Use tiny original USDA assets and Python to find errors that appearance alone can hide. Predict each finding, run real OpenUSD static queries and explain the evidence before proposing a narrow AI-assisted repair. This educational, non-accredited course keeps static inspection separate from engine-specific simulation and professional assurance.
- 01Read the scene that is actually composedRead here · 1 exercise
Begin with a small original asset and ask what the composed stage actually contains. No GPU, rendering tool or model account is required.
- 02Check scale, axis and inherited transformsRead here · 1 exercise
Scene metrics and inherited transforms can turn plausible-looking numbers into a physically different object. Inspect the result before correcting it.
- 03Separate appearance from collision and body behaviourRead here · 1 exercise
Appearance, contact geometry and body motion are related but separate parts of scene description. The fixture makes those differences inspectable.
- 04Inspect mass and the bound physics materialRead here · 1 exercise
A physically plausible scene needs more than a geometry label. Trace mass and material values to the object that will use them.
- 05Resolve dependencies and review AI editsRead here · 1 exercise
A file is not necessarily a complete package. Keep dependencies, sources and AI-proposed changes visible to the reviewer.
- 06Build evidence for the next validation gateRead here · 1 exercise
Finish with useful evidence and a bounded claim. The practical exercise is ungraded and this training is educational and non-accredited.
Also inside: a 8-point checklist, a glossary of 12 terms and 10 questions and answers to test yourself. 6 hands-on exercises, each with a worked answer at the back where the workbook gives one.
The PDF is free. We ask for your name and email before downloading. Read the privacy notice at the download form. Free to download and use for personal learning, study groups and inside your own team. Please do not resell the workbooks or republish them as your own. Link people to trust-agent.ai instead.
Get your free PDF workbook
Enter your name and email, then download the complete workbook. This form also works without JavaScript.
Test yourself
Questions and answers
Does the lab run a real OpenUSD SDK?
Yes. It uses pxr from the official usd-core package to open and compose original assets and query schemas, metadata, transforms, bindings and dependencies. It does not run a solver.
Can I complete it without a GPU?
Yes. The exercised static queries run on the CPU. A separate intended-engine simulation may have different hardware requirements.
Why does an unauthored unit declaration fail?
The project requires an explicit metre metric. OpenUSD supplies a 0.01 fallback when metres-per-unit is absent, but that is not an authored project decision.
Why can a local cube size be misleading?
Parent scale and other transforms affect world size. Inspect the composed result and then apply the stage metric.
Does changing upAxis rotate the asset?
No. It describes the convention. Review geometry and transforms when converting between conventions.
Does a visible cube automatically collide?
No. The visual-only fixture retains the cube but removes its collision API. Appearance and collision description are different observations.
Why inspect a material binding?
A material can exist without being used by the crate. Resolve the relevant physics-purpose binding, then inspect that material and its API.
Does the passing fixture prove physical accuracy?
No. It passes selected static project checks at default time. Measured properties, engine support and dynamic behaviour still need separate evidence.
Is this NVIDIA SimReady certification?
No. It is original MICKAI educational training, not a vendor validator, certification or affiliation claim.
What does the certificate assess?
The scored exam assesses knowledge and reasoning. The CPU exercise and written activities are ungraded and do not establish practical competence or simulation safety.
Write as you go
My notes
Use this scratchpad for your own notes, working or answers as you read. Notes are saved in this browser on this device. Downloading makes a local copy; it does not send your notes to Mickai.
Learn → Practise → Demonstrate
Ready to put it into practice?
Take the scored exam when you feel ready. You do not need to download the workbook first. A score strictly above 80% earns a named, dated Mickai certificate with a verification page.
Take the official examYour name and email are collected at exam start. Certificates record an assessment result, not an accredited qualification or verified identity.
Learn the language
Key terms
- Stage
- The composed view of scene description produced from a root layer and its composition dependencies.
- Prim
- A persistent scenegraph object identified by a path in the stage.
- Layer
- A unit of authored scene description that contributes opinions to composition.
- Applied API schema
- A structured set of properties applied to a prim in addition to its typed schema.
- World transform
- The composed transformation placing a prim in world space, including relevant ancestors.
- Metres per unit
- The stage metric converting a fully transformed scene length to metres.
6 of the workbook's 12 terms. The complete glossary is in the workbook.
Follow the evidence
Sources and checks
Facts last checked: .
Examples in this workbook were run on: Python 3.12.10 on Windows x86-64; isolated official usd-core 26.11, Usd.GetVersion() 0.26.11; original CPU fixtures and tests. No physics solver or renderer. (2026-10-26).
These workbooks use AI assistance. See how the workbooks are made.
- UsdStage class referenceOpenUSD
- UsdPrim class referenceOpenUSD
- Encoding Stage Linear UnitsOpenUSD
- UsdGeomXformCache class referenceOpenUSD
- Encoding Stage UpAxisOpenUSD
- UsdGeomXformable class referenceOpenUSD
- UsdPhysicsCollisionAPI class referenceOpenUSD
- USD Physics schemaOpenUSD
- UsdPhysicsMassAPI class referenceOpenUSD
- UsdPhysicsMaterialAPI class referenceOpenUSD
- UsdShadeMaterialBindingAPI class referenceOpenUSD
- Dependency utilitiesOpenUSD
- Physical AI Learning hub, checked 26 October 2026NVIDIA
Created by Micky Irons with the Mickai team. Published by Mickai LTD. Last updated 26 October 2026.
NextKeep going
Where to go next

Recommended for you
Deploy AI agents without losing control
Plan least-privilege access, prohibitions, approval thresholds and a checked log for AI agents. Exercises distinguish written plans from implemented controls.

Recommended for you
Threat-model an agent and its tool boundary
Map an agent tool boundary and test a local gateway for identity, ownership, exact-action approval, expiry, replay and stale writes using fictional notes.

Recommended for you
Prompt injection: threat analysis and defensive testing
Learn why prompt injection happens, analyse the harm it can do, and measure which defences work with a harmless offline Python lab that uses fake canary secrets.