OpenRig — Architecture Overview
What is a rig?
A system that translates animator inputs into deformation outputs through a process. OpenRig never assumes what inputs, outputs, or processes look like. The library provides the tools; the rigger decides what to build.
Core Principles
Modular — the fundamental unit is a solution. A full rig is a composition of solutions.
Extensible — new solutions or operations can be added without modifying what already exists.
Reconstructable — a rig can always be rebuilt from its description.
Workflow
DESCRIPTION → BUILD → SCENE
(JSON) (Maya) (rig + metadata)
Description — the rig is defined as data outside Maya. A JSON file says what to build.
Build — the description is materialized in Maya.
Scene — the built rig includes metadata, so its description can be recovered.
Package Structure
openrig/
├── naming/ ← naming system (config-driven)
├── conventions/ ← rigging convention defaults (config-driven)
│
├── maya/
│ ├── core/ ← base classes every solution must implement
│ ├── ops/ ← atomic Maya operations
│ ├── solutions/ ← concrete rig components (arm, spine, twist…)
│ └── build/ ← build pipeline (description → Maya scene)
│
└── builder/ ← high-level interface to drive builds
Module Summary
Module |
Description |
|---|---|
|
Generates and validates names for all rig objects. Config-driven via |
|
Rigging defaults (axes, rotate order, default side). Config-driven via |
|
Base classes every solution must implement: inputs, outputs, |
|
Atomic Maya operations. One function does one thing. Building blocks for solutions. |
|
Concrete rig components (arm, spine, twist…). Each implements the |
|
Orchestrates the full build: reads the description, instantiates solutions, assembles the rig. |
|
High-level interface to manage and trigger builds without writing code directly. |
Layer Rules
Each layer only depends on the layer below it:
builder/→ usesmaya/build/maya/build/→ usesmaya/solutions/andnaming/maya/solutions/→ implementsmaya/core/, usesmaya/ops/, usesconventions/maya/ops/→ calls Maya API directlynaming/→ no dependencies on Mayaconventions/→ no dependencies on Maya
This means any addition is local:
New solution or variant → new file in
maya/solutions/. Nothing else is touched.New Maya operation → new function in
maya/ops/. Existing solutions are unaffected.
Development Order
naming/maya/core/— base classes: what every solution must exposemaya/ops/— atomic operationsmaya/solutions/— concrete solutionsmaya/build/— build pipelinebuilder/— high-level interface
Open Questions
What exactly must a solution expose in
maya/core/? Inputs, outputs, abuild()method?How does a solution declare what it needs vs what it produces?
How are solutions composed to form a complete rig?