Screening – Garden of the MetalCourse overviewInterestsWhat are the possibilities?Maya’s Open ArchitectureCapability for complete changes to GUIProgrammabilityCustomization – using MEL to control GUIIntegrationPassing data to other applicationsAutomationCreation / BuildRepetitive tasksExpressions and runtime eventsExtensionsAdding to the feature setNew controls / ways of editing / recombinationFundamental Concepts of Maya ArchitectureGUI <> MEL Command Engine <> Dependency GraphMEL (Maya Embedded Language)ELF (Extension Layer Framework)Commands added to MEL for interface elementsDependency Graph (DG)Concept of “scene graphs” common to many 3D applicationsMajority of MEL commands operate on the DGPipeline of data flow with “operators” in each DG nodePush-Pull modelA node that needs updating will pull on upstream node(s) for input.A node that updates will push data to downstream node(s), causing the downstream node(s) to update.
DG NodesEach node has inputs/outputs and compute functionI/o data is held in the node’s attribute“Local knowledge only” for each nodelooks only at its own attributes for compute functionTrue building blocks (like a neural network)Some nodes do not compute but only hold datae.g. “time” nodeConnecting NodesA single attribute can feed multiple attributesBut not the other way aroundNetworks can be built of arbitrary complexityPowerful capabilities“Deformers on deformers on deformers!”Updating the DGNodes do not have independent control as to when they update.The Push-Pull model runs in two stages:1) Propagation of a status flag to all nodesThe “dirty bit”2) Processing of data by flagged nodes.Partial evaluations speeds up process
Visualizing the DGThe HypergraphData flow and graphical connections of attributesBlue – single numeric valuesGreen – arraysPink – complex attributes (such as shapes)Can connect or break attribute connections
Attributes are of various datatypesInteger, float, string, Boolean, enumerated list, arrays, vectors, matricesAttribues can be keyable, nonkeyable, or locked.Channel BoxDisplays attributes that are keyable(Use the channel control window to edit keyable/nonkeyable)Attribute EditorDisplays most but not all attributesUp- and down-stream buttonsAllows creation of new custom attributesConnection EditorCan connect or break attribute connectionsOutlinerCan display all attributesThe (almost) definitive source for attributes of each node:The online Maya node and attribute referenceA word about DAG NodesDirected Acyclic GraphThe transform hierarchyTop-downParent/child relationshipTransforms are relative to parent spaceTransform and shape nodesA shape cannot exist w/o a transform nodeA DAG is a DG –MEL syntax for a DAG path hierarchy :“|grandparent|parent|child”VariationsInstancesA DAG shapenode with multiple transform node parentsUnderworldA parametric space defined by the shape and transform node of a parent (e.g. curve on surface)
MELWhen using the maya interface you are indirectly issuing MEL commandsAn interpreted languageTrade-off between slower at runtime vs faster prototyping/developmentExpressions may be slower than utility nodesProcedures slower than a C++ compiled pluginHowever MEL allows experimentation flexibilityCross-platform
ScriptingCommandline – single command inputCommand shell – single command with historyShelf – icon access to running scriptsScript files – external files to load and runScript nodes – saved with scene fileRuns on demand, scene open/close, render time, timeline update
Script Editor windowHistory panelCommand input panelUse “control + enter” to run highlighted commandsLearning MEL commandsWatch the feedback printed in the history windowUse “echo all commands” for additional UI commands, etc.Use “help” commande.g. “help sphere”MEL commands have arguments-flag <value>flags have long and short names, interchangeableuse the help commanduse the online MEL Command Reference
MEL commands have “command modes”Creation, query, and editDefault is creationSphere;Command querySphere –query –radius nurbsSphere1;Command editSphere –edit –radius 4 nurbsSphere1;Comments// a one line comment/* a multilinecomment*/