OpenUSD Exchange SDK Changelog#

3.0.0#

Core#

Features#

  • Added USD 26.08 support & made it the new default flavor

  • Added Python 3.13 support & made Python 3.12 the new default

  • Added OpenPBR Material authoring via MaterialX

    • definePbrMaterial and defineGlassPbrMaterial author a dual context Material, driving an OpenPBR shader for the mtlx render context and a UsdPreviewSurface shader for the universal render context, both from a shared Material Interface

    • addColorTextureToPbrMaterial, addNormalTextureToPbrMaterial, addOrmTextureToPbrMaterial, addRoughnessTextureToPbrMaterial, addMetallicTextureToPbrMaterial, addOpacityTextureToPbrMaterial, and addEmissiveTextureToPbrMaterial author both shader networks in one call

    • addEmissiveColorToPbrMaterial authors emissiveColor alongside the OpenPBR emissive luminance

    • addPrimvarShaderToPbrMaterial connects a MaterialX primvar reader to an OpenPBR surface input

      • Unlike the texture functions, it only affects the mtlx render context. Use addPrimvarShaderToPreviewMaterial to drive the same primvar into the universal render context

    • computeEffectiveMtlxSurfaceShader is the MaterialX counterpart to computeEffectivePreviewSurfaceShader

    • The authored networks are MaterialX 1.39 compatible & each Material records its version via MaterialXConfigAPI

  • Added defineGlassPreviewMaterial for Preview Surface only glass, with color, index of refraction, roughness, and opacity

  • Added setEffectiveAttributeValue to author a value on a defined attribute only when it differs from the schema fallback

    • This enables sparse authoring of layers that only contain opinions differing from schema defaults

    • It is especially useful with codeless schemas, which do not provide generated accessors or TfToken constants for attribute names

  • Added setEffectiveDisplayName and adopted the UI Hints display name introduced in OpenUSD 25.11

    • All display name functions now read and author both uiHints:displayName and the original displayName field, so the resulting files behave consistently in every supported OpenUSD runtime

  • Added more primvar authoring & inspection utilities

    • Use PrimvarData::createPrimvar to create & author a primvar from existing PrimvarData in one call

    • Use createConstantPrimvar or setConstantPrimvar as a shortcut for single scalar values

    • Use PrimvarData::hasUnindexedValues to detect values which are never referenced by the indices

  • Added an import time warning when a second OpenUSD is installed alongside usd-exchange

    • The usd-core and usd-exchange wheels both provide the pxr modules at the same paths, so package managers report success while leaving an environment that mixes two OpenUSD builds

    • The warning names whichever distribution supplied the duplicate modules, as that is the one to remove

Fixes#

  • Fixed getLocalTransform to maintain orientation during the internal calculation

  • Changed color space conversion to use GfColor under the hood

  • Stopped connecting the displacement terminal of Preview Materials

    • Displacement was never driven by our Preview Surface networks & the unused terminal caused Hydra to ingest the wrong shader graph when an OpenPBR displacement terminal was also present

  • Fixed the public headers to compile against OpenUSD builds that use a custom namespace

  • Fixed default arguments for several python bindings to match the C++ signatures

    • definePhysicsRevoluteJoint, definePhysicsPrismaticJoint, definePhysicsSphericalJoint, alignPhysicsJoint, and connectPhysicsJoint now default axis to (1, 0, 0)

    • definePlane, defineSphere, defineCube, defineCone, defineCylinder, and defineCapsule now default their dimensions and axis

