maya.
Every authoring tool has a primitive. Houdini's is the network. Blender's, increasingly, is the script. Maya's primitive is the rig — a tree of joints with constraints, drivers, and skin weights, hand-tuned by a character TD until it deforms believably under any pose. Once a rig exists, animators sit in the timeline and key it. The geometry might come from anywhere; the movement is authored in Maya.
Maya owns character work the way Houdini owns FX. Decades of rigging tooling have accreted: muscle deformers, blendshapes, IK/FK switches, set-driven keys, the Graph Editor, MEL macros, every studio's bespoke pipeline plug-in. None of it is replaceable cheaply. A rigging team is a deeper investment than a render farm. The studios that ship character-driven film and television almost without exception ship through Maya.
The trade is sharp in the other direction. Maya is the most expensive license in §I, the least friendly to scripted automation, and the slowest to ship a modern feature. Bifrost was its answer to Houdini's procedural ceiling; USD support arrived years late; the Python integration via maya.cmds works, but feels welded on next to bpy. Maya wins the slot it has, and concedes the slots it doesn't. For character: it is the tool.
# Build a basic IK chain. Three joints, an IK handle, a control # curve, and a parent constraint. The actual rigs are vastly more # elaborate — but every one of them starts here. import maya.cmds as cmds # 1) Build the joint chain. cmds.select(clear=True) shoulder = cmds.joint(p=(0, 8, 0), n='l_shoulder_jnt') elbow = cmds.joint(p=(0, 5, -0.2), n='l_elbow_jnt') wrist = cmds.joint(p=(0, 2, 0), n='l_wrist_jnt') cmds.joint(shoulder, e=True, oj='xyz', sao='yup', ch=True) # 2) IK handle: rotate-plane solver gives a stable elbow. ik = cmds.ikHandle(sj=shoulder, ee=wrist, sol='ikRPsolver', n='l_arm_ikh')[0] # 3) Control curve and parent the IK to it. ctrl = cmds.circle(n='l_arm_ctrl', nr=(1, 0, 0), r=0.6)[0] cmds.matchTransform(ctrl, wrist) cmds.parent(ik, ctrl) # 4) Pole vector for elbow direction. pole = cmds.spaceLocator(n='l_arm_pole')[0] cmds.matchTransform(pole, elbow) cmds.setAttr(f'{pole}.translateZ', -2) cmds.poleVectorConstraint(pole, ik)
- 1995
- Alias|Wavefront merges PowerAnimator and Wavefront's Advanced Visualizer. The next-generation product is named Maya, after the Sanskrit for illusion.
- 1998
- Maya 1.0 ships. MEL is the scripting language; the Hypergraph and Hypershade nodes ship; the rigging philosophy is locked in from day one.
- 2000s
- Industry consolidation: Pixar, ILM, DreamWorks, Weta, Disney all ship character work through Maya pipelines. Rigging becomes a discrete craft and a discrete career.
- 2005
- Autodesk acquires Alias. Maya joins the Autodesk lineup alongside 3ds Max and MotionBuilder. The pricing — and the upgrade cadence — change.
- 2011
- Python ships properly via
maya.cmdsand the OpenMaya API. MEL doesn't go away, but Python becomes the modern scripting surface. - 2018
- Bifrost ships — Maya's procedural network framework, an explicit answer to Houdini. Adopted unevenly. The character side stays right where it was.
- 2024
- Maya 2025. Modern UI refresh, USD-aware, ML-assisted rigging tools entering preview. Still the studio default for character animation work.