mtorba

Maya to Rumba export tools

This project provides scripts, Rumba nodes and Rumba plug-ins to export rigs from Autodesk Maya to the Rumba animation software.

MTORBA is supported by Mercenaries Engineering.

Of course, MTORBA doesn’t support all the Maya nodes. Maya node support is done on-demand, so feel free to ask if the nodes you are using are missing right now.

Compatibility

Maya 2017 win64/linux and newer versions.

Installation

Copy the module/mtorba.mod file in your Maya/modules directory edit it, and replace path_to_mtorba by the path to your Rumba/mtorba directory.

Export using mayapy

Use the script/export.py script to export your asset using the mayapy command line. For more details please run :

mayapy mtorba/script/export.py --help 

Export from a Maya python script

Select the asset root node and run :

import mtorba.exporter 
mtorba.exporter.export("my_rumba_file.rumbanode")

This command willl export a .rumbanode asset file and a test rumba document which references the asset file. The rumba document will be named my_rumba_file.rumba.

To directly export the asset in a rumba document with no reference, use this command :

import mtorba.exporter 
mtorba.exporter.export("my_rumba_file.rumba")

Limitations

  • Only a subset of the Maya nodes and attributes are supported. See the list below.
  • Only a single node can be exported. It should be a transform node with no namespace.
  • The attributes are exported using the long name only
  • Only the string, integer, enum, float, 3 floats and boolean dynamic attributes are exported
  • Only the diffuse color, the transparency and the diffuse texture are exported, an optional file node can be connected in the color shader attribute.
  • The transform.inheritsTransform attribute can’t be animated

Pimp your asset for Rumba

In order for your Maya asset to benefit of the Rumba features, you can do some extra work on it.

The root node

All your asset rig must be contained in a single Maya Group node. This node is your root node.

The root node of your asset is exported as a Rumba Asset node. The name of this node will be the default name of the asset once referenced in the Rumba document.

Be aware that the root node won’t move in Rumba.

Controllers

Right now, MTORBA assumes that the NurbsCurves objects are the rig controllers. More control on that behavior soon..

The controller attributes (scale, rotate, translate, visibility and the dynamic attributes) are exposed in the Assets node and are available for animation in Rumba.

Not that in order to be exposed, an attribute must be Keyable or Displayable, not Hidden and not Locked.

Methodology

A node can be emulated with three methods :

  • rumbanode : A rumba node was created using the Rumba node editor to emulate the Maya node.
  • plug-in : A C++ Rumba plug-in was written to emulate the Maya node.
  • custom : During the exportation from Maya, the python script crafts a custom Rumba graph using Rumba’s internal nodes to emulate the Maya node.

Supported Maya nodes :