Breaking Changes#

  • Dropped USD 25.08, 25.02, 24.11, 24.08, and 24.05 support

    • The supported flavors are now 26.08 (default), 25.11, and 25.05

    • This removes the last of the boost based flavors, all supported flavors use pxr_python

  • The USD 25.05 flavor now uses oneTBB, so all supported flavors are consistent

    • Applications which link this flavor must migrate from the legacy TBB, as the two cannot coexist in one process

  • Changed definePolyMesh to emit a TF_RUNTIME_ERROR when indexed topology leaves points, normals, uvs, displayColor, or displayOpacity unused

    • This performs verification equivalent to the Validator’s UnusedMeshTopologyChecker

    • The signature is unchanged, but call sites which previously authored these meshes will now fail & need to correct their topology

  • Changed defineUnrestrictedSubsets to require elementType and familyName, and to reject the materialBind family

    • v2.3.0 defaulted them to face and materialBind, but that family must be a partition or non-overlapping, so the defaults authored invalid data

    • Pass an empty token for subsets that belong to no family, or use definePartitionedSubsets or defineNonOverlappingSubsets to bind materials

  • Removed ValidChildNameCache, which has been deprecated since v1.1.0

    • Use NameCache instead

  • Deprecated addDiffuseTextureToPreviewMaterial in favor of addColorTextureToPreviewMaterial

    • Both author a Shader named “ColorTexture”, and a Material Interface input of the same name, where the deprecated function previously authored “DiffuseTexture”, so existing call sites produce different prim & property names

Pybind#

Features#

  • Added pybind11 interoperability for Gf.Vec2f

Breaking Changes#

  • Removed the boost::python fallback from usdex/pybind/BindingUtils.h, as all supported flavors use pxr_python

    • The USDEX_BOOST_PYTHON_NAMESPACE macro no longer exists, use PXR_BOOST_PYTHON_NAMESPACE directly

RTX#

Features#

  • Added a roughness argument to all defineGlassMaterial signatures

    • It is exposed on the Material Interface & drives both OmniGlass frosting_roughness and the Preview Surface roughness

  • Added addColorTextureToPbrMaterial

Fixes#

  • Fixed the symbols exported by usdex.rtx

    • from usdex.rtx import * previously raised an AttributeError

Breaking Changes#

  • Deprecated addDiffuseTextureToPbrMaterial in favor of addColorTextureToPbrMaterial

    • The Material Interface input is named “ColorTexture” rather than “DiffuseTexture”

  • Renamed the Material Interface color input from “diffuseColor” to “color”

    • Both definePbrMaterial and defineGlassMaterial author inputs:color, so stronger layers & path based tools which target inputs:diffuseColor must be updated

  • Changed defineGlassMaterial to author “opacity” and “roughness” on the Material Interface, defaulting to 0.2 and 0.02 respectively

    • v2.3.0 authored an opacity of 0.0 directly on the Preview Surface shader & no roughness at all, so existing calls will render differently

  • Changed defineGlassMaterial to accept an indexOfRefraction above 4.0, which is now only a softMax limit metadata hint

  • Changed addEmissiveColorToPbrMaterial to reject color components above 1.0

    • v2.3.0 accepted any positive value, so existing calls which passed a color brighter than white will now fail

    • Use the intensity argument, which remains unbounded, to drive the emission strength

  • Changed addEmissiveColorToPbrMaterial to reject OmniGlass materials, as OmniGlass does not support the OmniPBR emissive inputs

    • v2.3.0 only required an MDL shader, so existing calls on glass materials authored inputs that OmniGlass ignored & will now fail instead

Test#

Features#

  • Added rules for the native UsdValidation rules that usd-validation-nvidia does not adapt yet, so assertIsValidUsd runs them

    • Each is skipped once usd-validation-nvidia adapts it, so a newer release supersedes ours rather than reporting the same issue twice

Breaking Changes#

  • Replaced Omni Asset Validator with the usd-validation-nvidia package from PyPI

    • usdex.test now uses usd_validation_nvidia, which is where ValidationEngine, IssuePredicates, and IssuesList come from

    • pip install usd-exchange[test] and install_usdex --install-test both install the version this SDK was tested against

    • The omni_asset_validate CLI is replaced by nvidia_usd_validate

  • The native OpenUSD validators are now registered & will run during assertIsValidUsd

    • usd-validation-nvidia adapts OpenUSD’s own UsdValidation registry, so assets which previously passed may report new issues

    • Similarly, some diagnostics are now emitted more than once, as the native validators re-compose the stage

Dev Tools#

