The guide is based on What's New in the Maya Devkit in Maya 2020 with some extra info. Check the Maya documentation for the most up to date information.
For Mac users, Apple has introduced notarization since OS X 10.14.5 and it is going to be enforced for Applications after 10.15. It requires the host application to declare entitlements for the plug-ins. Although Maya is the parent application, you should be aware that it may cause your plug-in to fail in these Mac releases if Maya didn't declare the entitlement. Please test your plug-in in both 10.14.5 and 10.15 if possible. For more details please check Notarizing Your App Before Distribution from Apple.
The build environments have been upgraded. Mac has been updated to Mojave 10.14.x with Xcode 10.2.1, and Windows has been updated to Windows 10 with VS2017. Linux remains unchanged.
|Windows||Windows 10 x64||Visual Studio 2017
Windows SDK Version 10.0.10586.0
|Mac||Mojave 10.14.x||XCode 10.2.1|
|Linux||CentOS/RHEL 7.3(x>=3)||gcc 6.3.1(DTS 6.1)|
The Maya docs are being updated with API changes. You can find the most up to date information for the API in the What's New / What's Changed section.
In Maya 2020, a new Maya node called standardSurface will be shipped as a new surface shading node.
Based on the Autodesk Standard Surface specification, it is a renderer agnostic uber surface shader that aims to provide a material representation capable of accurately modeling the vast majority of materials used in practical visual effects and feature animation productions. The next release of Maya will have an implementation of the Autodesk Standard Surface based on version v1.0.1 of the specification.
Purpose and Scope
Using the Standard Surface node will allow more flexibility for rendering and for data interchange between applications.
- Allows multiple renderers to get similar rendering results by using the same native Maya surface node.
- Allows scene importer/exporter plugins to keep as much shading information.
The Standard Surface specification is a common base that can be extended (or reduced) by render engines that support it. For example, the Arnold Standard Surface shader has some additional parameters like subsurface_type or exittobackground not defined in the specification. The Arnold renderer plugin for Maya (MtoA) is responsible for extending the Maya Standard Surface node with those specific parameters. On the other side of the spectrum, some real-time renderers might not support some advanced parameters. In this scenario, some simplification can be done by zeroing the combination weights of the unsupported layers like transmission or subsurface for example. See the Compatibility section in the Autodesk Standard Surface specification.
Deprecating the Lambert shader in favor of the Standard Surface as the de facto default surface shader in Maya is the final goal. However since the Lambert shader has been used since the very first version of Maya, we decided to keep it as the default surface shader for now. You can experiment using the standardSurface as the default surface shader in the next release of Maya by setting the environment variable "MAYA_DEFAULT_SURFACE_SHADER" to "standardSurface".
The following classes, methods, and types were added to the Viewport 2.0 API to support the new shader.
k3dStandardSurfaceShader in MStockShader
basicBlendShapeDeformer - Deformer Subsetting: MPxBlendShape plugins
simpleSimulationNode - Cached playback support
pyPanelCanvasInfo.py - Graph Editor overlay drawing support
pyPanelCanvas.py - Graph Editor overlay drawing support
apiMeshShape - Added component selection support to the example and Light plugin enhancements following internal changes to vizualization of objectSets
apiMeshSubSceneOverride - Selection update
viewObjectSetOverride - Light plugin enhancements following internal changes to vizualization of objectSets
footPrintNode_GeometryOverride - rewrite for better caching support
footPrintNode_GeometryOverride_AnimatedMaterial - requireRenderItemUpdate default value to false
geometryOverrideExample1 - requireRenderItemUpdate default value to false
geometryOverrideExample2 - requireRenderItemUpdate default value to false
customImagePlane - Revisited plugin after deprecation of MPxImagePlaneOverride
AnimEngine - A similar AnimX example is available from https://github.com/Autodesk/animx
This feature allow users to draw primitives over the Graph Editor. Several new classes, methods, and examples were added to the API to support Graph Editor overlay drawing.
New C++ and Python classes
New Python samples
Your plug-in can now support Cached Playback. These new classes and methods have been added to the API to make it easier for you to define and configure your node for Cached Playback.
simpleSimulationNode example have been added to the devkit to showcase the new cached playback APIs.
Refer to C++ API reference for details.
Here are a few more classes and methods that have been added to the API. They're new classes and methods to help with your deformer, selection pass rendering, and iterating over geometry data.
New C++ classes
New methods for selection pass rendering
apiMeshSubSceneOverride example have been updated to use the new methods.
New method added to MItGeometry
New Python 2.0 classes
Several third party libraries have been updated. Some methods which have been changed or fixed as well. If your plug-in uses the following methods, check the docs to see what's been fixed or changed.
Third party libraries
Boost has been updated to 1.61. Maya is replacing boost with std, some headers have been removed from the boost library shipped with Maya.
Qt has been updated to Qt 5.12.5.
OSX Plugin export symbols
If you wanted to update your existing plugin makefile for Mac, here are the export symbols.
MPxTransform::boundingBox() and MPxTransform::isBounded()
Change in signature
Change in default value
footPrintNode_GeometryOverride_AnimatedMaterial, geometryOverrideExample1, and geometryOverrideExample2 examples have been updated to reflect this change.
Refer to What's New / What's Changed for details.
Creating custom image plane has been simplified. If you’re creating a custom image plane, you may want to update your plug-in because the following class have been deprecated.
Refer to What's New / What's Changed for details.