What was New in MAXScript in 3ds Max 2014

The following page will give you a quick overview of the MAXScript language changes and improvements in 3ds Max 2014. For details on each feature, please follow the links to the respective documentation pages.

New 3ds Max Features Exposure

Populate Tools

The new Flow : GeometryClass object exposes the Path Flow to MAXScript.

The new IdleAreaObj : GeometryClass object exposes the Idle Area to MAXScript.

The new Interface: pop Core Interface exposes properties and methods related to the simulation and display of characters.

The new Populate : FloatController exposes properties and methods related to the simulation storage and display of characters.

The new PopCharacter : ReferenceTarget represents the Populate characters in the scene, but is largely inaccessible to MAXScript.

Scalable Vector Graphics Texture Map

The new Vector_Map TextureMap provides support for the open .SVG and .SVGZ web format for storing resolution independent vector graphics, as well as Adobe Illustrator .AI files, Adobe .PDF and AutoCAD .PAT files.

The new Vector_Map TextureMap also provides deeper integration with MAXScript by not only allowing the creation of SVG XML files with MAXScript, but by exposing a dedicated mxs token which enables the user to embed MAXScript code directly in the vector graphics source to create advanced effects and even animated maps reacting to scene changes.

The following tutorials - Part 1, Part 2, Part 3 - demonstrate the advanced use of MAXScript and the Vector_Map TextureMap to create a resolution-independent polygon renderer.

New Particle Flow Operators, Interfaces and Modifiers

A large number of new Particle Flow operators, formerly available as 3rd party extensions under the name Particle Flow Tools Box #2 and #3, have been added to 3ds Max 2014.

The Birth_Group operator generates particles from reference objects and can acquire their shapes, materials and mapping.

The BirthGrid operator generates particles and places them in a grid-like structure to fill up the volume of the operator's icon or a reference geometry.

The BirthStream operator generates a stream if non-overlapping particles and defines their position and speed properties.

The Cache_Disk operator records particle states to disk for faster feedback. Some particle properties can be excluded from caching, and extra operators can be called to restore the data.

The Cache_Selective operator records particle states for faster feedback. Some particle properties can be excluded from caching, and extra operators can be called to restore the data.

The Camera_Culling operator reduces geometry load at render time by filtering out all particles outside the camera frustum. It can be used as a Group Selection tool defined by camera view frustum

The Camera_IMBlur operator adjusts particle speed before passing the data for image motion blur. The adjustment takes into account the camera motion.

The Copy_Out test is a simpler and faster version of Spawn where a new particle in the event is cloned and sent to the next event. Number of copies can be adjusted.

Particle Flow mParticles Operators

The mP_Collision test uses any geometry object with PFlow_Collision_Shape world-space modifier as a simulation deflector. The collided particles can be sent to the next event.

The mP_Drag operator decelerates particles by applying friction-like forces based on the linear and angular motion.

The mP_Force operator accepts any force-type particle space warp as a force source. The force is applied to all particles in the current event that are affected by a mP_World operator.

The mP_Glue test binds particles to each other or to deflectors by rigid or flexible breakable connection.

The mP_InterCollision test is used to track collisions between particles as triggers for sending the particles to the next event.

The mP_Shape operator defines the particle shape for collisions.

The mP_Switch operator controls adjustments in a physics simulation.

The mP_World operator defines the global properties of the dynamics simulation. A mP_Worldhelper Helper holds the settings accessed by the mP_World operator.

The mP_Buoyancy operator defines forces for a particle submerged in a liquid medium.

The mP_Solvent operator removes bindings created by mP_Glue.

Particle Flow Interfaces

The PhysXWorld interface is exposed by several mParticles objects.

The profileTools Interface is exposed by several mParticles objects. It provides properties and methods related to profiling the performance of the physical simulation tools.

The pftParticleView Interface provides a method for forcing the update of the Particle View editor.

The MaterialHolder Interface is exposed by the Event class and provides access to the particles' materials.

Particle Flow Advanced Data Manipulation Operators

The Data_Icon operator directly modifies particle channel data by using sub-operators wired in Particle Data View. The operator has visible icon in the viewports.

The Data_Operator operator directly modifies particle channel data by using sub-operators wired in Particle Data View.

The Data_Test directly modifies and checks particle channel data by using sub-operators wired in Particle Data View.

The Test_Icon directly modifies and checks particle channel data by using sub-operators wired in Particle Data View. The test has a visible icon in the viewports.

The PresetOperator loads predefined Data_Operator operators from disk.

The PresetOperIcon loads predefined Data_Icon operators from disk.

The PresetTest loads predefined Data_Test operators from disk.

The PresetTestIcon loads predefined Test_Icon operators from disk.

Particle Flow Advanced Data Manipulation Sub-Operators

The AmountChange sub-operator modifies particle count either by spawning or by deletion.