Features#

  • Replaced Premake with CMake

    • A single CMakeLists.txt serves both the internal flavor matrix and external source builds, so there is one consistent build definition

      • repo build configures & drives it for a given flavor, while external consumers can configure it directly with a system CMake

    • The packages now ship a relocatable find_package(usd-exchange) config, so downstream C++ projects can consume the binaries directly

  • Added a repo fetch_deps tool to pull packman dependencies without a build, for re-use in downstream tooling

  • Modernized the wheel build using uv & hatchling

    • The libraries and bindings are stripped before packaging, which significantly reduces the wheel size

    • The plugInfo.json files are patched to account for the hashed library names produced by auditwheel

  • Expanded the OpenUSD plugins installed by default

    • Added sdr, usdMedia, usdMtlx, usdProc, usdRender, usdSkel, and usdVol, along with usdLod and usdProfiles on USD 26.08 and newer

    • usdMtlx resolves the MaterialX shader definitions & usdex_core links it to author OpenPBR networks, so it and the MaterialX libraries are required in every flavor

    • The plugin set is now identical for modular and monolithic flavors, only the backing libraries differ

  • Added the native OpenUSD validator plugins to the --install-test group

    • usdValidation, usdGeomValidators, usdPhysicsValidators, usdShadeValidators, usdSkelValidators, and usdUtilsValidators install for every supported flavor, while usdLuxValidators requires USD 26.08 or newer

    • These back the validators that usd-validation-nvidia adapts, so they are not installed for runtime-only deployments

  • Relaxed the wheel’s test extra to accept usd-validation-nvidia minor & patch updates, pinning only the major version

    • Users can adopt a newer validator release without waiting for a matching usd-exchange release

Fixes#

  • Fixed lazy USD plugin loading in the Windows wheels

    • Exposing the bundled usd_exchange.libs directory via PXR_USD_WINDOWS_DLL_PATH was enough for plugin discovery, but not for resolving the dependent DLLs during a lazy Plug.Load()

    • The generated pxr/__init__.py now derives that directory from __file__ at import time & prepends it to PATH, so no build machine paths are baked into the wheel

    • The wheel import check asserts that usdMtlx and usdShaders load through pxr.Plug from the installed wheel, to catch regressions and build tree leakage

  • Fixed the Linux wheels to include the native OpenUSD validator plugins

    • They have no python bindings, so they were not detected as wheel content until they were staged explicitly for auditwheel to repair

Breaking Changes#

  • Windows DLLs are now installed to bin rather than lib, following the usual convention for Windows runtimes

  • Windows binaries are built with the v143 toolset & require Microsoft Visual Studio 2022 or newer

  • oneTBB and MaterialX are distributed as separate packages from OpenUSD

    • No changes required for install_usdex

    • Packman consumers must gather onetbb and materialx from dev/deps/all-deps.packman.xml as they are no longer bundled with openusd

    • Building from source requires them to be discoverable, either via CMAKE_PREFIX_PATH or the USDEX_TBB_ROOT and USDEX_MATERIALX_ROOT variables

  • The packages no longer ship dev/tools/premake, downstream projects should use CMake and the find_package(usd-exchange) config

  • Removed repo_feature_header as CMake now generates Feature.h

    • repo_version_header still ships, but it is unused & untested now that CMake generates Version.h and version.rc directly

  • Removed repo_usd in favor of in-tree packman templates for each supported flavor

Documentation#

  • Added a Materials and Shaders section to Authoring USD Data, covering OpenPBR via MaterialX, Preview Surface, MDL, and render contexts

  • Updated the Runtime Tree for the new plugin set, the separate oneTBB & MaterialX libraries, and the Windows bin directory

  • Updated Dev Tools & Testing and Debugging for usd-validation-nvidia

  • Re-wrote Native Application Development around CMake and find_package(usd-exchange)

  • Updated Try the Samples for the CMake based build.sh & build.bat scripts, which assemble the runtime via install_usdex

  • Re-wrote the source build section of the Deployment Guide around CMake, covering the USDEX_* configure options, the install step, the usdex::core & usdex::rtx imported targets, and how oneTBB is discovered

  • Updated License Notices for the dependency changes

  • Updated Agent Skills covering OpenPBR materials, sparse attribute authoring with setEffectiveAttributeValue, usd-validation-nvidia, and the CMake based install & build flow

  • Added the usd-core incompatibility & its repair to the wheel and container sections of the Deployment Guide, and to the PyPI project description

