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.