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.
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.
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.
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.
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.
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.
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.
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.
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.
The
Perspective_Match UtilityPlugin exposes all controls of the new perspective matching tool to MAXScript.
The
MeshInspector Interface exposes the new
3ds Max feature which checks and allows the repair of inconsistent mesh data.
The new
SceneMissingPlugins Interface lets you access the number, classes and file information and description of missing plugins found in the current scene.
The
ExchangeStorePackageManager Core Interface provides MAXScript access to the Exchange Store file counts and paths.
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.
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.
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.
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.
The two new properties
.architecturalSamplerEnabled
and
.causticSamplerEnabled
expose the new Samplers added to the iRay Renderer.
The
General Event Callbacks notification
#preNodeBonePropChanged
and
#postNodeBonePropChanged
were broken in previous releases and were not broadcast at all. This has been fixed.
The DWF
Export Dialog settings are now exposed to MAXScript via the new
DwfExportPreferences Core Interface.
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).
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 Member/Function Names are now explicitly disallowed at compile time, but duplicated Function names are still possible to allow for forward declarations.
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.
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.
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.
The new function
cui.showToolbar()
in the
CUI struct can be used to display a hidden toolbar by name.
The new methods added to the existing
Windows struct provide access to the placement and dimensions of any windows accessible via a HWND handle. These methods include
windows.setWindowPos()
,
windows.getWindowPos()
,
windows.clientToScreen()
and
windows.screenToClient()
.
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.
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.
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 "".
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.