USD File Format Plugins

March 11, 2026 · View on GitHub

FBX SDK Continuous Integration USD Package

USD File Format Plugins

These USD file-format-plugins allow the interchange between Pixar's USD (.usd, .usda, .usdz) and the following file formats, with cross platform support (windows, macos, and linux):

PluginFile FormatExtension
usdfbxAutodesk's FBX.fbx
usdgltfKhronos' glTF.gtlf .glb
usdobjWavefront's obj.obj
usdplyPolygon File Format.ply
usdsbsarSBSAR file format.sbsar
usdspzNiantic Labs SPZ.spz
usdstlSTL file format.stl

Each file format's readme contains what they support.
Supported features legend:
    ✅ Supported
    ⚠️ Supported with known issues
    ❌ Not supported
    ⦸ Not applicable/no support planned

Dependencies

The following tools are needed:

The following dependencies are needed:

DependencyVersionAffectsOptional
Pixar USD23.08-25.11allno
GTest1.11.0all testsyes
Eigen3.4.0usdply, usdspzno
FBX SDK2020.3.7usdfbxno
LibXml22.10.0usdfbxno
Zlib1.2.11usdfbx, usdgltfno
TinyGltf2.8.21usdgltfno
Draco1.56usdgltfyes
Fmt10.1.1usdobjno
FastFloat1.1.2usdobjno
Happlycfa2611usdplyno
Spherical Harmonicsccb6c7fusdply, usdspzno
Spzfd4e2a5usdspzno
Substance9.1.2usdsbsarno

Coding Standards

Linting standards are defined within ./.clang-format. All changes within pull requests are expected to now follow these standards. To ensure this, it is advised setup IDEs with format on save features. Alternatively, formatting can be run on all cpp and header files by running the following bash command:

find . -iname '*.h' -o -iname '*.cpp' | xargs clang-format -i

Build

1. Setup dependencies

  • Install a C/C++ compiler.

  • Install clang-format.

  • Install cmake.

  • Install python and the following pip components: pyside6, pyopengl.

  • Build and install USD entering in a terminal (in windows a x64 Native Tools Command prompt):

    python <USD_SOURCE_PATH>/build_scripts/build_usd.py <USD_INSTALL_PATH> --onetbb --no-examples --draco --openimageio --build-variant release
    

    --no-examples is needed to omit the example plugin usdObj that ships with USD from the install, as it will conflict with our usdObj plugin.

    Add --build-target universal for universal binaries in macos.

    If adding --openimageio you may need these fixes:

    Setup USD environment variables:

    • <USD_INSTALL_PATH>/bin to PATH
    • <USD_INSTALL_PATH>/lib to PATH in windows, or to LD_LIBRARY_PATH in linux, mac
    • <USD_INSTALL_PATH>/lib64 to LD_LIBRARY_PATH in linux
    • <USD_INSTALL_PATH>/lib/python to PYTHONPATH

If USD was built with Python (default behavior with the build script), ensure the environment has access to the Python it was built with. In particular, on Windows, ensure that PATH includes the location of the Python dll used. (Alternatively, the Python dll can also be copied into <USD_INSTALL_PATH>/bin).

In linux you may need these other dependencies:
```
sudo apt update
sudo apt install libgl1-mesa-dev mesa-common-dev
```
  • Install FBX SDK.

  • You can install GTest, ZLIB, TinyGltf, Draco, fmt, FastFloat, Happly and OpenImageIO, or let cmake fetch them in the next steps (except for OpenImageIO). Also, you can leverage the installation of ZLIB, Draco and OpenImageIO included in USD.

  • Substance SDK Integration

    1. Download the SDK: Visit the Adobe Developer Console and log in or create an account if necessary.
    2. Locate the SDK: Use the search bar to find the ‘Adobe Substance 3D Materials SDK’. Version 9.1.2

2. Get it

git clone https://github.com/adobe/USD-Fileformat-plugins

3. Configure, build and install it

To configure, build and install go to the project root folder and, using a multi-configuration backend (MSVC, ...) enter:

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=bin <OPTIONS>
cmake --build   build --config release
cmake --install build --config release

or using a single-configuration backend (Make, ...) enter:

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=bin -DCMAKE_BUILD_TYPE=Release <OPTIONS>
cmake --build   build
cmake --install build

