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
MTORBA is automatically installed in your Maya version by the Rumba installer.
To install it manually, copy the module/mtorba.mod
file in your Maya/modules
directory edit it, and replace path_to_mtorba
by the path to your Maquina/mtorba/module 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
Note that mayapy does not set the user workspace. Texture paths can’t be exported relative to the project workspace and are absolute.
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 will 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")
Workspace and texture filenames
If using a workspace and exporting from Maya (not from mayapy), the texture filenames are exported relative to the current project workspace. The workspace has to be also set in Rumba to find them.
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 those dynamic plug type are supported : string, integer, enum, float, 2 floats, 3 floats, boolean, matrix, nurbsSurface, nurbsCurve, mesh, compound, array
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 from the Rumba features, you can do some extra work on it.
The root node
All your asset’s geo and rig must be contained in a single Maya Group node. This node is your root node. This Group node will also contain your manipulators group.
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
By default, MTORBA assumes that the Transform objects with a nurbsCurve or a camera shape are the rig controllers.
You can change this behavior adding a rumba_controller boolean dynamic attribute on any Transform node. You can use the Set As Controller shelf command to mark the selected transforms.
The controller attributes (scale, rotate, translate, visibility and its dynamic attributes) are exposed in the Assets node and are available for animation in Rumba.
Note 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 |
aimMatrix | OK | plug-in | |
animBlendNodeAdditiveFA | OK | rumbanode | |
animBlendNodeAdditiveRotation | OK | plug-in | |
animCurve | OK | custom | |
angleBetween | OK | plug-in | |
arcLengthDimension | OK | plug-in | |
avgCurves | Partial support | plug-in | No support for normalizeWeights and automaticWeight |
bezierCurve | Partial support | plugin | |
blendColors | OK | rumbanode | |
blendMatrix | OK | rumbanode | |
blendShape | Partial support | plug-in | Support only weight, origin, baseWeights, inputGeomTarget, inputPointsTarget, inputComponentsTarget and targetWeights |
blendTwoAttr | OK | custom | |
blendWeighted | OK | plug-in | |
camera | Partial support | plug-in | Support only focalLength, cameraAperture, nearClipPlane, farClipPlane, orthographic and orthographicWidth |
choice | OK | plug-in | |
clamp | OK | rumbanode | |
closestPointOnSurface | OK | plug-in | |
cluster | Partial support | plug-in | Exported plugs : preMatrix, weightedMatrix, geomMatrix, weightList, relative, bindPreMatrix, matrix |
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 and outRotate outputs are 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 |
combinationShape | OK | plug-in | |
curveFromMeshEdge | OK | plug-in | |
curveFromSurfaceIso | Partial support | rumbanode | No support for maxValue, minValue, relative and relativeValue |
curveInfo | Partial support | plug-in | arcLength and controlPoints support |
dagContainer | Partial support | ||
decomposeMatrix | OK | plug-in | |
deformBend | OK | plug-in | No handle display |
deformSquash | OK | plug-in | No handle display |
deformSine | OK | plug-in | No handle display |
deleteComponent | Partial support | plug-in | Support only for faces and edges deletion |
deltaMush | Partial support | plug-in | The scale attribute is not supported |
detachCurve | OK | plug-in | |
distanceBetween | OK | rumbanode | |
distanceDimShape | OK | rumbanode | |
eulerToQuat | OK | plug-in | |
expression | Partial support | plug-in | Everything supported (including "python" calls), excepted : time, frame, print, random functions, matrix, vectors with a size != than 3, deffereddEval. |
fitBspline | Partial support | plug-in | No tolerance support. |
floatCondition | OK | plug-in | |
floatMath | OK | plug-in | |
floatLogic | OK | plug-in | |
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 | Partial support | ||
ikHandle | Partial support | custom | Support the RPSolver, the SCSolver, the SplineSolver and the ikSpringSolver. RPSolver results with more than two segments are approximated. |
ikEffector | Partial support | custom | |
inverseMatrix | OK | plug-in | |
joint | Partial support | custom | |
locator | Partial support | rumbanode | |
loft | Partial support | custom | Support the input curves, degree, close, autoReverse, reverseSurfaceNormals, uniform and sectionSpans. |
makeNurbCircle | OK | plug-in | |
makeThreePointCircularArc | OK | plug-in | |
mesh | Partial support | custom | |
motionPath | Partial support | plug-in | No support for bank. Incorrect result if frontAxis == upAxis. |
multDoubleLinear | OK | rumbanode | |
multiplyDivide | OK | rumbanode | |
multMatrix | OK | custom | |
nearestPointOnCurve | OK | plug-in | |
network | Partial support | rumbanode | Export a basic Node |
nonLinear | Partial support | plugin | Support for bend, squash, sine and twist only |
nurbsCurve | Partial support | plugin | |
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 |
offsetSurface | Partial support | plug-in | Support only the "Surface fit" mode. The result surface is slightly different than Maya. |
orientConstraint | Partial support | plug-in | enableRestPosition must be True |
pairBlend | OK | plug-in | |
parentConstraint | Partial support | plug-in | enableRestPosition must be True |
pickMatrix | OK | plug-in | |
place2dTexture | OK | plug-in | |
plusMinusAverage | OK | plug-in | |
pointConstraint | Partial support | plug-in | enableRestPosition must be True |
pointMatrixMult | OK | rumbanode | |
pointOnCurveInfo | OK | Curvature center and radius are wrong if the shape matrix has non-uniform scale. | |
pointOnSurfaceInfo | OK | rumbanode | |
poleVectorConstraint | Partial support | plug-in | enableRestPosition must be True |
polyCloseBorder | Partial support | plug-in | no component support, fill all opened edges |
polyEdgeToCurve | OK | plug-in | The result curve is smoother than the original one |
polyExtrudeFace | Partial support | plug-in | No curve nor taper support. Approximated in concave corners. Transform attributes are also approximated. |
polyMergeVert | Partial support | plug-in | UV and vertex color are not correctly merged |
polyMoveVertex | Partial support | plug-in | no gain and random support |
polyNormal | Partial support | plug-in | support for the reverse mode only |
polyTweak | OK | plug-in | |
proximityPin | OK | plug-in | No support for nurbs curve geometries |
quatToEuler | OK | plug-in | |
ramp | OK | plug-in | |
rebuildCurve | Partial support | plug-in | Only keepRange, spans and keepControlPoints supported right now |
rebuildSurface | Partial support | plug-in | Only keepRange, direction, spans, degree and keepControlPoints are 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 | |
rotateHelper | 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. |
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. Supports normalizeWeights == Post. |
textureDeformer | Partial support | plug-in | Support ramp and place2dTexture expression. No support for the tangent vector space. |
transform | Partial support | custom | The limits "enable" plugs are supposed constant. |
tangentConstraint | Partial support | plug-in | Only the constraintRotate output is supported |
transformGeometry | Partial support | plug-in | No support for normal attributes |
unitConversion | OK | plug-in | |
uvPin | OK | plug-in | No support for nurbs curve geometries |
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 | |||
cvWrap | OK | plug-in | Based on the original source code |
DPK_bcs | OK | support by a proprietary Rumba plug-in | |
radialBlendShape | OK | plug-in | Based on the original source code |
mgear_curveCns | OK | plug-in | Based on the original source code |
mgear_ikfk2Bone | OK | plug-in | Based on the original source code |
mgear_intMatrix | OK | plug-in | Based on the original source code |
mgear_inverseRotOrder | OK | plug-in | Based on the original source code |
mgear_matrixConstraint | OK | plug-in | Based on the original source code |
mgear_mulMatrix | OK | plug-in | Based on the original source code |
mgear_rollSplineKine | OK | plug-in | Based on the original source code |
mgear_slideCurve2 | OK | plug-in | Based on the original source code |
mgear_springNode | OK | plug-in | Based on the original source code |
mgear_squashStretch2 | OK | plug-in | Based on the original source code |
weightDriver | 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.