Start by cloning the repository:
git clone https://github.com/Autodesk/3dsmax-usd.git
cd 3dsmax-usd
Location | Description |
---|---|
additional_includes | Additional include files required to build the component (from 3ds Max restricted SDK) |
samples | 3dsmax-usd sample plugins exposing its extensibility feature |
src | The source folder for the 3dsmax-usd component |
Multiple dependencies are required in order to build the component. Take the time to first set up your build environment properly.
Before building the project, consult the 3ds Max SDK requirements to ensure you use the recommended version of compiler, operating system and Qt version. You will need to need a copy of the 3ds Max SDK headers and libraries as well (direct link to 3ds Max 2025 and 3ds Max 2024).
For 3ds Max 2025, we suggest to use Microsoft Visual Studio 2019 (Community or better), version 16.10.4, C++ Platform Toolset v142, Windows Platform SDK 10.0.19041.0.
Consult the 3ds Max Python API reference to learn more on the Python version to use.
The Microsoft Visual Studio extension 'Qt VS Tools' must be installed and properly configured with the Qt version used by 3ds Max. Make sure to reference the selected version name in 'Extensions->Qt VS Tools->Qt Versions'.
3ds Max Qt versions can be found on the https://github.com/autodesk-forks/qt5/releases. These versions contain modifications to the Qt codebase which are specific to 3ds Max. No need to build your own version if you are not making changes to Qt.
Fetching all dependencies can be long and tedious. A devkit
archive is made available inside the 3ds Max USD plugin installation. The devkit
includes all the 3ds Max USD SDK files (includes and libs), the samples and the minimal dependencies required to compile the samples (or your extensibility plugin to the 3ds Max USD plugin). Additionally, the devkit
contains additional dependencies required to compile the full 3ds Max USD plugin.
The devkit
can be found in the folder Content
of an installed 3ds Max USD plugin (https://help.autodesk.com/view/3DSMAX/2025/ENU/?guid=GUID-1A33A64B-6829-4806-98FC-9B25E4ED47FC).
The
devkit
archive is available as a separate file for the initial release on GitHub (v0.9.0). It can be found along the tag assets.
The devkit
includes:
- include files and libs for the 3ds Max USD SDK (the core MaxUsd library enabling third-party developers to extend the 3ds Max USD plugin);
- include files and libs for OpenUSD. The DLLs for OpenUSD are to be found in the installed 3ds Max USD plugin. The
Pixar_USD
folder from thedevkit
contains a Python script to copy those missing DLLs; - include files and binaries (libs and dlls) for UFE and USDUFE;
- include files and libs for Python, PySide and Shiboken. The Python and PySide/Shiboken DLLs are not required to get a working 3ds Max USD component as they are provided by 3ds Max already.
The devkit
is required to build the 3ds Max USD plugin as it requires to link to Python, PySide/Shiboken, UFE and USDUFE and those dependencies cannot be recompiled on your own for compatibility reasons with 3ds max. You can either use OpenUSD from the devkit
or rebuild your own as explained in the next section.
- Make sure to extract the
devkit
archive from the 3ds Max USD plugin to your development folder before trying to make use of thedevkit
.- Once extracted, execute the Python script
copy_missing_DLLs_found_in_the_official_installation.py
found in thePixar_USD
folder to recreate a completed OpenUSD prebuilt library.
The devkit
available inside the 3ds Max USD plugin installation provides a prebuild version of OpenUSD. It initially contains only the include files and libs for OpenUSD. The DLLs for OpenUSD are to be found in the installed 3ds Max USD plugin. To get a full and usable library, a Python script, to be found in the Pixar_USD
folder from the devkit
, must be executed to copy those missing DLLs back into the devkit
.
The OpenUSD library can also be rebuilt to fit with your needs. See OpenUSD's official github page for instructions on how to build USD: https://github.com/PixarAnimationStudios/OpenUSD . It is important the recommended OpenUSD
commit ID or tag from the table below is used:
note: the OpenUSD library included in the 3ds Max USD plugin was compiled using those options :
--python --alembic --hdf --materialx
.
USD version used in 3ds Max | USD source for MaxUsd | ||
---|---|---|---|
CommitID/Tags | Officially supported: v21.11, v22.11, v23.11 |
3ds Max 2022 = v21.11 3ds Max 2023 = v21.11 3ds Max 2024 = v22.11 3ds Max 2025 = v23.11 Codename Devi = v24.05 |
v21.11-MaxUsd-Public v22.11-MaxUsd-Public v23.11-MaxUsd-Public |
The OpenUSD component has dependencies that are being reused to build the 3ds Max USD component (boost and TBB are dependencies to the 3ds Max USD) . Their source files are automatically fetched and built by the build script of OpenUSD. The table below reports on the various dependencies being used by the compiled version of OpenUSD found in the 3ds Max USD plugin.
Dependency | 3ds Max 2022 | 3ds Max 2024 | 3ds Max 2024 | 3ds Max 2025 |
---|---|---|---|---|
zlib | 1.2.13 | 1.2.13 | 1.2.13 | 1.2.13 |
boost | 1.70.0 | 1.70.0 | 1.76.0 | 1.81.0 |
TBB | tbb2018 (update 6) | tbb2018 (update 6) | tbb2019 (update 6) | tbb2020.3 |
HDF5 | 1.10.0 (patch 1) | 1.10.0 (patch 1) | 1.10.0 (patch 1) | 1.10.0 (patch 1) |
OpenEXR | 2.3.0 | 2.3.0 | 2.5.2 | 3.1.11 |
Alembic | 1.7.10 | 1.7.10 | 1.7.10 | 1.8.5 |
MaterialX | 1.38.0 | 1.38.0 | 1.38.4 | 1.38.8 |
OpenSubDiv | 3.4.3 | 3.4.3 | 3.5.0 | 3.5.1 |
⚠️ Make sure that you don't have an older USD locations in yourPATH
andPYTHONPATH
environment settings.PATH
andPYTHONPATH
are automatically adjusted inside the project to point to the correct USD location. Seecmake/usd.cmake
.
The Universal Front End (UFE) is a DCC-agnostic component that allows the 3ds Max USD component to browse and edit data in multiple data models. This allows 3ds Max to edit pipeline data such as USD, using UDSUFE. UFE is developed as a separate binary component, and therefore versioned separately from 3ds Max.
The UFE component v5.3.0 is being used. The UFE component was originally developed by the Autodesk Maya team. Reference documentation - https://help.autodesk.com/view/MAYADEV/2025/ENU/?guid=MAYA_API_REF_ufe_ref_index_html
To build the 3ds Max USD component, you will need to use the UFE/USDUFE headers and libraries included in the devkit
.
The project exposes some Python APIs which rely on Qt bindings that are possible through the use of PySide6 (or PySide2) and its specific Qt binding library, Shiboken.
For 3ds Max 2025 and greater, PySide6 6.5.3 is required. For 3ds Max 2022 to 2024, PySide2 5.15.1 is required. PySide2/6 are compiled in a custom way for 3ds Max, as such you can get the pre-built binaries in the devkit
.
The 3ds Max USD Plugin also requires PyOpenGL to make use of the OpenUSD UsdView tool. The module should already present in your Python environment if you have built OpenUSD.
PyOpenGL can be downloaded using Python PIP with the following command: pip install --user PyOpenGL==3.1.5
⚠️ Make sure there are no PySide6/2 Python modules installed in your 'site-packages' folders. You might run into issues otherwise, as it will create conflicts with the 3ds Max packages.
In order to have support for MaterialX materials inside 3ds Max, you will need to hook up the MaterialX plugin for 3ds Max to the project. The MaterialX Plugin is installed alongside USD for Autodesk 3ds Max Plugin. Instructions for installation can be found here: https://help.autodesk.com/view/3DSMAX/2025/ENU/?guid=GUID-1A33A64B-6829-4806-98FC-9B25E4ED47FC
Once the 3ds Max USD plugin is installed, you will find the MaterialX for 3ds Max
plugin located in Contents\MaterialX_plugin
.
Dependency | 3ds Max 2022 | 3ds Max 2023 | 3ds Max 2024 | 3ds Max 2025 | Link |
---|---|---|---|---|---|
spdlog | 1.14.1 | 1.14.1 | 1.14.1 | 1.14.1 | https://github.com/gabime/spdlog |
gtest | 1.8.1 | 1.8.1 | 1.11.0 | 1.11.0 | https://github.com/google/googletest/releases |
The project is only using the headers from this dependency. You can clone the git repository and locate the include folder (the include path is at the root of the repository).
GoogleTest is used to compile and execute the unit tests of the component. The library is not required to run the plugin inside 3ds Max. You need to build the dependency as it is not provided through the devkit
.
A Microsoft Visual Studio solution (usd-component.sln
) for the 3ds Max USD component is provided in the src\
folder. Make sure to fully read this section before trying to compile the component.
The component can be built for multiple 3ds Max yearly releases (referred as a target version). The Visual Studio solution for the component only support one target build at a time.
The solution creates a build\bin\x64\<Hybrid|Release>\usd-component-<target>\
folder in which an Autodesk Application Plugin folder structure is constructed. The build folder can be directly referenced in the ADSK_APPLICATION_PLUGINS
environment variable for 3ds Max to find and load the compiled plugin. More general information on the plugin packaging can found in the 3ds Max Developer Help.
Edit the file src\3dsmax.common.settings.props
to set the target version (i.e. <VersionTarget Condition="'$(VersionTarget)'==''">2025</VersionTarget>
to target 3ds Max 2025).
Make sure the dependencies are prepared before launching the build. The next section is important to read to understand the expected structure.
Before starting to build the plugin, the component's dependencies location must be specified to the component's solution. A few options are possible (only use one of the options):
-
[recommended option] dependencies specific paths can be detailed in the props file
src\DependencyPathOverrides.props
; the paths specified using the props file will override the defaults from the component solution. -
the component's Visual Studio solution expects a default directory structure has described below. If you are building the component for multiple target version, this option might be preferable.
artifacts
folder at the root level- non-target-dependent dependencies can be placed in the
artifacts
folder:artifacts\spdlog
(the include folder forspdlog
is placed inside thisspdlog
folder)
- for each target version, a target folder (i.e. :
artifacts\2025
is needed for the remaining dependencies:artifacts\<target>\<target>_3dsmax-component-materialX
artifacts\<target>\gtest
artifacts\<target>\maxsdk
artifacts\<target>\Pixar_USD
artifacts\<target>\PyOpenGL
artifacts\<target>\PySide6\PySide6
(might bePySide2
depending on the target)artifacts\<target>\PySide6\shiboken6
artifacts\<target>\PySide6\shiboken6_generator
artifacts\<target>\Python
artifacts\<target>\Qt
artifacts\<target>\ufe
artifacts\<target>\UsdUfe
-
a Python build script (
build-scripts\build-solution.py
) is provided to launch the build from a command prompt. If not already described insrc\DependencyPathOverrides.props
or not using the default directory structure, the dependency paths can specified directly at the command prompt. This option might be easier to use if you are scripting your build procedure.
The build script can be used by following these usage rules:
usage: build-solution.py [-h] [-b BUILD] [-v VERSION] [-w] [-r] [-d] [-p] [--maxsdk MAXSDK] [--qtinstall QTINSTALL]
[--materialx MATERIALX] [--googletest GOOGLETEST] [--pyopengl PYOPENGL]
[--maxusddevkit MAXUSDDEVKIT] [--spdlog SPDLOG] [--python PYTHON] [--pyside PYSIDE]
[--shiboken SHIBOKEN] [--ufeinc UFEINC] [--ufelib UFELIB] [--usdufe USDUFE]
[--openusd OPENUSD] [--tbb TBB] [--boostinc BOOSTINC] [--boostlib BOOSTLIB]
[{release,hybrid}] {2022,2023,2024,2025,2026}
positional arguments:
{release,hybrid} The build configuration type.
{2022,2023,2024,2025,2026}
The 3ds Max version to target.
optional arguments:
-h, --help show this help message and exit
-b BUILD, --build BUILD
The build number coming from the pipeline.
-v VERSION, --version VERSION
The 3ds Max USD component version being built.
-w, --warnaserror Enable the compiler to treat all warnings as errors.
-r, --rebuild Rebuild the project.
-d, --distrib Prepare for redistribution. Write component version in source headers.
-p, --package Prepare the package folder after build.
--maxsdk MAXSDK The path location for the 'MaxSDK' folder.
--qtinstall QTINSTALL
The Qt reference version from QtVsTools (aka 'Qt Installation').
--materialx MATERIALX
The path location for the 3ds Max MaterialX material plugin folder.
--googletest GOOGLETEST
The path location for the 'gtest' folder.
--pyopengl PYOPENGL The path location for the 'OpenGL' Python module (PyOpenGL).
--maxusddevkit MAXUSDDEVKIT
The path location for the 3ds Max USD 'devkit'.
--spdlog SPDLOG The path location for 'spdlog' include folder. If not provided, using the path from the
'devkit' if the 'maxusddevkit' option is provided.
--python PYTHON The path location for the 'Python' folder. If not provided, using the path from the 'devkit'
if the 'maxusddevkit' option is provided.
--pyside PYSIDE The path location for the 'PySide6' Python module. If not provided, using the path from the
'devkit' if the 'maxusddevkit' option is provided.
--shiboken SHIBOKEN The path location for the 'shiboken6' Python module. If not provided, using the path from the
'devkit' if the 'maxusddevkit' option is provided.
--ufeinc UFEINC The path location for the 'Ufe' include folder. If not provided, using the path from the
'devkit' if the 'maxusddevkit' option is provided.
--ufelib UFELIB The path location for the 'Ufe' lib folder. If not provided, using the path from the 'devkit'
if the 'maxusddevkit' option is provided.
--usdufe USDUFE The path location for the 'UsdUfe' folder. If not provided, using the path from the 'devkit'
if the 'maxusddevkit' option is provided.
--openusd OPENUSD The path location for the 'OpenUSD' folder. If not provided, using the path from the 'devkit'
if the 'maxusddevkit' option is provided.
--tbb TBB The path location for the 'TBB' folder. If not provided, using the path from the 'OpenUSD' if
the 'openusd' or 'maxusddevkit' option is provided.
--boostinc BOOSTINC The path location for the 'Boost' include folder. If not provided, using the path from the
'OpenUSD' if the 'openusd' or 'maxusddevkit' option is provided.
--boostlib BOOSTLIB The path location for the 'Boost' lib folder. If not provided, using the path from the
'OpenUSD' if the 'openusd' or 'maxusddevkit' option is provided.
For example, if you have:
- cloned the
3dsmax-usd
repository toc:\dev\3dsmax-usd
- you are targeting to build the plugin for 3ds Max 2025
- you have installed the Autodesk USD for 3ds Max 2025 application plugin, by default, to
C:\ProgramData\Autodesk\ApplicationPlugins\USD for 3ds Max 2025
- extracted its
devkit
toc:\dev\3dsmax-usd-devkit-2025
(thedevkit
archive would be found inC:\ProgramData\Autodesk\ApplicationPlugins\USD for 3ds Max 2025\Contents
) - execute the Python script
copy_missing_DLLs_found_in_the_official_installation.py
found in thec:\dev\3dsmax-usd-devkit-2025\Pixar_USD
folder to recreate a completed OpenUSD prebuilt library - installed the 3ds Max 2025 SDK, by default, to
C:\Program Files\Autodesk\3ds Max 2025 SDK
) - Qt v6.5.3 is installed in
C:\Qt\6.5.3\msvc2019_64
- PyOpenGL is installed in
C:\Users\myusername\AppData\Roaming\Python\Python311\site-packages
- GoogleTest is installed in
c:\dev\googletest-distribution
You will have a command-line similar to the one below. Using the devkit
reduces the amount of steps required to get to a state where the component can be built.
c:\dev\3dsmax-usd> \
python build-scripts\build-solution.py \
--maxusddevkit c:\dev\3dsmax-usd-devkit-2025 \
--googletest c:\dev\googletest-distribution \
--qtinstall c:\Qt\6.5.3\msvc2019_64 \
--maxsdk "c:\Program Files\Autodesk\3ds Max 2025 SDK\maxsdk" \
--materialx "c:\ProgramData\Autodesk\ApplicationPlugins\USD for 3ds Max 2025\Contents\MaterialX_plugin" \
--pyopengl C:\Users\myusername\AppData\Roaming\Python\Python311\site-packages -p release 2025