maya-geometry · git:20260513.7130de8 · 2026-05-13 · sha256 d2f0cc0fe6937106

maya-geometry git:20260513.7130de8A

Immutable. This exact content never changes and is served at /api/v1/blob/d2f0cc0fe6937106.

---
name: maya-geometry
description: |-
  Interchange stage — scene I/O and FBX / OBJ interchange. Save Maya
  scenes (.ma / .mb) and round-trip geometry through FBX or OBJ. The FBX
  export tool drives every FBXExport* option through the FBX plugin's MEL
  globals, bakes animation by default, and verifies the output file. Use
  for cross-DCC handoff. Not for primitive creation (maya-primitives) or
  shot packaging (maya-shot-export).
license: MIT
allowed-tools: Bash Read
metadata:
  dcc-mcp:
    dcc: maya
    layer: domain
    stage: interchange
    version: 2.0.0
    tags:
    - maya
    - geometry
    - interchange
    - fbx
    - obj
    - save
    - export
    - import
    search-hint: |-
      save Maya scene, save .ma .mb, export FBX, import FBX, export OBJ,
      file_exists, geometry round trip, scene interchange, FBXExport options,
      bake animation FBX
    aliases:
    - maya-interchange
    - maya-io
    - maya-fbx
    side-effects:
    - reads-scene
    - reads-disk
    - writes-disk
    - calls-fbx-plugin
    depends: []
    tools: tools.yaml
    groups: groups.yaml
    skill-reference-docs:
      - "references/*.md"
---
# maya-geometry (Interchange stage)

Scene I/O and geometry interchange. Despite the legacy name `maya-geometry`,
the responsibility is **interchange**, not modelling — see the alias list
in the frontmatter (`maya-interchange`, `maya-io`, `maya-fbx`).

## Why this stage exists

Once an Authoring-stage skill has produced geometry / animation, you
need a reliable way to (a) save the Maya scene file and (b) hand the
geometry off to other DCCs or downstream pipelines. That is what the
Interchange stage handles. Every export tool here:

- pushes its full option surface through the official MEL globals (no
  silent reliance on plugin defaults);
- bakes animation by default for FBX so downstream apps see the same
  motion the artist sees;
- verifies the destination file (existence + non-zero bytes) and
  surfaces the size in the result envelope.

## Cross-Maya FBX contract (P0)

When handing FBX to **another Maya year** or a different DCC, treat these fields as mandatory knobs—not plugin defaults:

| Parameter | Guidance |
|-----------|------------|
| `fbx_version` | Pin a concrete enum value (e.g. `FBX202000`) so source and target agree on file format. |
| `bake_animation` | Keep `true` whenever motion comes from IK, constraints, expressions, or simulation; otherwise downstream may see static meshes. |
| `start_frame` / `end_frame` | Set explicitly to the bake window you need for production; do not rely on UI playback range alone. |
| `up_axis` | Set `y` or `z` explicitly when your pipeline requires a fixed world orientation. |

The `export_fbx` script resets the FBX plugin option store (`FBXResetExport`) before export and returns `applied_options` plus `size_bytes` in the success envelope for audit and regression triage.

## Bulk and multi-file export (agents)

For **N separate FBX paths** (e.g. one file per root transform), prefer **one** `execute_python` payload that loops in Maya, applies the **Cross-Maya FBX contract** fields each iteration, and returns e.g. `context.written_files`. Invoking the `export_fbx` tool **N times** over MCP is possible when each call must be individually validated, but it costs **N round-trips** — collapse to a single script when the user only needs throughput and deterministic naming.

## Groups

- **core** (`default_active: true`) — `file_exists`. Pure filesystem,
  no Maya state.
- **geometry** (`default_active: true`) — main-thread Maya scene save +
  FBX/OBJ import / export.

## Scripts

- `save_scene` — Save the current scene as Maya ASCII or Maya Binary
- `file_exists` — Check whether a file exists on disk (no Maya state)
- `export_fbx` — Export the scene or current selection to FBX with full FBXExport* control
- `import_fbx` — Import an FBX into the current scene; returns new node names
- `export_obj` — Export the scene to OBJ