What's New in the Maya 2020 devkit

No changes were made to the Maya devkit between 2020.3 and 2020.4.

{{toc}}

New in the Maya 2020.3 devkit

The mimicManipulation command has been added to Maya.

The noIntermediate (ni) flag has been added to the sets command. This flag filters out intermediate objects when querying members or when using the subtract, union, intersection, or isIntersecting flags.

The moveManip.py example has been updated to have the same behavior as the C++ version and clean up a callback.

The locatorHelperShape.py example has been updated to reflect a bug fix. The call to face_it.next(0) has been changed to face_it.next().

MStatus MDGModifier::deleteNode( const MObject & node, bool includeParents ) and MStatus MSelectionList::getPlug ( unsigned int index, bool convertComponents, MPlug &plug ) const were added to the API. The following changes have been made to the Maya devkit in this release.

Back to top

New in the Maya 2020.2 devkit

Previous versions of Maya included uic.exe, rcc.exe, qmake.exe, and several other Qt Creator auxiliary tools. However, versions of Maya from this point forward will not include these tools.

Back to top

New in the Maya 2020.1 devkit

New method added to MRenderItem

A new method has been added to the C++ API. void MRenderItem::setPrimitive(MGeometry::Primitive primitive, int stride) sets the primitive type of a render item.

Back to top

New MTypeID in the viewRenderOverrideFromFragments/pyGroundReflectionRenderer.py example

The MTypeID for the RenderOverrideOptions class in the pyGroundReflectionRenderer.py example has been changed.

If you created a scene in Maya 2020 or earlier using this example, the binary scene file will not open in later versions of Maya. You will need to save the scene as an ASCII file in Maya 2020 or earlier, then open the ASCII scene file in the later version of Maya.

Back to top

New in the Maya 2020 devkit

New minimum versions

The Maya 2020 devkit now requires Visual Studio 2017 and Xcode 10.2.1.

The requirements for Linux remain unchanged.

Back to top

Fixed feature

Previously MPxTransform::boundingBox() was not being called when isBounded() was implemented and returned true.

This has been fixed, and MPxTransform::boundingBox() is now called when iBounded() is implemented and returns true. It will not be called when isBounded() returns false, or when isBounded() is not implemented.

Back to top

Cached Playback

New classes have been added to support the Cached Playback feature:

New methods have been added to support Cached Playback

Back to top

ADSK Standard Surface shader

A new surface shader, the ADSK Standard Surface shader, has been added to Maya.

Changes have been made to the API to support this new shader.

The MFnStandardSurfaceShader class has been added to the C++ and Python 1.0 APIs. This class provides access to the attributes of the standardSurface shader node.

The MFn.kStandardSurface type is used to determine whether an MObject supports the new default shader. MFn.kStandardSurface is available in the C++, Python 1.0, and Python 2.0 API.

In the Viewport 2.0 API, the new standard shader, k3dStandardSurfaceShader, has been added to MStockShader. MShaderManager::getStockShader() can use k3dStandardSurfaceShader as its first argument. MShaderInstance::addInputFragmentForMultiParams() adds support for connecting multiple parameters from an registered input fragment to an existing MShaderInstance.

Back to top

Graph Editor overlay drawing

A new feature has been added that allows users to draw primitives over the Graph Editor.

Two new classes have been added to the C++ and Python APIs: MPanelCanvas and MPanelCanvasInfo classes.

Back to top

Other new Python classes and methods

The following classes have been added to the Python API 2.0:

The following methods have been added to the Python API 2.0:

Back to top

Other new classes

MGPUEventList has been added to manage event wait lists.

MIndexMapper has been added to map indices between a geometry and a subset of indices affected by a deformer.

Back to top

New iterator method added to MItGeometry

MItGeometry::positionIndex() has been added to help with iterating over surface geometries.

Back to top

New methods for selection pass rendering

MPxSubSceneOverride::enableUpdateForSelection() and MFrameContext::getSelectionInfo() have been added to help with selection pass updating.

MPxSubSceneOverride::enableUpdateForSelection() is called by Maya when a subscene is created. It returns false by default, meaning that update methods will only be called for regular renders.

Overriding this method to return true causes update methods to also be called for selection passes.

MFrameContext::getSelectionInfo() returns the selection state information if it is called in a selection pass, and returns a null pointer otherwise.

The apiMeshSubSceneOverride example has been updated to use both these methods.

Back to top

Changes to MFnPlugin::registerEvaluator()

The signature for registerEvaluator() has changed from

MFnPlugin::registerEvaluator(const MString& evaluatorName, unsigned int  uniquePriority, MCreatorFunction creatorFunction)

to

MFnPlugin::registerEvaluator(const MString& evaluatorName, unsigned int  uniquePriority, MCustomEvaluatorCreatorFunction creatorFunction)

Back to top

Changes to MPxNode::configCache()

The signature of configCache() has changed from

MPxNode::configCache(const MEvaluationNode& evalNode, const MCacheMode& info, MCacheSchema& schema)

to

MPxNode::configCache(const MEvaluationNode& evalNode, MCacheSchema& schema)

Back to top

Changes to MFnPlugin::registerImageFile()

The signature of MFnPlugin::registerImageFile() has changed. An ImageFilePriority parameter has been added.

The C++ signature has changed from

MStatus registerImageFile(const MString& imageFormatName, MCreatorFunction creatorFunction, 
const MStringArray& imageFileExtensions);

to

MStatus registerImageFile(const MString& imageFormatName, MCreatorFunction creatorFunction, 
const MStringArray& imageFileExtensions, ImageFilePriority priority = kImageFilePriorityDefault);

Back to top

Changes to MeshIntersector

The signature of create() has been changed in the C++, Python 1.0, and Python 2.0 APIs to support faces of interest.

The C++ signature has changed from

MStatus create (MObject &meshObject, const MMatrix &matrix=MMatrix::identity)

To

MStatus create( MObject &meshObject, const MMatrix& matrix = MMatrix::identity, const MIntArray* facesOfInterest = nullptr);

Refer to the C++ and Python API references for details.

Back to top

Change to MPxGeometryOverride::requireRenderItemUpdate

The default value of MPxGeometryOverride::requireRenderItemUpdate has been changed to false.

The following devkit examples have been modified to reflect this change:

Back to top

Deprecated class

MPxImagePlaneOverride has been deprecated.

MPxImagePlane no longer needs to be associated with MPxImagePlaneOverride for drawing in Viewport 2.0.

Any code that uses MPxImagePlaneOverride should be updated to use only MPxImagePlane.

The customImagePlane example has been updated to remove its use of MPxImagePlaneOverride.

Back to top

Added examples

simpleSimulationNode demonstrates how to interact with Cached Playback.

marqueeTool.py, lassoTool.py, and squareScaleManipContext.py demonstrate the new Python API 2.0 classes.

pyPanelCanvasInfo.py and pyPanelCanvas.py demonstrate the MPanelCanvas and MPanelCanvasInfo classes for Graph Editor overlay drawing.

Back to top

Updated examples

Back to top

Removed examples

Back to top