# USD Writer

Universal Scene Description (USD)
File Extension | .usd, .usda
Supported Versions | Any
Supported Platforms |
Tessellation | Supported
B-rep | N/A
PMI | N/A

USD (Universal Scene Description) is an open-source format developed by Pixar for describing and exchanging complex 3D scenes. It supports hierarchical scene structure, geometry, materials, and metadata, and is widely adopted in visual effects, animation, and real-time simulation.

HOOPS Exchange now includes experimental support for exporting CAD data to USD, enabling early-stage interoperability with USD-based pipelines.

## How to Export to USD

Because it’s experimental, a few extra steps are needed to enable USD export.

### 1. Download the Exporter Library

USD export is available via an additional library, which must be integrated into your HOOPS Exchange installation along with its dependencies.

Download it from the Downloads page. Scroll to the Related Technologies section and choose Experimental USD Writer.

After downloading, extract the archive in the same directory where HOOPS Exchange was originally unpacked. This ensures the new libraries are placed in the correct folder structure.

Refer to Package Description for a detailed breakdown of the package contents.

### 2. Enable Experimental Features

To enable experimental functionality, define the macro `A3DAPI_EXPERIMENTAL` in your project. You can add it either as a compiler option or directly in your source code before including the HOOPS Exchange headers:

    #define A3DAPI_EXPERIMENTAL
    #include <A3DSDKIncludes.h>

Ensure this macro is defined in any source file that loads the library or uses the USD exporter.

### 3. Use the Exporter

To export a model to USD format, use the function `A3DAsmModelFileExportToUSDFile()`. Use the format-specific structure `A3DRWParamsExportUSDData` to configure the export process.

    #define A3DAPI_EXPERIMENTAL
    #include <A3DSDKIncludes.h>

    // ...

    A3DRWParamsExportUSDData sParamsExportData = A3D_MAKE_DATA(A3DRWParamsExportUSDData);
    // ... set export parameter options

    A3DAsmModelFileExportToUSDFile(pModelFile, &sParamsExportData, "path/to/file.usd");

## Tessellation

The USD writer supports exporting tessellated geometry.

By default, the tessellation detail level is set to medium via `A3DETessellationLevelOfDetail`. You can adjust this by modifying the `m_eTessellationLevelOfDetail` member in the export parameters.

## Extending the Import Export Sample

The C/C++ Import Export project can be extended to support USD export.

After downloading the writer binaries (see USD writer download section), add the following definition at the top of ImportExport.cpp:

    #define A3DAPI_EXPERIMENTAL

GNU/Linux users must also set the `LD_LIBRARY_PATH` environment variable to point to the experimental_usd_writer/ directory.

To export, choose an output file with a .usd or .usda extension — the sample will then perform the export automatically.

To explore the sample further, see our tutorial: file-to-file translation.

## Supported Platforms

As an experimental feature, the USD writer currently supports a subset of our regular Runtime Platform Support (C, C++):

Platform | Architecture | Runtime Environment | Compiler
--- | --- | --- | ---
Windows | x64 | Windows 10 | MSVC v142
Linux | x64 | glibc 2.35 libstdc++.so.6.0 | GCC 11.4.0

## Package Description

Here’s a breakdown of the extracted package contents:

Folder/File Description |
--- | ---
readme_experimental_USDwriter.txt | How-to file
bin/win64_v142/experimental_usd_writer/ | Binaries folder
bin/win64_v142/experimental_usd_writer/experimental_wusd.dll | Main library file
bin/win64_v142/experimental_usd_writer/*.dll | Third-party library files
bin/win64_v142/experimental_usd_writer/usd/ | Third-party runtime resources
bin/win64_v142/experimental_usd_writer/Third-Party_Licenses/ | Third-party license files

The USD writer libraries must be located under //bin/win64_v142/experimental_usd_writer. This folder should reside alongside your HOOPS Exchange binaries, including A3DLIBS.dll.

Folder/File Description |
--- | ---
readme_experimental_USDwriter.txt | How-to file
bin/linux64/experimental_usd_writer/ | Binaries folder
bin/linux64/experimental_usd_writer/libexperimental_wusd.so | Main library file
bin/linux64/experimental_usd_writer/*.so | Third-party library files
bin/linux64/experimental_usd_writer/usd/ | Third-party runtime resources
bin/linux64/experimental_usd_writer/Third-Party_Licenses/ | Third-party license files

The library files should be placed under //bin/linux64/experimental_usd_writer. This folder must exist within your HOOPS Exchange installation alongside libA3DLIBS.so.

### Dependencies

Legal information regarding third-party libraries is available in the bin/linux64/experimental_usd_writer/Third-Party_Licenses/ directory.

Conversation saved
HOOPSY BETA

### Hello! I'm HOOPSY

Your multilingual generative AI assistant for documentation. Ask me anything about HOOPS Exchange in your own language, or choose a sample question below to start a conversation:

What is HOOPS Exchange?
What are the latest release notes for HOOPS Exchange?
How do I start evaluating HOOPS Exchange?
How do I write my first sample application?
How can I get assistance?

HOOPSY may store conversations according to OpenAI's policy. Responses may not always be accurate.

HOOPSY is thinking...