The colorReferenceTarget sub-operator generates vector data to be used as a color for vertex color mapping.

The Condition sub-operator creates boolean data by testing scalar data.

The Convert sub-operator transforms data type from one format to another.

The Discretizator sub-operator transforms continuous range of values in discrete set.

The geometryReferenceTarget sub-operator acquires properties from reference objects with geometry.

The Icon sub-operator acquires properties from Data operator or test icon.

The Input_Proxy sub-operator copies regular particle properties from proxy particle systems.

The InputCustom sub-operator copies data from a channel created by Output New operator.

The Input_mParticles sub-operator copies simulation-related particle properties.

The InputStandard sub-operator copies regular particle properties such as position, speed, scale etc.

The NotesReferenceTarget sub-operator is non-executable and can be used to place comments in Data View.

The ObjectParameter sub-operator acquires parameter data from a reference object.

The objectReferenceTarget sub-operator acquires properties from reference objects.

The OutputCustom sub-operator transfers calculated data into data channel created by Output New operator.

The Output_mParticles sub-operator transfers calculated data into simulation related particle properties.

The OutputNew sub-operator creates new data channel that can be used by Input Custom and Output Custom.

The OutputStandard sub-operator transfers calculated data into regular particle properties.

The OutputTest sub-operator transfers calculated data to Data Test for particle exit decision.

The Parameter sub-operator defines exposable values for sub-operators.

The Particles sub-operator calculates aggregated properties in relation to other particles.

The PipeReferenceTarget sub-operator combines data from different streams according to conditions and data in a valve stream.

The randomReferenceTarget sub-operator generates scalar and vector random values.

The Scalar sub-operator generates data of a scalar type: integer, real, time and boolean.

The Select_Object sub-operator defines a reference object to derive properties from.

The ShapeControl sub-operator defines particle shape that is based on a reference geometry object. The sub-operator controls parameters and animation of the reference geometry.

The Switch sub-operator works as an animatable relay from several inputs to the output of the same type.

The Vector sub-operator generates data of vector type.

The DataViewGroup helper represents the Data View Group node used to group sub-operators inside the Particle Data View.

Particle Flow Modifiers

The Particle_Face_Creator : modifier uses particle positions to hide and reveal mesh geometry in a natural-looking way.

The Particle_Skinner : modifier allows one or more Particle Flow systems to deform the geometry of the modified object.

The PFlow_Collision_Shape : SpacewarpModifier enables standard mesh objects to participate as particle deflectors in the MassFX simulation.

Perspective Match Utility

The Perspective_Match UtilityPlugin exposes all controls of the new perspective matching tool to MAXScript.

Mesh Inspector

The MeshInspector Interface exposes the new 3ds Max feature which checks and allows the repair of inconsistent mesh data.

Missing Plugins Explorer

The new SceneMissingPlugins Interface lets you access the number, classes and file information and description of missing plugins found in the current scene.

Enhancements to Existing 3ds Max Features

Viewport Access

Several new properties and methods have been added to the existing viewport struct to help with accessing viewports: viewport.activeViewportID , viewport.numViewEx and viewport.activeViewportEx .

The two new viewport struct methods viewport.setCanvasNavigationMode() and viewport.isCanvasNavigationMode() can be used to set and query the Canvas Navigation Mode. When on, only 2D Pan and Zoom can be performed in the viewport, all other navigation operations will be ignored.

The following two existing viewport struct methods now affect all viewports of all view panels and not just the active view panel: viewport.resetAllViews() and viewport.zoomToBounds() .

The new General Event Callbacks notification #viewportSafeFrameToggle will be called when the active viewport's Safe Frame is turned on or off.

Nitrous Properties and Methods

The parameter of the .GetViewportSetting() method in the NitrousGraphicsManager Interface has been changed from 0-based integer to 1-based index to conform to MAXScript conventions.

The new property .BackfaceCullWireframeEnabled in the NitrousGraphicsManager Interface lets you get and set the culling of backfaces in wireframe mode.

The new property .ShadowmapSizeLimit in the NitrousGraphicsManager Interface can be used to set the maximum shadow map size. Default is 512.

The new property .NormalBumpMode in the NitrousGraphicsManager Interface controls the status of the "Normal Bump Mode" radio buttons in the Customize > Preferences > Global dialog. It lets you switch between 3ds Max, Maya and DirectX compatible Normal Bump modes.

The new property .BackgroundProgressiveRenderingEnabled in the NitrousGraphicsManager Interface can be set to True to force Nitrous viewport progressive refinement even when 3ds Max is running in the background.

The new IObject:WorldSettingImpl object returned by the method .GetWorldSetting() of the NitrousGraphicsManager Interface exposes properties controlling the world optimizations of the Nitrous system including node consolidation and instancing toggles and limits.

Slate Material Editor