Dependencies#

Runtime Deps#

  • OpenUSD 26.08 (default), 25.11, 25.05

  • MaterialX 1.39.5 for USD 26.08, 1.39.3 for USD 25.11 and 25.05

  • oneTBB 2021.13.0

  • usd-validation-nvidia 1.21.0 (test only)

  • Python 3.13.15, 3.12.13 (default), 3.11.15, 3.10.20

  • pybind11 2.11.1

Dev Tools#

  • CMake 4.3.2

  • GCC 11.4.0

  • MSVC 2022-v143

  • doctest 2.4.5

  • cxxopts 2.2.0

  • packman 8.5

  • repo_tools (all matching latest public)

2.3.0#

Core#

Features#

  • Added GeomSubset authoring utilities for assigning materials to subsets of a UsdGeomMesh

    • Use definePartitionedSubsets, defineNonOverlappingSubsets, or defineUnrestrictedSubsets to author subsets, then use bindMaterialSubsets to assign each a material

  • Added Preview Material utilities for emissive materials

  • Added overloads for defineReference and definePayload which accept a source layer identifier rather than an in-memory UsdPrim

    • Both signatures ensure relative asset paths to valid locations are used whenever possible

  • Added an overload for computeMeshNormals which accepts an existing UsdGeomMesh rather than the individual topology VtArrays

Fixes#

  • Fixed precision issue with computeMeshNormals & improved context of the failure diagnostic messages

RTX#

Features#

  • Added RTX/MDL helpers for emissive PBR materials

Fixes#

  • Added missing default IOR value on defineGlassMaterial C++ signature

    • The python signature already had this default

Documentation#

  • Added AGENTS.md and .agents/skills to provide coding assistants / agents with comprehensive authoring guidance when using OpenUSD Exchange SDK

Dependencies#

Runtime Deps#

  • OpenUSD 25.11, 25.08, 25.05 (default) 25.02, 24.11, 24.08, 24.05

  • Omni Asset Validator 1.15.1

  • Python 3.12.12, 3.11.14, 3.10.19 (default)

  • pybind 2.11.1

Dev Tools#

  • packman 7.35

  • repo_tools (all matching OpenUSD Exchange SDK v2.2.2)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

2.2.2#

Test#

Fixes#

  • Improve user facing message for TestCase.assertIsValidUsd and TestCase.assertIsInvalidUsd

2.2.1#

Core#

Fixes#

  • Set the wrapS and wrapT property of Preview Material textures to “repeat” by default

Documentation#

  • Add hwloc to license notice for oneTBB flavors

Dev Tools#

Fixes#

  • Updated install_usdex and the wheels to include the usdShaders plugin so the Sdr registry is functional

    • This inherently activates a previously “hidden” Asset Validator check for Sdr compliance with materials. Some material prims which previously passed validation may start failing. Any materials created via USDEX MaterialAlgo do pass this check by default, so failures should be only for post-processed or bespoke materials.

Dependencies#

Runtime Deps#

  • OpenUSD 25.11, 25.08, 25.05 (default) 25.02, 24.11, 24.08, 24.05

  • Omni Asset Validator 1.11.2

  • Python 3.12.12, 3.11.14, 3.10.19 (default)

  • pybind 2.11.1

Dev Tools#

  • packman 7.34

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

2.2.0#

Core#

Features#

  • Added USD 25.11 support

  • Added defineXform overload which takes GfMatrix (in addition to the existing signature with GfTransform)

  • Added computeMeshNormals for provided mesh topology data

    • It operates on the arrays rather than the authored Prim to allow computing normals before authoring the mesh

    • It uses a vector-area approach for face normals and area-weighted averaging for vertex normals

      • FaceVarying normals are supported via a simplified approach that assigns the same face normal to all corners of each face

    • This function is designed primarily to resolve USD validation issues for meshes that lack normals data

      • For production-quality rendering with sharp edges or complex shading requirements, users should prefer specialized mesh processing libraries which provide full edge connectivity analysis and advanced normal computation algorithms

  • Added getUsdLayerEncoding to help determine the underlying encoding of USD Layers

    • In USD 25.11 the SdfFileFormatPlugins for USDC and USDA were moved from Usd to Sdf & this function avoids the need for pre-compiler macros

