Contents
API Guide
Maya API introduction
Introduction
Maya Architecture Overview
Using the Help
Loading a Plug-in
Unloading a plug-in
Writing a simple plug-in
Important plug-in features
Interacting with Maya
MObject
Wrappers
Objects and Function Sets
Naming Conventions
Adding arguments
Error checking
MStatus class
Error logging
What's New / What's Changed?
Autodesk Maya 2014
Extension 2 for Autodesk Maya 2013
Extension for Autodesk Maya 2013
Autodesk Maya 2013
Setting up your build environment
Introduction to building plug-ins and applications
Compiler Requirements
Linux environments
Linux compiler requirement
Using a debugger to debug your plug-ins
Windows environment (32-bit and 64-bit)
Maya Plug-in Wizard For Visual Studio
Mac OS X environment
Maya Python Plug-in Learning Path
Quick Python Syntax Tips
Your First Maya Python Plug-in
Command Plug-in Basics
Command Plug-ins
Command Arguments and Flags
Querying the Scene Graph
Creating and Manipulating Objects
Example: Creating a Scene
Example: Creating an IK Joint Chain
Dependency Graph Plug-in Basics
The Dependency Graph
Dependency Graph Plug-ins
Example: Creating a Depth Shader
Example: Using Time to Animate a Cube Mesh
Example: Voxelizer Node
Example: Bounding Box Deformer
Selecting with the API
Overview of selecting with the API
MGlobal::setActiveSelectionList()
MSelectionList
MItSelectionList
setObject() method
MFn::Type enumeration
MGlobal::selectByName()
Command plug-ins
Overview of adding commands to Maya
Registering commands
MFnPlugin
initializePlugin()
uninitializePlugin()
Creator methods
MPxCommand
Returning results to MEL
Syntax objects
Flags
Contexts
MPxContext
MPxContextCommand
Tool property sheets
MPxToolCommand
Attaching a plug-in to a Maya menu
DAG Hierarchy
Overview of the DAG Hierarchy
Nodes
Transforms and shapes
DAG paths
Generalized instancing
Transforms with multiple shapes
DAG walking example
Dependency graph plug-ins
Overview of dependency graph plug-ins
Parent class descriptions
The basics
Dependency Graph (DG) nodes
Nodes
Attributes and plugs
Complex Attributes
Data blocks
Data handles
Data creators
Compute methods
A more complex example
MPxNode and its derived classes
Manipulators
Introduction to Manipulators
Base Manipulators
Writing a Manipulator
Manipulator Containers
Communication Between Manipulators and Nodes
Connect Manipulators to the Show Manipulator Tool
Shapes
Shapes in Maya
Shape classes
Writing a shape
Drawing and refresh
Selection
Components
Tweaks and internal attributes
Geometry data
File IO
Deformers
Marking Menus
Example Shapes
Writing a Software Shading Node
Overview of shading node plug-ins
Writing a shading node plug-in
Anatomy of a shading node plug-in
InterpNode example code walkthrough
Shading nodes classification
Shading node icons for Hypershade
Adding a custom shading node to the Hypershade
Special shading nodes
SuperSampling within shading nodes
Evaluating shading nodes outside of the rendering context
Writing a Hardware Shading Node
Overview of hardware shading node plug-ins
Implementing a hardware shading node plug-in
A hardware shading node plug-in example
Improving the performance of hardware shaders
Hardware Shading node plug-in examples
Writing a Custom Transform Node
Overview of custom transforms
Implementing a custom transform
Example custom transform
Custom Transform node examples
Writing a Deformer Node
Overview of Deformers
Deformers in the Dependency Graph
Ordering the Deformers
Tweak Nodes
Deformers and Topology
Skinning
Implementing a Deformer Node
Deformer Node Example
Deformer Examples
Writing File Translators
Overview of File Translators
Implementing a File Translator
Accessing MEL commands
File Translator Examples
File Translator Examples in the developer kit
Viewport 2.0 API
Overview of the Viewport 2.0 API
Data Classes
Scene Overrides
Rendering Overrides
Framework Classes
Transition Guide
Devkit Samples
Maya Viewport 2.0 API Guide
1. Rendering Framework
1.1 Shader Driven Update
1.2 Geometry Update
1.3 Geometric Consolidation
1.4 The Render Loop
1.5 The Renderer
1.6 Comparison Against The Old System
1.7 Interfaces To The Renderer
2. API constructs
2.1 Render Items (MRenderItem)
2.2 Geometric Data (MGeometry)
2.3 Shader Instances
2.4 Texture creation and texture manager
2.5 Render Targets and Render Target Manager
2.6 State and State Manager
3. Plug-in Entry Points
3.1 Registration
3.2 The Renderer
3.3 Geometry Overrides
3.4 Effect Overrides
3.5 Shading Node Overrides
3.6 Draw Overrides
3.7 Sub-scene Overrides
3.8 Render Loop Overrides
3.9 UI draw manager
4. Advanced Topics
4.1 Software Shading Node Support
4.2 Lighting Interfaces
4.3 Customizing Geometric Data for Shaders
4.4 Effects interfaces
4.5 Handling custom renderables for object overrides
5. Devices and Draw APIs
5.1 Single Device Model
5.2 Accessing Resource Handles and Device Handle
5.3 Multiple Draw APIs
6. XML Schema
6.1 XML Schema for Shading Fragments
6.2 XML Schema for Fragment Graphs
Semantics and annotations supported by the dx11Shader plug-in in Viewport 2.0
Shader semantics supported by Viewport 2.0
Multithreading plug-ins
Introduction
Data and Task Parallelism
Threads
Locks
OpenMP
Intel Threading Building Blocks
Threading Challenges
Memory allocation
Threading and Maya
Other types of parallelism
Python threading and Maya
Third party tools
API Classes and plug-ins
Mac OS X platform specific pthreads issues
Vendor-specific OpenMP Issues
Polygon API
Overview of Polygon API
How polygons are handled internally
The five basic polygonal API classes
Construction History and Tweaks
polyModifierCmd example
splitUVCmd example
Poly exporter plug-ins
Working with Qt
Overview of Maya's Qt UI
Using the loadUI Command
Using Qt in Plug-ins
Maya Python API
Maya Python API 1.0
The Development Kit
Your First Maya Python Plug-in
Using the Maya Python API
Differences Between Maya's C++ and Python APIs
PyQt and PySide Widget Best Practices
Maya Python API 2.0
Using the Python API 2.0
Maya .NET API
Getting started with .NET API
Differences between the Maya .NET API and the Maya C++ API
Removal of MStatus return codes from .NET API
Using IEnumerable and LINQ with the Maya .NET API
Compiling examples
Loading .NET plug-ins
Running the DAGExplorer WPF .NET plug-in example
Writing your own .NET plug-in
Creating a Hello World command plug-in using .NET
Using .NET assembly attributes
Meta Data
Plug-in wizard
.NET languages other than C#
Distributing Maya Plug-ins
Distributing individual files
Distributing Multi-File Modules
Maya module paths, folders and versions
Recommended workflow for creating a plug-in module
Limitations of Modules
Shared Libraries
mental ray Shaders
Technical Notes
Generic Attributes
Threading and Maya API
Internationalizing plug-ins
Overview of the Maya API Internationalization Architecture
Internationalization Process
Localization Process
Example code
Translated version of the closestPointOnCurve.pres.mel resource file
Example Plug-ins
Overview of example plug-ins
Example stand-alone applications
Example C++ plug-in descriptions
Example stand-alone application descriptions
Shader source code examples
Example Scripted Plug-ins
Appendices
Appendix A: NURBS Geometry
Appendix B: Rendering attributes
Appendix C: Frequently asked questions
Appendix D: API and Devkit limitations
Appendix E: Adding Image Plug-ins