The new method sme.SetMtlInParamEditor() in the existing sme Interface can be used to set the current Material or Map object displayed in the Slate Material Editor's Parameters panel.

Several new methods have been added to the existing SME NodeView interface to provide access to the node selection and zoom extents / zoom extents selected functionality.

A new .selected property has been added to the existing but previously undocumented SME Node interface.

mental ray Renderer

The new properties .IBLEnable , .IBLQuality and .IBLShadows expose the Image Based Lighting options added to the Global Illumination tab.

The new properties .UnifiedEnable , .UnifiedMaxSamples , .UnifiedMinSamples and .UnifiedQuality expose the Unified Sampling options added to the Sampling Quality tab.

iRay Renderer

The two new properties .architecturalSamplerEnabled and .causticSamplerEnabled expose the new Samplers added to the iRay Renderer.

Bone Change Notification

The General Event Callbacks notification #preNodeBonePropChanged and #postNodeBonePropChanged were broken in previous releases and were not broadcast at all. This has been fixed.

DWF Export Dialog Access

The DWF Export Dialog settings are now exposed to MAXScript via the new DwfExportPreferences Core Interface.

Default Sound Access

A new interface with a single new .Open() method has been added to the Default_Sound:SoundClass (which is not used as default anymore since the addition of the ProSound:SoundClass).

MAXScript Language Improvements

Bitmap Value Gamma Management

The handling of Bitmap Values Gamma settings in MAXScript has been overhauled to fix several long-standing problems. Please see the new Bitmap Gamma and MAXScript topic for details, as well as the modified property and function descriptions in the existing Bitmap Values topic.

Duplicated Struct Members And Functions

Duplicated Member/Function Names are now explicitly disallowed at compile time, but duplicated Function names are still possible to allow for forward declarations.

Time Stamping

The new timeGetTime() function returns the system time since Windows started in milliseconds. Other than timestamp() which wraps around at midnight each day, this value wraps around every 49.71 days.

Scripted Plugin Names

The name: keyword parameter of scripted plugins will now be used only for the creation button or UI entry of the plugin, but the class name will be used to name class instances and the scene nodes. In previous versions, the localizable UI name was used to name the class instances.

Controlling RolloutFloater Visibility

The new .visible property of Rollout Floater can be used to disable the drawing of the floater without losing access to its rollouts. 3ds Max 2014 introduced an automatic off-screen dialog recovery system - if a dialog window is outside the visible desktop area, it will be moved back in view. Setting the .visible property to False can be used in place of sending the RolloutFloater off-screen, a hack sometimes employed in previous versions of 3ds Max to hide rollouts while preserving access to their properties and controls. It can also be used to temporarily hide a Rollout Floater without closing it, or pre-create a Rollout Floater and show/hide it much faster than building it on the fly and closing it again.

Custom User Interface Toolbar Display

The new function cui.showToolbar() in the CUI struct can be used to display a hidden toolbar by name.

Window Position And Size Access

The new methods added to the existing Windows struct`** .

Setting Maximum Number Of Simultaneously Open Files At stdio Level

The new methods systemTools.getmaxstdio() and systemTools.setmaxstdio() added to the existing systemTools struct allows the getting and settings of the maximum number of simultaneously open binary files in 3ds Max. Increasing the number to the maximum of 2048 can help for example in cases where a large number of Point Cache modifiers have to read data at the same time.

Setting Listener Selection

The existing SetListenerSel() function was unusable in previous released due to the OK return value which would destroy the selection it was making. This has been fixed by making the function return no value.

MAXScript Access To Autodesk Cloud Directory

The new parameter #autodeskCloud to the GetDir() function returns the local Autodesk Sync\Cloud path if the user is logged in Autodesk 360. Otherwise returns empty string "".

Documentation Changes and Additions

Several Viewport-related methods support an optional viewPanelIndex: keyword which was available but undocumented in 3ds Max 2013. These include viewport.getType() , viewport.getID() , viewport.getCamera() , viewport.getRegionRect() , viewport.setRegionRect() , viewport.getBlowupRegion() , viewport.setBlowupRegion() , viewport.getGridVisibility() and viewport.setGridVisibility() .

Added an undocumented parent:<HWND> optional keyword argument to the createDialog() function which allows a dialog to be made a child of another dialog or window.

Added an undocumented parent:<HWND> optional keyword argument to the cui.registerDialogBar() function which allows a dialog bar to be made a child of another dialog or window.

Moved the GetDir() function arguments into a table and added a column with the default return values.

Added a Note to the documentation of the RayMeshGridIntersect ReferenceTarget warning about the fact that only the first element of the node array will be used for intersections.

The documentation of the existing toolmode.coordsys() method in the Main Toolbar topic was missing the #gimbal and #working_pivot arguments. In addition, the MacroRecorder was incorrectly emitting #pivot instead of #working_pivot in previous releases. This has been fixed.