Test#

Features#

  • Added assertRotationsAlmostEqual to compare Gf.Rotation, Gf.Quatf, or Gf.Quatd

    • None of these types are handled by Gf.IsClose and the implementation can be ambiguous depending on intent

    • This implementation requires the compared rotations to be of the same class (Gf.Rotation vs Gf.Quatf vs Gf.Quatd), and to define quaternions with the same signs/sense.

Fixes#

  • Deprecated assertMatricesAlmostEqual and assertVecAlmostEqual

    • Users should migrate to Gf.IsClose instead as these types are natively supported

  • Deprecated assertUsdLayerEncoding and getUsdEncoding

    • Use usdex.core.getUsdLayerEncoding instead

Dev Tools#

Features#

  • Added USD 25.11 support via install_usdex

    • USD 25.08+ flavors use oneTBB

    • The python wheels remain on USD 25.05

  • Added UsdUI to the runtime tree, for both install_usdex and python wheels

    • In USD 25.11 it is a strict dependency of UsdUtils

    • This is not linked by the usdex_core shared library, it is only a dependency if using python & UsdUtils

    • This is not a dependency on any GUI. It provides schemas for UI features like NodeGraph color/position

Documentation#

  • Updated USD Authoring Guide with an explanation of the Usd to Sdf API breaks in USD 25.11 and how to query USDC & USDA Version

  • Updated NameAlgo docs to explain that uiHint based displayName introduced in USD 25.11 is ignored for now

  • Fixed Native Application Guide Makefile for aarch64 (Linux ARM) builds

  • Fixed python doc string argument listings for usdex.test

Dependencies#

Runtime Deps#

  • OpenUSD 25.11, 25.08, 25.05 (default) 25.02, 24.11, 24.08, 24.05

  • Omni Asset Validator 1.9.2

  • Python 3.12.12, 3.11.14, 3.10.19 (default)

  • pybind 2.11.1

Dev Tools#

  • packman 7.34

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

2.1.0#

Core#

Features#

  • Added USD 25.08 support

  • Added convenience functions for defining basic Gprims (plane, sphere, cube, cone, cylinder, capsule)

  • Added Kind configuration helpers for Components and Assemblies

  • Added Primvar Shader helpers for preview materials

  • Added connectPhysicsJoint for connecting & re-aligning a pre-defined joint to new bodies

Fixes#

  • Fixed isEditablePrimLocation() to prevent authoring new children under instanced prims or their instance proxy descendants

Pybind#

Features#

  • Added pybind11 interoperability for UsdGeom.Sphere, UsdGeom.Plane, UsdGeom.Cube, UsdGeom.Cone, UsdGeom.Cylinder, UsdGeom.Cylinder_1, UsdGeom.Capsule, and UsdGeom.Capsule_1

Dev Tools#

Features#

  • Added usdex.rtx and UsdSemantics to the usd-exchange wheel

  • Added USD 25.08 support via install_usdex

    • USD 25.08+ flavors use oneTBB

    • The python wheels remain on USD 25.05

  • Added Linux ARM (aarch64) support for USD 25.02+

    • Available via the python wheels and install_usdex

Fixes#

  • Fixed code-signing of Windows wheels

  • Fixed install_usdex bug todo with optional repo_tool dependencies

  • Fixed license documentation for python wheels

Documentation#

  • Fixed Try the Python Samples guide to use a virtual environment & python wheels

Dependencies#

Runtime Deps#

  • OpenUSD 25.08, 25.05 (default) 25.02, 24.11, 24.08, 24.05

  • Omni Asset Validator 1.4.2

  • Python 3.12.12, 3.11.14, 3.10.19 (default)

  • pybind 2.11.1

Dev Tools#

  • packman 7.33

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

2.0.1#

Core#