nodes status method comments
addDoubleLinear OK rumbanode
aimConstraint Partial support plug-in enableRestPosition must be True, inverseScale is not supported
animBlendNodeAdditiveFA OK rumbanode
animBlendNodeAdditiveRotation OK plug-in
animCurve OK custom
angleBetween OK plug-in
arcLengthDimension Partial support rumbanode No support for surfaces, only curves
avgCurves Partial support plug-in No support for normalizeWeights and automaticWeight
blendShape Partial support custom No support for inbetween, relative shapes, target weights and base weights
blendColors OK rumbanode
blendTwoAttr OK custom
blendWeighted OK plug-in
clamp OK rumbanode
cluster Partial support plug-in Exported plugs : preMatrix, weightedMatrix, geomMatrix, weightList, relative, bindPreMatrix
cMuscleObject Partial support plug-in Minimal support for the "wrap on nurbs surface" trick
cMuscleRelative Partial support plug-in Minimal support for the "wrap on nurbs surface" trick
cMuscleSurfAttach Partial support plug-in Only the outTranslate output is computed
cMuscleSystem Partial support plug-in Minimal support for the "wrap on nurbs surface" trick
condition OK rumbanode
composeMatrix Partial support rumbanode inputQuat and useEulerRotation are not supported
curveFromMeshEdge OK plug-in
curveFromSurfaceIso Partial support rumbanode No support for maxValue, minValue, relative and relativeValue
curveInfo Partial support plug-in arcLength support
decomposeMatrix OK plug-in
deformBend OK plug-in No handle display
deformSquash OK plug-in No handle display
deltaMush Partial support plug-in The scale attribute is not supported
distanceBetween OK rumbanode
distanceDimShape OK rumbanode
expression Partial support custom Supports float constants, local variables and the following operators : *, /, +, -, float, abs, ceil, floor, sign, trunc, exp, log, log10, sqrt, cos, sin, tan, acos, asin, atan, min, max, pow, atan2, hypot
follicle Partial support rumbanode Only the outTranslate and the outRotate outputs are exported
fourByFourMatrix OK plugin
ffd Partial support plugins No partial geometry support nor frozen geometry
groupParts Ignored
ikHandle Partial support custom Support the RPSolver, the SCSolver and the SplineSolver.
ikEffector Partial support custom
joint Partial support custom
locator Partial support rumbanode
loft Partial support custom Support the input curves, degree, close, autoReverse and reverseSurfaceNormals.
makeNurbCircle OK plug-in
mesh Partial support custom
multDoubleLinear OK rumbanode
multiplyDivide OK rumbanode
multMatrix OK custom
network Partial support rumbanode Export a basic Node
nonLinear Partial support plugin Support for bend and squash only
nurbsCurve Partial support custom
nurbsSurface Partial support custom
nurbsTessellate Partial support plug-in support only Quads polygonType, CVs or General format. No useChordHeight nor useChordHeightRatio support.
objectSet Partial support custom objectSet objects visible in the outliner are exported as Rumba's SelectionSet
orientConstraint Partial support plug-in enableRestPosition must be True
pairBlend OK plug-in
parentConstraint Partial support plug-in enableRestPosition must be True
pointConstraint Partial support plug-in enableRestPosition must be True
pointMatrixMult OK rumbanode
pointOnCurveInfo Partial support Support the position output
pointOnSurfaceInfo OK rumbanode
poleVectorConstraint Partial support plug-in enableRestPosition must be True
polyEdgeToCurve OK plug-in The result curve is smoother than the original one
plusMinusAverage OK custom
quatToEuler OK plug-in
rebuildCurve Partial support plug-in Only keepRange supported right now
remapValue Partial support plug-in The smooth and spline modes are not 100% accurate
reverse OK rumbanode
reverseCurve OK plug-in
revolve OK plug-in
scaleConstraint Partial support plug-in enableRestPosition must be True
setRange OK rumbanode
shadingEngine Partial support custom Basic diffuse color support
shrinkWrap Partial support plug-in Support inputGeometry, envelope, targetGeom, Points, innerGeom, projection, closestIfNoIntersection, offset, reverse, bidirectional, targetInflation. Don't support the "Parallel To Axes" projection mode.
softMod Partial support plug-in Exported plugs : falloffCurve, falloffInX, falloffInY, falloffInZ, falloffRadius, falloffCenter, preMatrix, weightedMatrix, geomMatrix, weightList, relative, bindPreMatrix. No support for falloffMode Surface.
skinCluster Partial support plug-in The dual quaternion method is supported, assuming dqsSupportNonRigid is True.
transform Partial support custom The limits "enable" plugs are supposed constant.
tangentConstraint Partial support plug-in Only the constraintRotate output is supported
unitConversion OK custom
vectorProduct OK plug-in
wtAddMatrix OK plug-in
tweak OK plug-in
wire Partial support plug-in No support for wireLocator attributes
wrap Partial support plug-in falloffMode not supported, Volume only. Support only influence from mesh. No smoothness support.
Additional plug-ins
DPK_bcs OK support by a proprietary Rumba plug-in
radialBlendShape OK plug-in Based on the original source code

Custom nodes

If your rig uses custom nodes in Maya, you will have to build a Rumba version of them using the Rumba SDK.

In that case, you will also have to provide an exporter plug-in for MTORBA which declares the node, its inputs and outputs. You have lot of exporter samples in module/python/mtorba/exporters/. Place your exporters in a folder and add path of this folder to the MTORBA_USER_EXPORTERS environment variable. MTORBA will load them automatically.