Maya Architecture
Before delving into programming it is important to examine Maya architecture which is revolutionary different from many packages available on the market today. Generally you would expect from a 3D application to support modeling, animation, lighting and rendering tasks. In many existing applications those tasks are provided by the separate modules. You may think that this is a good solution but it appears to be very inflexible if you have to program or apply some custom functionality in between. For example an animated model before being rendered might require a custom deformation. As a programmer you may receive one day the task to create such deformer programmatically. Maya architecture is flexible enough to allow you this degree of freedom and customization.

Maya is not built on separate modules; instead it is based on data flow model, also known as a pipeline. Consider the following analogy: a motherboard with electronic circuits. In its basic shape a circuit has incoming and outgoing slots. Incoming slots receive data. This data is being modified and is available from the outgoing slot. It then can travel to the next circuit where it can be modified again. In Maya realm each such circuit is an independent interconnected unit of the pipeline called a node. Each such node can accept, modify and transmit data to the next node.

In the figure bellow you can see how Maya is organized into layers.



GUI layer: is available for the application users (modelers, animators, designers and programmers);

MEL Engine: every task performed by the user on GUI layer is translated into MEL commands and sent to the MEL Engine for execution;

Dependency Graph: MEL commands from the layer above operate on Dependency Graph. You can also see Dependency Graph as a place where all the data about the scene is stored and where necessary data modifications take place.

Notice that Maya Dependency Graph is a patented technology (covered by U.S. patents). It contains all the building blocks discussed earlier that form Maya's pipeline. Each 3D task in Maya is performed by a series of nodes connected together. The data flows from one node to the next and is being modified to obtain new data. You can form any network of such nodes both visually (via GUI) and programmatically (MEL or C++) in Maya to achieve the desired functionality. You can also create your own nodes that will modify the data in any way you wish and add those to the existing Maya's pipeline.