Fixes#

  • The new usd-exchange Python Wheel which is published to PyPi is locked to our default USD 25.05

    • pip install usd-exchange==2.0.1 strictly uses USD 25.05

    • If other USD flavors are required, please continue to use the install_usdex CLI tool or build from source

    • Rather than depend on the public usd-core wheel, we directly include the subset of OpenUSD libraries required to use usdex.core

      • usd-core is not ABI compatible with our minspec (manylinux_2_35 with modern CXX ABI)

      • In the future, if the public usd-core package becomes more compatible, we may add it as a dependency instead of packaging the OpenUSD libs

      • In the future, if wheel variants become possible on PyPi we may provide all supported flavors of usd-exchange as wheels

2.0.0#

Core#

Features#

  • Added USD 25.05 support

  • Added Python 3.12 support for USD 25.05 and 25.02

  • Added a new usd-exchange Python Wheel which is published to PyPi

    • There is a unique whl specific to each supported USD flavor/version (e.g. usd-exchange==2.0.0+usd2505)

    • Rather than depend on the public usd-core wheel, we directly include the subset of OpenUSD libraries required to use usdex.core

      • usd-core is not ABI compatible with our minspec (manylinux_2_35 with modern CXX ABI)

      • In the future, if the public usd-core package becomes more compatible, we may add it as a dependency instead of packaging the OpenUSD libs

  • Added new AssetStructure module following NVIDIA’s Principles of Scalable Asset Structure

    • Includes new defineScope, defineReference, and definePayload functions for basic asset structure best practices

      • These functions ensure the new prim is defined at an editable location & that relative AssetPaths are used whenever possible

    • Includes more advanced functions for authoring according to the Atomic Component structure from the article

  • Added new PhysicsJointAlgo module to simplify the authoring process

    • Supports authoring for fixed, revolute (hinge), prismatic (slide), and spherical (ball) joints

    • Ensures PhysicsJoints are aligned to both bodies when defined and can also re-align joints using alignPhysicsJoint

    • Abstracts the local joint frame to a form more suitable for a variety of source data specifications

  • Added new PhysicsMaterialAlgo module for defining physical materials, adding physical properties to visual materials, and bindings physical materials to collision geometry

  • Added GfQuatf orientation overloads to XformAlgo to accommodate a [translate, orient, scale] XformOpOrder

  • Added overloads to all XformAlgo functions which accept Xformable schema

    • Allows call sites to replace the annoying setLocalTransform(mesh.GetPrim(), ...) pattern with setLocalTransform(mesh, ...)

  • Added overloads to all define functions which “re-define” an existing Scope, Xform, or untyped Prim to the specified prim type

    • Enables a two phase “define the structure, then fill in the details” pattern

  • Added kilogramsPerUnit to the required Stage Metrics for createStage and configureStage

    • Call sites do not need to change, as it will be authored at a default value of 1 when massUnits is not specified

  • Added getLayerAuthoringMetadata to retrieve previously authored creator metadata

  • Added getDiagnosticLevel for mapping TfDiagnosticType to usdex::core::DiagnosticsLevel

  • Added USDEX_VERSION_STRING macro to Version.h

  • Added buildVersion() and changed behavior of version() (see Breaking Changes below)

Fixes#

  • Prevent bindMaterial() from allowing bindings across instance boundaries

  • All PointsBased define functions now emit TF_RUNTIME_ERROR if the points array is empty

  • Fixed default time bindings in all XformAlgo functions

    • Runtime behavior is unchanged, it is just technically correct in the code now

Breaking Changes#

  • Dropped USD 23.11 support

    • The source code may still compile for this flavor, but it is not being maintained in CI nor distributed as binary artifacts

  • usdex_core now links kind, work, and usdPhysics directly

    • usdPhysics is the only new runtime requirement; the others were indirectly linked previously

  • Replaced the sidecar omni_transcoding library with an internal implementation in usdex_core

    • The USDEX_ENABLE_OMNI_TRANSCODING TfEnvSetting was renamed USDEX_ENABLE_TRANSCODING

    • The behavior is unchanged, but build & distribution scripts need to be updated to avoid linking the other library

    • Note there is not currently any public function to decode an identifier

  • version() now returns the simple semantic USDEX_VERSION_STRING

    • Use the new buildVersion() to retrieve the full USDEX_BUILD_STRING with semver and metadata

  • Changed hasLayerAuthoringMetadata to accept a const SdfLayerHandle rather than a non-const SdfLayerHandle

