What Was New in MAXScript in 3ds Max 2021 and Updates

This topic will give you a quick overview of the MAXScript language changes and improvements in 3ds Max 2021 and updates. For details on each feature, please follow the links to the respective documentation pages.

New in MAXScript in 3ds Max 2021.3 Update

Startup Script Loading The way Startup Scripts are loaded has changed. Scripts that have the hidden or system file attribute set, or are in a hidden or system folder (other than %LocalAppData% and %ProgramData%) are no longer loaded on startup.
MAXScript Heap Size The initial MAXScript heap size allocation is increased from 15 MB to 100 MB, which can improve performance when the Ribbon is open. See Memory Allocation and Garbage Collection for more information.
Viewport Bloom Settings Bloom settings are now exposed and documented in the ViewportViewSettingImpl interface.
Quicksilver Renderer New exposure for Reflection and Bloom settings are covered under Quicksilver_Hardware_Renderer.
Subdivide Modifiers The Subdivide modifier has three new remeshing algorithms, and this functionality is now exposed in the Subdivide:Modifier and subdivideSpacewarpModifier classes.
PBR Importer New PBRImporter interface exposes some of the functionality of the PBR Importer feature.
Callback information The callbacks.show() function now indicates when a callback definition is loaded from a scene file with SceneFileEmebedded:true|false

New in MAXScript in 3ds Max 2021.2 Update

Spline Chamfer Modifier The Spline_Chamfer : Modifier exposes the properties of the new spline chamfer modifier feature.
Script execution function The executeScriptFile() function provides a way to execute a script file and return any error messages it might generate
Previously Undocumented Items autosave.BailoutEnabled() and autosave.autoBackupNow() are now documented in Interface: autosave.
• Several missing properties, including ShadedRenderMode, are now documented under Interface: NitrousGraphicsManager. The topic has also been reorganized to reflect the updated UI.

New in MAXScript in 3ds Max 2021.1 Update

Callback Management

New functions allow you to enable or disable some callback types:

Bake To Texture

The BakeToTexture : UtilityPlugin interface has new members to support additional features:

  • alwaysSkipExistingFiles
  • getOutputTo()/ setOutputTo()
  • getNewMaterial()
  • getTargetMaterialSlots()
  • clearShellKeepBaked() / clearShellKeepOriginal()

The BakeToTextureMap interface has new members:

  • UDIMEnabled
  • UDIMFilePattern
  • getTargetMapSlot()
  • setTargetMapSlot()

The callback that can be registered with BakeToTexture.bake() is now called after every successful baked file is saved, now that the Bake To Texture feature supports formats with multiple files (such as animated maps or UDIM tiles).

Default Parameter Management

A new interface allows you to define defaults for parameters: DefaultParamInterface.

Controlling UI Focus and Foreground

The setFocus() function can now take a rollout's HWND property.

A new setForegroundWindow() function is similar to setFocus(), but also brings the specified UI component to the foreground.

New Assert Functions

New assert functions are provided for debugging: assert_array_equal(), assert_matchpattern(), and assert_bitarray_equal(). The new assert_float_equal() is identical to assert_float(), but has a more meaningful name.

New createPreview() option

The createPreview() function has a new useMPCamEffect option that enables the display of multipass camera effects in the animation preview.

New FBX Importer option

The new "PostSamplingKeyReducer" option for the FBX Importer controls whether animation keys are reduced post-conversion.

BigMatrix row values

The value of a BigMatrix row can now be set directly to an array of float values.

Previously Undocumented Items

The registerDisplayFilterCallback() function is now documented under Adding Selection and Display Filters

These functions for displaying registered callbacks are now documented:

  • showregisteredTimeCallbacks()
  • showregisteredSelectFilterCallbacks()
  • showregisteredDisplayFilterCallbacks()
  • showregisteredRedrawViewsCallbacks()

The dspSpaceWarps option for the createPreview() function is now documented.

New in MAXScript in 3ds Max 2021

Bake to Texture Support

The BakeToTexture : UtilityClass exposes the functionality of the new Bake to Texture feature.

MAXScript Editor Python Support

When in Python language mode, the MAXScript Editor now inserts four spaces instead of a tab character when you type Tab. This complies with PEP-0008

Plugin Package Manager Additions

The PluginPackageManager interface has new methods to return information about Scene Converter, OSL, and AMG paths:

  • GetSceneConverterFoldersCount()
  • GetSceneConverterFolderFullPath()
  • GetOSLFoldersCount()
  • GetOSLFolderFullPath()
  • GetAMGFoldersCount()
  • GetAMGFolderFullPath()

Callbacks Changes

The callbacks.addScript() method can now take a function as the second parameter. Previously this had to be a String, StringStream, or filename.

Weighted Normals Modifier

The new Weighted Normals modifier is exposed in the Weighted_Normals : Modifier class.

ATF-based Importers

Autodesk Translation Framework (ATF) based importer plug-ins have some extra features exposed to MAXScript, .ImportHiddenObjects and .PreserveLayers. This applies to:

Scripted Plug-ins

Scripted plug-in parameters can now take an optional localizedName string, which is used (instead of the parameter name) when the parameter is displayed on a UI.

Rollout Visibility

Rollouts have a new visible property that controls whether they are visible when displayed in a dialog.

Two new utility functions allow you to convert parameter type name values to their corresponding enum integer representation from the C++ SDK, and vice versa: ParamTypeToTypeName() and TypeNameToParamType().

For Loop Index Variables

The for loop now can take optional index arguments to handle filtered and unfiltered list operation.

SME Material Library Methods

Several new methods have been added to the SME interface to expose functionality for working with material libraries:

  • OpenMtlLib()
  • HasMtlLib()
  • IsMtlLibModified()
  • SaveMtlLib()
  • SaveMtlLibAs()
  • CloseMtlLib()

edit_poly Modifier Chamfer Enhancements

Chamfer improvements to the edit_poly modfier are exposed in new properties:

  • edgeChamferMiteringType (which replaces the now obsolete edgeChamferType and edgeChamferQuadIntersections)
  • chamferVertexDepth
  • chamferVertexSegments
  • chamferVertexSmooth
  • chamferVertexSmoothThreshold
  • chamferVertexSmoothType
  • edgeChamferDepth
  • edgeChamferEndBias
  • edgeChamferMiteringType
  • edgeChamferRadialBias

Max Memory Heap Usage

The new sysinfo.getMAXHeapUsed() function returns the amount of heap memory 3ds Max is using.

Scripted Custom Attribute Loading Callbacks

New functions have been added to the custAttributes struct to help manage callbacks that can now be registered to alter definitions as they are loaded from a scene file:

  • custAttributes.registerDefLoadCallback()
  • custAttributes.unRegisterDefLoadCallback()
  • custAttributes.unRegisterAllDefLoadCallbacks()
  • custAttributes.showregisteredDefLoadCallbacks()

Documentation Changes

The active segment normalized time literal format has not been supported for several releases, and has been removed from the Time Values and Time Literals topics.

Deprecated and Removed Items

The <ViewportViewSettingImpl>.DefaultLightsFollowCamera property is removed from the NitrousGraphicsManager interface.

Previously Undocumented Items

Functions in the custAttributes struct used to manage how scripted custom attribute definitions are managed when there is a conflict with a loaded or merged scene are now documented under Handling Scripted Custom Attribute Definition Conflicts

The dspFrameNums keyword argument has been added to the createPreview() method.