where:

  • <OPTIONS> is a list of extra options, as follows:
OptionDescriptionDefaultAffects
-Dpxr_ROOTPoints to the USD installationemptyall
-DGTest_ROOTPoints to the GTest installationemptyall tests
-DFBXSDK_ROOTPoints to the Fbx installationemptyusdfbx
-Dsubstance_DIRPoints to the Substance SDK installationemptyusdsbsar
-DZLIB_ROOTPoints to the ZLIB installationemptyusdfbx
-DLibXml2_ROOTPoints to the LibXml2 installationemptyusdfbx
-DTinyGLTF_ROOTPoints to the TinyGLTF installationemptyusdgltf
-Ddraco_ROOTPoints to the draco installationemptyusdgltf
-Dfmt_ROOTPoints to the fmt installationemptyusdobj
-DFastFloat_ROOTPoints to the FastFloat installationemptyusdobj
-DHapply_ROOTPoints to the Happly installationemptyusdply
-DUSD_FILEFORMATS_BUILD_TESTSEnables testsONall tests
-DUSD_FILEFORMATS_ENABLE_FBXEnables fbx pluginONusdfbx
-DUSD_FILEFORMATS_ENABLE_GLTFEnables gltf pluginONusdgltf
-DUSD_FILEFORMATS_ENABLE_OBJEnables obj pluginONusdobj
-DUSD_FILEFORMATS_ENABLE_PLYEnables ply pluginONusdply
-DUSD_FILEFORMATS_ENABLE_SPZEnables spz pluginONusdspz
-DUSD_FILEFORMATS_ENABLE_STLEnables stl pluginONusdstl
-DUSD_FILEFORMATS_ENABLE_SBSAREnables sbsar pluginOFFusdsbsar
-DUSD_FILEFORMATS_ENABLE_DRACOEnables draco in usdgltfOFFusdgltf
-DUSD_FILEFORMATS_FORCE_FETCHCONTENTForces FetchContent for various packagesOFFall
-DUSD_FILEFORMATS_FETCH_GTESTForces FetchContent for GTestONall tests
-DUSD_FILEFORMATS_FETCH_TINYGLTFForces FetchContent for TinyGLTFONusdgltf
-DUSD_FILEFORMATS_FETCH_ZLIBForces FetchContent for ZlibOFFusdfbx
-DUSD_FILEFORMATS_FETCH_LIBXML2Forces FetchContent for LibXml2OFFusdfbx
-DUSD_FILEFORMATS_FETCH_HAPPLYForces FetchContent for HapplyONusdply
-DUSD_FILEFORMATS_FETCH_FMTForces FetchContent for FmtONusdobj
-DUSD_FILEFORMATS_FETCH_FASTFLOATForces FetchContent for FastFLoatONusdobj
-DUSD_FILEFORMATS_ENABLE_ASMGenerate a ASM based material network on layerwriteOFF

ZLIB, Draco and OpenImageIO packages are hinted to search into the USD installation by default. Override this by setting their ROOT or their FETCH variables (no fetch for OIIO).

The previous commands will place intermediate files into the folder build and install binaries into the folder bin. Also, make the plugins discoverable by USD to complete installation, by adding the path <INSTALL_PATH>/plugin/usd to the PXR_PLUGINPATH_NAME environment variable (in this example: USD-Fileformat-plugins/bin/plugin/usd).

  • Note when building on Linux: -DUSD_FILEFORMATS_ENABLE_CXX11_ABI=ON