Pybind#

Features#

  • Added pybind11 interoperability for Gf.Quatd, Gf.Quatf, UsdGeom.Scope, UsdGeom.Xformable, UsdPhysics.Joint, UsdPhysics.FixedJoint, UsdPhysics.RevoluteJoint, UsdPhysics.PrismaticJoint, UsdPhysics.SphericalJoint

RTX#

Features#

  • Added overloads to all define functions which “re-define” an existing Scope, Xform, or untyped Prim to the specified prim type

    • Enables a two phase “define the structure, then fill in the details” pattern

Breaking Changes#

  • usdex_rtx now links usdGeom directly

Test#

Features#

  • usdex.test and omni.asset_validator can be used via the new usd-exchange wheel via the optional “test” extras

    • pip install usd-exchange[test]

  • Added level filtering to ScopedDiagnosticChecker, which can be used to ignore status messages while still asserting warnings and errors

  • Added TestCase.tmpDir() which is useful for structured asset testing

  • The new omni.asset_validator module includes some optional numpy implementations which improve performance if numpy is available in the environment

Fixes#

  • Fixed usdex.test to properly bootstrap omni.asset_validator when used outside of the repo_test harness

  • Fixed TestCase.tmpFile() directory caching issue

Breaking Changes#

  • The new omni.asset_validator module also requires the omni.capabilities module

    • Both modules ship in the same package & install via the optional test group for the usd-exchange wheels and for the install_usdex CLI

  • DefineFunctionTestCase asserts the new “redefine Prim” overloads exist for each define function

  • DefineFunctionTestCase now serializes self.rootLayer rather than using an anonymous layer

  • Inlined compareIdentifiers in usdex/test/FilesystemUtils.h

Dev Tools#

Features#

  • An omni_asset_validate CLI is included when using the usd-exchange wheel with the optional “test” extras (e.g. pip install usd-exchange[test])

  • repo_version_header now outputs a <namespace>_VERSION_STRING macro alongside <namespace>_BUILD_STRING

Fixes#

  • Fixed install_usdex to use a fully qualified packman remote name

  • Fixed repo_version_header to error when macro_namespace is unspecified, to prevent accidental un-namespaced macros

Documentation#

  • Re-wrote the Getting Started guide as a minimal first step using Python Wheels

  • Moved Try the Samples to a dedicated guide which follows the new Getting Started guide

  • Moved Native Application Development to a dedicated guide

  • Moved Testing and Debugging to a dedicated guide

  • Added Python Wheels to the Deployment Guide and changed Docker deployment to use the wheels

  • Added Physics and Asset Structure sections to the USD Authoring Guide

  • Updated Dev Tools to recommend Python Wheels before install_usdex and to expand on Asset Validator use cases in USD Exchange workflows

  • Updated License Notices as all dependencies are now permissive OSS

  • Replaced social media links with more relevant links to GitHub and developer.nvidia.com/usd

Dependencies#

Runtime Deps#

  • OpenUSD 25.05 (default) 25.02, 24.11, 24.08, 24.05

  • Omni Asset Validator 1.1.6

  • Python 3.12.11, 3.11.12, 3.10.18 (default)

  • pybind 2.11.1

Dev Tools#

  • packman 7.31

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

1.2.0#

Core#

Features#

  • Added Python 3.12 support for USD 25.02

Fixes#

  • Prevent bindMaterial() from allowing bindings across instance boundaries

  • All define PointBased functions now emit TF_RUNTIME_ERROR if the points array is empty

Dependencies#

Runtime Deps#

  • OpenUSD 25.02, 24.11, 24.08 (default), 24.05, 23.11

  • Omni Transcoding 1.0.0

  • Omni Asset Validator 0.16.2

  • pybind 2.11.1

Dev Tools#

  • packman 7.31

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

  • Python 3.10.18 (default), 3.11.12, 3.12.11

