3ds Max 2025 Release Notes
Thank you for installing 3ds Max 2025. Use Autodesk Access (formerly Autodesk Desktop App) to download and install automatically, or access the download from your Autodesk Account.
3ds Max 2025 system requirements
3ds Max 2025 installation and licensing
To learn about the new features and updated workflows, see What's New in 3ds Max 2025. The rest of these release notes describe known limitations and fixes included in this release.
What's Fixed
Note that 3ds Max 2025 also includes fixes delivered in 3ds Max 2024.1 and 2024.2. Check out the following links for more information.
Animation |
---|
When cloning CAT rigs through the SHIFT + drag operation, some objects could be incorrectly named the same as other CAT objects that were duplicated. This has now been resolved. Resolved an issue when trying to clone multiple objects (including CAT objects) that could cause 3ds Max to crash. MAXX-69540 |
Resolved an issue where 3ds Max was not able to Undo the creation of CAT: Cloned Helper objects after a Shift + Move clone operation was performed. MAXX-76095 |
Resolved a crash that could happen when loading a file that has a Wire Parameter attempting to access a CAT object that it is not allowed to talk to. MAXX-75698 |
Resolved an issue where deleting all of the CAT objects in the scene could in some cases cause 3ds Max to crash. MAXX-75922 |
Resolved an issue when the Motion Panel is closed that could cause an edge case that might cause 3ds Max to crash. MAXX-75916 |
Resolved an issue with the CAT bone twist weights where certain values could cause 3ds Max to crash. MAXX-75459 |
Resolved an issue where the List Controller's "List" table was not properly resizing its height to match changes that the user might set with the Windows display resolution scale options. This issue would limit the List table, which displays the various controller entries, to only two or three entries displayed when working with at high scale values of 250%. MAXX-75860 |
Resolved an issue when loading a local clip onto a part of a CAT rig via script (i.e. $.controller.LoadClip filename 0 false ) the keys will appear in the editor but the animation will not update in the viewport until the CAT bones have been adjusted by hand. MAXX-60005 |
Resolved a crash that could occur with the CAT "Load Anim" and "Load Pose" actions. Resolved issues where CAT could disable the viewport of 3ds Max after attempting to load a CAT "Save Anim" into a new ABS layer, this issue would require the animator to restart the application to unlock their viewports. Resolved other areas where CAT could disable the viewport of 3ds Max if a failure was encountered when attempting to Save or Load CAT data or perform some CAT commands. We have restored Maxscript access for CAT's "DigitData" and "CATSpineData2" parameters on CAT Digit and CAT Spine controllers which was has been disabled since 3ds Max 2020. MAXX-67500 |
Resolved Copy/Paste Layer issue with CAT, users will no longer experience stability issues when using this in the Layer Manager. MAXX-75511 |
Resolved an issue where a CAT scene could not load, and instead would crash 3ds Max due to loop references that the scene's animator set in one or more layers. MAXX-75507 |
Color Management |
---|
Modal 8-bit Color Pickers handle correctly low range values. MAXX-76643 |
Improved stability of the Whiteness slider after closing/reopening the Color Picker. MAXX-76264 |
Thumbnails of mtlbases saved in the scene are checked for the correct colorspace/viewtransform. MAXX-73306 |
The Color Picker refreshes the colors when the View Transform changes. MAXX-76173 |
The Lock status of a Custom OCIO file is saved in the scene. It's also preserved when saved as default. MAXX-76058 |
Removed warning message when reloading a scene with custom OCIO file loaded. MAXX-76055 |
Fixed the slowness in loading OSL maps in SME while using v.1 OCIO files. MAXX-75793 |
Drag and drop between Qt and Win32 color swatches inside of 3ds Max now works as expected. Also legacy color swatches do not suspend the creation of animation keys any more, so it's now possible to use color clipboard utility to assist the creation of animated color values. MAXX-72739 |
Core |
---|
Added optional arguments to windows.processPostedMessages . Default values correspond to legacy behavior. Also added additional methods that can be used instead of processPostedMessages in some cases. MAXX-75327 |
When the user runs out of disk space while saving a scene file, they will no longer get the multiple "Can't begin chunk inside Data chunk" dialogs. Now the user will receive a notification that they are out of disc space and will be prompted to save in another location. MAXX-76278 |
Maxscript editor selection highlighting is now case insensitive for Maxscript files. When opening Save dialogs in Maxscript editor, the file filter that corresponds to the file extension of the current file is automatically selected. MAXX-75931 |
Resolved an issue where the user could not add a custom attribute to a node due to faulty dependency loop testing. MAXX-74587 |
Fixed an issue where the Slate Material Editor would become semi-transparent when moved around. MAXX-71341 |
Fixed a crash when opening a 3ds Max scene with isolated objects. MAXX-73312 |
Fix FBX import crash when FBX file contains Arnold materials. MAXX-76053 |
Fixed a scene file loading crash when the user has an xref-ed multi-material, where a sub-material uses a non-key animation controller, and override material is enabled for the multi-material. MAXX-76176 |
General performance improvement - A timer used to update the status of Container objects now performs an action only if Container objects exist. MAXX-75335 |
Material Library instances are now handled in the same manner as most ReferenceTargets in terms of lifetime control, reducing potential for memory leakage. MAXX-72377 |
MAXScript |
---|
Exposed maxops.GlobalScaleTime function to scale time in the same manner as is done via 'Re-scale Time' in Time Configuration dialog. Added == and != support for MAXScript Interval values. MAXX-74879 |
The MAXScript getPoint() and setPoint() functions are now available for CurveControl UI control. MAXX-54634 |
Material Editors |
---|
A wire selected alone without its nodes will no longer be deleted when a compound is created. MAXX-76149 |
Fixed an issue with the color picker where the alpha would reset to a value of 1 when using the HSV sliders. MAXX-75933 |
Fixed Show Shaded Material in Viewport functionality for bitmaps assigned to multiple materials. MAXX-76031 |
Modeling |
---|
Resolved an issue where loading a Boolean modifier scene could cause the memory utilization to increase and cause 3ds Max to crash. MAXX-76060 |
Improved the tooltips for the Retopology modifier to be more expressive and helpful. MAXX-68002 |
Resolved an issue where some modifiers that set the ShowEndResults would cause an unnecessary stack re-evaluation when selected and if they are located at the top of the Stack. MAXX-72483 |
Resolved an issue where when performing poly modeling operations could in some edge cases set some random vertices into a state where they have no local normal, which could affect other poly modeling operations that are dependent upon this data. MAXX-75818 |
Updated the algorithm that is used with the CTRL based point-to-point select for polygons. This update should greatly improve the accuracy of finding a valid polygon loop on models with dense polygon topology. MAXX-75794 |
Resolved a crash that could occur when attempting to create or load a new scene after using the Shape Check utility on a curve that has self-intersections. This crash would occur only if the user did not first exit the Shape Check utility. MAXX-75815 |
Resolved an issue that could cause a crash in some edge cases when performing a Weld, Target Weld, or Clean Edge Removal on meshes without specified Normals on an Editable Poly or Edit Poly modifier MAXX-72658 |
Rendering |
---|
Fixed an issue with vertex paint had incorrect color value processes when working with Color Management. MAXX-76016 |
A Color Management issue where RGB color swatches in various tools lost precision/values for dark colors has been fixed. MAXX-75913 |
SceneConverter |
---|
Fixed the crash produced when converting a Physical material to glTF using the Scene Converter>PhysiclaToGLTF preset. MAXX-75840 |
UI |
---|
Fixed an issue where the Mat/Map browser becomes narrow when collapsing rollout group or after right-click. MAXX-71898 |
Replaced the legacy 'Open from Vault' actionItem with 'Open from Vault'. MAXX-44210 |
UVW |
---|
When using the Unwrap UVW modifier and the Cylinder Mapping gizmo, it was possible for some polygon faces to be incorrectly split along the invisible support edge of the polygon, resulting in UVs that appear incorrect when viewed in the Edit UV window, and making this data more difficult to manipulate/edit. We have updated this mapping method to reduce the chance that polygonal faces will be split this way. MAXX-75422 |
Viewport Transfer |
---|
A material dropped to an object directly from the Material list is rendered correctly in the Viewport in Standard Quality. MAXX-75909 |
Scenes using OSL are now more performant because OSL maps will no longer evaluate if textures are not shown in viewport. MAXX-72722 |
Fixed the incorrect display of the bitmap in the viewport in High Quality when both U and V angles are used at the same time. MAXX-72957 |
Known Issues and workarounds
New Qt surface change behavior |
---|
MAXX-76020 |
With the introduction of Qt's new Rendering Hardware Interface (RHI), the render surface management of the underlying Qt windows has changed.
Developers need to take extra care when embedding/parenting a QWidget that uses RHI for rendering like QWebEngineView or QQuickWidget into the 3dsMax application QMainWindow. The parenting process on the Qt side is now taking the render surface type into account and when a QWidget gets parented it will compare both surface types and convert the parent's top level window surface to match the surface type of the new RHI based child widget. Unfortunately it always does this by destroying and recreating the underlying native platform window, which can be our 3ds Max application window. This will end up in crashing 3ds Max due to its mixed UI frameworks (Win32, .Net, and Qt) which rely on a persistent application HWND for parenting.
Refer also to this Qt bug report for more information.
In case of 3ds Max, the initial surface type of the application's QMainWindow is QSurface::RasterSurface
, whereas for example a QWebEngineView could be on QSurface::OpenGLSurface
or QSurface::Direct3DSurface
. So by parenting the QWebEngineView into the application window, for instance using a QDockWidget, the 3ds Max surface type will be changed to OpenGLSurface/Direct3DSurface, which causes the deletion of 3ds Max native platform window.
Workaround: There are ways to workaround this issue. The child needs to have its own QWindow in the background, separated from the QWindow of the top level parent widget where the child is supposed to get embedded. By keeping the QWindow for the child, it will still render in its own surface and not in the parent one, thus no conversion of the top level window's surface type will happen.
In practice this can be achieved by using QWindow based Qt UI components, as far as available, and embed them via the QWidget container created by the QWidget::createWindowContainer()
method into the parent UI.
For QML you can use the QQuickView instead of the QQuickWidget. QQuickView is QWindow based.
auto quickView = new QQuickView();
quickView->setResizeMode(QQuickView::SizeRootObjectToView);
quickView->setSource(QUrl::fromLocalFile("Panel.qml"));
// Create a container widget so that the child's QWindow can be properly embedded into the top level parents QWindow.
QWidget* container = QWidget::createWindowContainer(quickView);
auto dockWidget = new QDockWidget("QQuickView Dock Window", mainWindow);
dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
// Add quickView container widget, which refers to the QWindow we created for the quickView.
dockWidget->setWidget(container);
You can also embed QWidget-based UI like the QWebEngineView into a parent widget hierarchy without changing the top level window's surface type. You just need to force the creation of the actual QWindow for the child widget and then create a second container widget around its QWindow which you then use for the parenting.
auto webView = new QWebEngineView();
webView->load(QUrl("https://qt-project.org/"));
// Force the creation of the QWindow, since QWebEngineView is QWidget based
webView->winId();
// Create a container widget so that the child's QWindow can be properly embedded into the top level parents QWindow.
QWidget* container = QWidget::createWindowContainer(webView->windowHandle());
// Create dock widget for hosting a web view
auto dockWidget = new QDockWidget("WebView DockWidget", mainWindow);
dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
dockWidget->setFloating(true);
// Add webView container widget, which refers to the QWindow we created for the webView.
dockWidget->setWidget(container);