Test (https://github.com/pages/adobe/USD-Fileformat-plugins)

  • Requires USD built with "--openimageio"

For Windows/Mac:

python ./USD/build_scripts/build_usd.py ./usd-install  --build-shared --usd-imaging --tools --generator <GENERATOR> --openimageio --build-variant release

For Linux:

python ./USD/build_scripts/build_usd.py ./usd-install  --use-cxx11-abi=1 --build-shared --usd-imaging --tools --generator <GENERATOR> --openimageio --build-variant release

1. Install pip components

  • Open your terminal and run the following commands to install the required Python packages:
    pip install -r scripts/requirements.txt
    

2. Install Plugins (Environment variables or Copy plugins to USD install)

Environment Variables

For Windows:

set PATH=%PATH%;.\USD-Fileformat-plugins\bin\bin;.\USD-Fileformat-plugins\bin\plugin\usd
set PXR_PLUGINPATH_NAME=%PXR_PLUGINPATH_NAME%;.\USD-Fileformat-plugins\bin\plugin\usd

For Linux

export PATH=$PATH:./USD-Fileformat-plugins/bin/bin:./USD-Fileformat-plugins/bin/plugin/usd
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./USD-Fileformat-plugins/bin/lib:./USD-Fileformat-plugins/bin/lib64
export PXR_PLUGINPATH_NAME=$PXR_PLUGINPATH_NAME:./USD-Fileformat-plugins/bin/plugin/usd

For Mac

export PATH=$PATH:./USD-Fileformat-plugins/bin/bin:./USD-Fileformat-plugins/bin/plugin/usd
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./USD-Fileformat-plugins/bin/lib
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:./USD-Fileformat-plugins/bin/lib
export PXR_PLUGINPATH_NAME=$PXR_PLUGINPATH_NAME:./USD-Fileformat-plugins/bin/plugin/usd

Or Copy plugins:

  • Copy the installed plugins and dependent shared libraries to the specified folder:
    mkdir -p ./LOCAL_USD_INSTALL/plugin/usd
    cp -r ./USD-Fileformat-plugins/bin/plugin/usd/* ./LOCAL_USD_INSTALL/plugin/usd/
    cp ./USD-Fileformat-plugins/bin/bin/* ./LOCAL_USD_INSTALL/plugin/usd/
    

3. Run Tests

  • Dependencies
    pip install -r ../USD-Fileformat-plugins/scripts/requirements.txt
    
  • Use pytest to run the tests:
    pytest ./USD-Fileformat-plugins/test/test.py
    

4. (Optional) Update Tests

  • To generate new baseline data for tests, run the following command:
    python ./USD-Fileformat-plugins/test/test.py --generate_baseline
    

CI Workflow

Our GitHub Actions setup includes two main workflows to support continuous integration.

1. CI Build Workflow

This workflow is triggered by any push or pull request to the main branch and ensures compatibility with Universal Scene Description (USD) versions:

  • Versions Tested: Builds against the oldest (23.08) and newest (25.11) supported USD versions regularly.
  • Weekly Builds: The workflow builds against all supported USD versions to confirm ongoing compatibility.
  • Post-Build Testing: Following the build, each plugin undergoes sanity testing, including loading a cube to check basic functionality.
  • Supported Plugins: Currently supports FBXm GLTF, OBJ, PLY, and STL. Note: SBSAR plugin is not supported due to SDK constraints.
    • Individual plugin build result badges are on their respective README pages.

2. Create USD Release Workflow

This manually triggered workflow involves the following steps:

  • Build Specification: Takes a specific USD version as input, builds USD with OpenImageIO, and then creates a release.
  • Archiving: Compiled USD builds are archived per platform and added as binary data to the release, which keeps the repository's clone size manageable.
  • Environment Setup: After downloading and expanding the release archive, users should configure their environment as follows:
    • In the following steps USD_DIR is the directory where the release archive was expanded.
    • Add USD_DIR\lib and USD_DIR\bin to your PATH in windows, or to LD_LIBRARY_PATH in linux, mac
    • Set PYTHONPATH to USD_DIR\lib\python.
    • Set USD_BUILD_DIR as USD_DIR.

Usage

USD will now be able to work with the supported files, for example:

  • Use the USD tools on fbx:
usdview <fbx>          # Converts FBX to USD
usdcat <fbx>           # Converts FBX to USD
usdcat <usd> -o <fbx>  # Converts USD to FBX
  • Use the C++ USD API:
#include <pxr/usd/usd/stage.h>
UsdStageRefPtr stage = UsdStage::Open("cube.fbx")
stage->Export("cube.usd")
  • Use the Python USD API:
from pxr import Usd
stage = Usd.Stage.Open("cube.fbx")
stage.Export("cube.usd")

Refer to each plugin's README for more details.

Documentation

To generate the documentation go to the project root folder and enter:

doxygen

The resulting documentation will be placed at the docs folder.