1.1.0#

OpenUSD Exchange SDK is now provided under the Apache License, Version 2.0

Core#

Features#

  • Added USD 25.02 support

  • Added USD 24.11 support

  • Added NameCache class for generating unique and valid names for UsdPrims and their UsdProperties

    • It can be used in several authoring contexts, with overloads for SdfPath, UsdPrim and SdfPrimSpecHandle

    • Deprecated ValidChildNameCache in favor of NameCache

  • Improved python deprecation warnings

Fixes#

  • Fixed attribute type for UsdUvTexture.inputs:varname

Pybind#

Features#

  • Added support for pxr_python in USD 24.11+

Test#

Fixes#

  • Fixed file extension bug in TestCase.tmpLayer

Documentation#

  • Added pybind section to C++ API docs

  • Updated docs to explain boost::python vs pxr_python

  • Added guidance around SdfLayer encoding & Crate Version portability to the Authoring USD Data Guide

  • Updated all license notices & attributions associated with change to Apache License, Version 2.0

  • Updated Contributing Guide to accept code contributions via Developer Certificate of Origin

  • Added explanation of optional NVIDIA SLA dependencies & how to disable them.

Dependencies#

Runtime Deps#

  • OpenUSD 25.02, 24.11, 24.08 (default), 24.05, 23.11

  • Omni Transcoding 1.0.0

  • Omni Asset Validator 0.16.2

  • pybind 2.11.1

Dev Tools#

  • packman 7.27

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta4

  • GCC 11.4.0

  • MSVC 2019-16.11

  • Python 3.10.16 (default), 3.11.11

1.0.0#

Core#

Features#

  • Added usdex_core shared library and usdex.core python module, which provide higher-level convenience functions on top of lower-level OpenUSD concepts, so developers can quickly adopt OpenUSD best practices when mapping their native data sources to OpenUSD-legible data models.

Pybind#

Features#

  • Added usdex/pybind, a header-only cxx utility to enable seamless flow between pybind11 & boost_python.

  • Added bindings for all USD types exposed in the public API of the usdex_core library

    • Note: A minimal subset of USD types is supported. More types may be added in the future.

RTX#

Features#

  • Added usdex_rtx shared library and usdex.rtx python module, which provide utility functions for creating, editing, and querying UsdShade data models which represent MDL Materials and Shaders for use with the RTX Renderer.

Test#

Features#

  • Added usdex.test, a python module which provides unittest based test utilities for validating in-memory OpenUSD data for consistency and correctness.

  • Added usdex/test, a header-only cxx utility which provides a more minimal set of doctest based test utilities.

Dev Tools#

Features#

  • Added install_usdex tool to download and install precompiled OpenUSD Exchange binaries and all of its runtime dependencies.

    • This tool supports a variety of USD flavors & versions. See repo install_usdex --help or the online docs for details.

  • Vendored omni.asset_validator python module for validating that USD Data output is compliant and conforms to expected standards.

    • This can be installed via repo install_usdex --install-test

Documentation#

  • Added C++ and Python API docs for all public functions and classes.

  • Added Getting Started article to help learn about & integrate the SDK into a project.

  • Added Authoring USD Data article to briefly introduce each group of functions from usdex_core and usdex_rtx.

  • Added Runtime Requirements article to exhaustively list the files required by our runtime.

  • Added Deployment Options article explaining how to approach common deployments (e.g cli, docker container, DCC Plugin)

  • Added License Notices article covering OpenUSD Exchange SDK and all its runtime dependencies.

  • Added Dev Tools article to explain install_usdex and Omni Asset Validator.

Dependencies#

Runtime Deps#

  • OpenUSD 24.08 (default), 24.05, 23.11

  • Omni Transcoding 1.0.0

  • Omni Asset Validator 0.14.2

  • pybind 2.11.1

Dev Tools#

  • packman 7.24.1

  • repo_tools (all matching latest public)

  • doctest 2.4.5

  • cxxopts 2.2.0

  • Premake 5.0.0-beta2

  • GCC 11.4.0

  • MSVC 2019-16.11

  • Python 3.10.15 (default), 3.11.10