Driver mesh
The deforming surface your details follow, such as a character body or tree trunk.
Attach scales, bark, armor plates, and other mesh pieces to a deforming surface. Bring your detail into motion with rigidWrap for Autodesk Maya.
The deforming surface your details follow, such as a character body or tree trunk.
The detail mesh. Each separate connected shell is treated as one rigid island.
The intended rest arrangement of the surface and its details when you create the attachment.
Islands retain their shape at full deformation strength. Scale controls, partial Envelope, and painted standard weights can change the final shape.
Use the package supplied for your Maya version and operating system. Follow its release notes for supported configurations and runtime requirements.
Place the supplied folder in a stable location. Keep rigidWrap.mod, plug-ins, and scripts in their original arrangement.
Add the package folder to MAYA_MODULE_PATH before Maya starts, or add it to your Maya version’s Maya.env. Use your actual installation path.
MAYA_MODULE_PATH=C:/plugins/rigidWrap-1.1.0Start Maya. Open Windows → Settings/Preferences → Plug-in Manager and load rigidWrap. Windows builds use rigidWrap.mll; Linux builds use rigidWrap.so.
If your package includes the artist interface, run the following in the Python tab of Maya’s Script Editor.
import rigidWrapUI
rigidWrapUI.show()Windows releases: No activation or license file is required, and there is no expiry.
Licensed Linux releases: Place the supplied rigidWrap.lic beside the plugin binary, or set RIGIDWRAP_LICENSE to its absolute path before starting Maya. Keep the license contents unchanged. Replace the file and restart Maya when renewing.
Browse to the supplied .mll or .so in the Plug-in Manager and load it. A binary-only delivery may omit the Python interface and custom Attribute Editor templates; commands and standard deformer attributes remain available.
If scripts are supplied separately, add their folder to MAYA_SCRIPT_PATH and PYTHONPATH before starting Maya, following your package instructions. On Linux, use your installation path, for example /opt/rigidWrap-1.1.0.
Restart Maya before switching plugin releases. The module package registers the binary and scripts for its matching Maya major version and platform.
Start with your driver and details in their intended rest pose. A driven mesh can contain many disconnected pieces.
Open the Bind tab. Select the details and click Use Selected beside Driven mesh. Select the deforming surface and repeat beside Driver mesh.
Use General Surface for an open surface. Use Local Patch around folds, mouths, or nearby surface regions. Open Advanced binding if you need to adjust coverage.
Click Bind Meshes. Pose or animate the driver and inspect the details. Binding supports Maya Undo/Redo.
Select the rigidWrap node and use Maya’s Attribute Editor for rotation, spacing, scale, attachment, and collision controls.
Collision starts off. New binds use Capsule mode, with Collision = 0 and Collision Shape Size = 1. Raise Collision toward 1 when you need contact correction.
Mesh fields, presets, samples, and region settings apply to the next bind. They do not update an existing node.
Choose the Active node for contact checks, proxies, and overlays. Changing viewport selection alone does not switch this target.
Use the matching tab in Maya’s Script Editor. Replace scaleMesh and bodyMesh with your scene’s mesh names. Choose one example; each call creates a new attachment.
rigidWrapBind "scaleMesh" "bodyMesh";import maya.cmds as cmds
node = cmds.rigidWrapBind("scaleMesh", "bodyMesh")
print(node)To bind from selection, select the driven mesh first and the driver second. Then run rigidWrapBind; in MEL or the following in Python:
import maya.cmds as cmds
node = cmds.rigidWrapBind()
print(node)The interface’s separate mesh fields do not depend on selection order. See the command reference for bind options and everyday scripting tasks.
Use one rigidWrap node per driven mesh. Driver instances are supported; instanced driven shapes are not. For transforms with multiple visible mesh shapes, specify the intended shape.
Set these in Bind → Advanced binding before creating an attachment. To apply different binding settings to an existing setup, remove its rigidWrap deformer and bind again in the intended rest pose.
A starting point for details on an open surface. Uses Global driver, spacing, and collision regions.
Keeps driver attachment and spacing local. Uses a Global collision region so nearby pieces on opposing sides can be included.
Custom preserves your Advanced binding choices. Presets are starting settings; inspect the attachment around gaps and folds.
| Setting | How to use it |
|---|---|
| Samples per islandDefault 16 · UI range 1–64 | More samples can help cover a piece’s attachment area, but add cost and do not always improve the result. Small islands use no more samples than their vertex count. |
| Neighbors per islandDefault 6 · UI range 1–128 | Sets neighboring pieces available for spacing and collision. Use enough coverage for the poses you expect; more neighbors increase evaluation cost. |
| Neighbor radiusDefault 0 = Unlimited | Limits neighbor coverage by bind-pose distance in scene units. Smaller values can exclude pieces that will meet later. |
| Driver regionGlobal / Local Patch | Use Local Patch to help each piece stay attached to its intended surface near folds or gaps. Verify that it follows the correct side. |
| Spacing regionGlobal / Driver Patch | Use Driver Patch to keep spacing adjustments within the intended local surface region. |
| Collision regionGlobal / Driver Patch | Global allows wider contact coverage. Driver Patch restricts it to the chosen local region. Pieces excluded from collision coverage will not respond when they meet later. |
| Driver / Spacing / Collision ringsDefaults 12 / 8 / 8 | Adjust patch coverage in connected driver-face steps. 0 uses the anchor face; 1 includes edge neighbors. Ring settings are active only in the corresponding patch mode. Denser meshes need more rings to cover the same area. |
For a mouth or fold: Start with Local Patch driver attachment, Driver Patch spacing, and a Global collision region. Check both the attachment side and collision coverage in extreme poses before finalizing the bind.
Rebind after changes to driver or driven topology, or edits to the driven rest shape. Ordinary driver animation does not require rebinding. To extend existing collision coverage, see Expand Collision Neighbors.
Edit the active deformer in the Attribute Editor. Controls are grouped into Main, Relaxation, Collision, Scale, Attachment, and GPU Override. Hover controls for additional help.
| Control | Artist guidance |
|---|---|
| EnvelopeMain · Default 1 | Overall deformation influence. 0 disables the effect; 1 applies the full result. Partial values may change the apparent shape of an island. |
| Normal OffsetMain · Default 0 | Move details along the driver’s current normal. Positive values move outward. This offset is separate from collision lift and movement limits. |
| Rotation StrengthMain · Default 1 | 0 follows position only; 1 follows full rotation. Intermediate values reduce rotation while retaining island size before deformation blending. |
| Rotation StabilityMain · Default 1 | Helps reduce unstable rotation under severe compression. 0 disables stabilization. It does not set a maximum tilt angle. |
| RelaxationRelaxation · Default 0 | Adjust spacing toward the bind arrangement to help with stretched gaps and crowding. 0 is off; 1 is strongest. |
| Relaxation IterationsRelaxation · Default 4 | Increase for stronger spacing adjustment across crowded areas, at additional evaluation cost. |
| Tangent BlendRelaxation · Default 0 | 0 allows spacing movement in 3D; 1 restricts it to sliding along the surface. Collision lift has its own control. |
| Scale X / Y / ZScale · Default 1 | Resize islands along bind-world axes. Equal values give uniform scale. These settings also affect spacing, contact size, and movement limits. |
| Max Slide / Max LiftAttachment · Default −1 | Limit spacing and contact movement: −1 is unlimited; 0 locks that movement. Positive values specify distances before XYZ scaling. Normal Offset remains separate. |
| Attachment StrengthAttachment · Default 0 | Pull details back toward their driver-following placement. 0 adds no attraction; 1 pins them completely. Strong attachment can leave overlap unresolved. |
| Block GPUGPU Override | Enable to force CPU evaluation. Disable to allow Maya’s GPU evaluation when eligible. Actual activity and performance depend on Maya, your hardware, and the scene. |
For a joint-driven setup, connect each matching scale axis to the deformer. Uniform scaling requires equal values on all three axes. Island scale uses bind-world axes, so check directional scaling on your rig.
connectAttr joint1.scaleX rigidWrap1.scaleX;
connectAttr joint1.scaleY rigidWrap1.scaleY;
connectAttr joint1.scaleZ rigidWrap1.scaleZ;import maya.cmds as cmds
cmds.connectAttr("joint1.scaleX", "rigidWrap1.scaleX")
cmds.connectAttr("joint1.scaleY", "rigidWrap1.scaleY")
cmds.connectAttr("joint1.scaleZ", "rigidWrap1.scaleZ")Replace joint1 and rigidWrap1 with your rig’s names. Each destination must be available for a new connection.
Use collision to reduce overlap between rigid islands as the driver deforms. Intentional overlap in the bind pose is preserved. Collision acts between detail pieces; it does not prevent intersection with the driver surface.
Check neighbor coverage. Collision uses the neighbors included in your bind. Pieces outside that coverage will not respond when they meet later. Expand coverage in Tools or rebind with suitable neighbor and region settings.
A starting option for compact, roughly round pieces. Can leave extra visible clearance around long or irregular details.
A practical starting point for elongated pieces and interactive work. Inspect clearance around tapered ends.
Choose when a closer contact fit matters. Inspect the result on curved, thick, or irregular pieces.
Contact shapes can bridge concave areas and holes. Use Tools → Viewport debug to inspect them. Changing Collision Mode does not require rebinding.
| Control | How to use it |
|---|---|
| CollisionDefault 0 · Range 0–1 | The main contact amount (collisionStrength). 0 is off; 1 applies the strongest response. Lower values soften contact. Maximum strength does not guarantee complete separation. |
| Collision Slide BiasDefault 0 · Range 0–1 | Raise to favor sliding along a piece’s long axis and reduce sideways drift. Strong bias can leave more overlap. Works in every shape mode without rebinding. |
| Collision ModeAdvanced Collision · Default Capsule | Choose Radius, Capsule, or ConvexHull to suit your detail geometry. Inspect the contact shapes when visible gaps seem too large. |
| Collision ThicknessAdvanced Collision · Default 0.01 | Minimum contact thickness before XYZ scaling. Actual geometry depth is preserved. Excessive thickness can separate visible pieces too early. |
| Collision Shape SizeAdvanced Collision · Default 1 | Size of the contact shape (collisionScale). Smaller values shrink it; larger values expand it. 0 disables collision. Size changes preserve authored bind overlap and do not require rebinding; they do not add clearance to the rest pose. |
| Collision IterationsAdvanced Collision · Default 16 · Range 1–32 | Higher values can improve crowded contacts, at additional evaluation cost. Tight movement limits or strong attachment can still prevent separation. |
| Collision LiftAdvanced Collision · Default 0 | 0 permits sliding along the surface. Values toward 1 allow outward movement, subject to Max Lift. |
| Collision SoftnessAdvanced Collision · Default 0.05 | Higher values soften contact and can leave more overlap. Inspect the result with your chosen iteration count. |
For details that should follow compression until they touch, start with Relaxation = 0 and Collision Shape Size = 1, then raise Collision as needed. Collision separates contacting pieces; use Relaxation when you want to adjust stretched spacing.
Collision is approximate. Extreme bends, crowded details, tight movement limits, or strong attachment can leave visible intersections. Check representative poses with both viewport inspection and Check Contacts.
Use Maya’s paintable deformer attributes on the driven mesh to vary spacing and collision across your details.
| Attribute | Effect |
|---|---|
spacingWeightsDefault 1 | Spacing influence per island. 1 allows spacing correction; 0 disables it for affected relationships. |
collisionWeightsDefault 1 | Collision influence per island. 1 allows response; 0 disables it for affected relationships while leaving spacing available. |
spacingBiasDefault 0.5 | Desired spacing. 0.5 keeps bind spacing; 0 targets 75%; 1 targets 125%. |
| Standard deformer weightsVertex blending | Blend vertices toward the original detail mesh. Partial weights can change a piece’s apparent rigidity. |
Custom spacing and collision maps act per rigid island. Keep values consistent across a piece when you want a uniform response.
Open Tools and choose the Active node, or select its driven mesh and click Use Selected. The chosen node remains the tool target when viewport selection changes.
Click Check Contacts for a snapshot of unresolved contact and maximum penetration at the current frame. It creates no scene nodes. Run it again after changing a pose or settings.
Read the report alongside the viewport. Check Contacts measures collision shapes before Envelope and standard vertex-weight blending. It does not measure exact final mesh intersections. Permitted bind-pose overlap is not necessarily an unresolved contact.
Use this button when an existing bind needs wider collision coverage. It extends contact coverage through existing neighbors while keeping the attachment and spacing setup. It can be used at any animation frame and supports Undo.
Inspect the result before expanding again. More coverage can change motion and increase evaluation cost. Expansion can reach beyond the original bind radius or local collision region; it cannot connect separate groups that have no existing neighbor links. Rebind when the required pieces still remain excluded.
Choose the source node and open Animation proxy in Tools.
Maximum vertices per island defaults to 16, with a minimum of 3. Increase it for a closer visual match. Scale defaults to 1; leave Name blank for an automatic name.
Click Create Proxy. Hide the high-resolution mesh in the viewport while animating, then check the original for final review.
The proxy starts with copied deformer settings and transferred paint weights, but uses a separate deformer. Later edits do not synchronize automatically. Inspect shape quality and material assignments. Reduced vertex count does not simplify the original contact shapes, so collision cost may remain significant.
Run in the bind/rest pose. Choose one example and replace the source node and proxy name as needed. -maxVertices sets the reduction budget; -scale 1 keeps the original piece size.
rigidWrapCreateProxy -maxVertices 8 -scale 1 -name "scaleAnimProxy" "rigidWrap1";import maya.cmds as cmds
proxy = cmds.rigidWrapCreateProxy(
"-maxVertices", 8,
"-scale", 1.0,
"-name", "scaleAnimProxy",
"rigidWrap1"
)
print(proxy)Hide the original detail mesh in the viewport while working with the proxy.
Open Viewport debug. Choose Current footprint to follow the active collision mode, or preview Radius, Capsule, Convex hull, or All footprints. Click Draw / Refresh to apply the display options and Clear Debug to remove overlays.
Previewing a shape does not change Collision Mode. Turn off costly debug displays when measuring playback performance. The Attribute Editor also provides Draw Debug, Clear Debug, and Open Tool shortcuts.
Use these examples in Maya’s Script Editor with rigidWrap loaded. Run MEL in the MEL tab and Python in the Python tab. Replace example mesh, node, and joint names with names from your scene.
Binding examples are alternatives: run one in the intended rest pose. Setting a bind option creates a new attachment; it does not edit an existing node. Python examples use the same flag names as MEL, passed as flag/value arguments.
| Command | Use |
|---|---|
rigidWrapBind | Attach a driven mesh to its driver. Returns the new rigidWrap deformer name. See Your first bind for basic named and selection-based examples. |
rigidWrapCreateProxy | Create a reduced animation mesh from a rigidWrap node. Returns the proxy transform name. See Proxies & inspection for MEL and Python examples. |
rigidWrapDebugDraw | Draw or clear viewport overlays, or request a contact report with -report. |
This example uses 8 samples and 8 neighbors per island, Local Patch attachment, Driver Patch spacing, and Global collision coverage. Adjust these values for your mesh and expected poses.
rigidWrapBind
-sampleCount 8
-spacingNeighborCount 8
-spacingNeighborRadius 0
-driverRegionMode "localPatch"
-driverRegionRings 12
-spacingRegionMode "driverPatch"
-spacingRegionRings 8
-collisionRegionMode "global"
"scaleMesh" "bodyMesh";import maya.cmds as cmds
node = cmds.rigidWrapBind(
"-sampleCount", 8,
"-spacingNeighborCount", 8,
"-spacingNeighborRadius", 0.0,
"-driverRegionMode", "localPatch",
"-driverRegionRings", 12,
"-spacingRegionMode", "driverPatch",
"-spacingRegionRings", 8,
"-collisionRegionMode", "global",
"scaleMesh", "bodyMesh"
)
print(node)| Flag | Value |
|---|---|
-sampleCount / -sc | Positive integer. Default 16; smaller islands use at most their vertex count. |
-spacingNeighborCount / -snc | Positive integer. Default 6 neighbors per island. |
-spacingNeighborRadius / -snr | Nonnegative distance in scene units. Default 0 means unlimited. |
-driverRegionMode / -drm | global (default) or localPatch. |
-driverRegionRings / -drr | Nonnegative integer. Default 12; used with Local Patch. |
-spacingRegionMode / -srm | global (default) or driverPatch. |
-spacingRegionRings / -srr | Nonnegative integer. Default 8; used with Driver Patch spacing. |
-collisionRegionMode / -crm | global (default) or driverPatch. |
-collisionRegionRings / -crr | Nonnegative integer. Default 8; used with Driver Patch collision. |
Find rigidWrap nodes in the scene with Python:
import maya.cmds as cmds
print(cmds.ls(type="rigidWrap") or [])The following setup enables contact, uses Capsule shapes, and allows outward lift. It changes an existing node without rebinding. Inspect the result before using these values in your final scene.
setAttr "rigidWrap1.collisionStrength" 1;
setAttr "rigidWrap1.collisionMode" 1;
setAttr "rigidWrap1.collisionScale" 1;
setAttr "rigidWrap1.collisionIterations" 16;
setAttr "rigidWrap1.collisionLift" 0.5;import maya.cmds as cmds
node = "rigidWrap1"
cmds.setAttr(node + ".collisionStrength", 1.0)
cmds.setAttr(node + ".collisionMode", 1)
cmds.setAttr(node + ".collisionScale", 1.0)
cmds.setAttr(node + ".collisionIterations", 16)
cmds.setAttr(node + ".collisionLift", 0.5)Collision Mode values are 0 = Radius, 1 = Capsule, and 2 = ConvexHull. Collision Lift still respects Max Lift. Use the same setAttr pattern for other deformer controls.
Read a setting with getAttr "rigidWrap1.collisionStrength"; in MEL or cmds.getAttr("rigidWrap1.collisionStrength") in Python.
For a CPU comparison, run setAttr "rigidWrap1.blockGPU" 1; in MEL or cmds.setAttr("rigidWrap1.blockGPU", 1) in Python. Set the value back to 0 to allow GPU evaluation again.
Returns a JSON snapshot for the current frame without creating a debug locator. In Python, convert the result to a dictionary for inspection.
rigidWrapDebugDraw -report "rigidWrap1";import json
import maya.cmds as cmds
report = json.loads(cmds.rigidWrapDebugDraw("-report", "rigidWrap1"))
print("Collision enabled:", report["collisionEnabled"])
print("Unresolved contacts:", report["unresolvedContactCount"])
print("Maximum excess penetration:", report["maxPenetration"])Reports describe contact shapes before Envelope and standard weight blending. Rerun after changing a pose or settings, and compare with the visible mesh.
Preview all contact shapes through scene geometry. Use current instead of all to display only the node’s active shape. Other mode values are radius, capsule, and convexHull.
rigidWrapDebugDraw -mode all -xray "rigidWrap1";import maya.cmds as cmds
locator = cmds.rigidWrapDebugDraw("-mode", "all", "-xray", "rigidWrap1")
print(locator)When finished, remove the overlays for that node:
rigidWrapDebugDraw -clear "rigidWrap1";import maya.cmds as cmds
cmds.rigidWrapDebugDraw("-clear", "rigidWrap1")Optional display flags include -noEdges to hide spacing links, -noXray to respect viewport depth, and -lift for lift vectors. Lift vectors require Solve Collision Debug on the debug locator. Display options do not change the deformer’s Collision Mode.
This helper is available when the supplied scripts include rigidWrapCollision.py. It performs the same undoable expansion as Tools → Expand Collision Neighbors. It can be used at any animation frame.
import rigidWrapCollision
summary = rigidWrapCollision.expand_neighbors("rigidWrap1", rings=2)
print(summary)Inspect the result before repeating. More coverage can change motion and increase evaluation cost. Use Maya Undo to restore the previous coverage.
Change one setting at a time and compare the result in the same pose.
| Symptom | What to check |
|---|---|
| Plugin does not load | Confirm the binary matches your Maya version and operating system. Check package runtime requirements and, for licensed Linux releases, the supplied license. Windows releases do not require activation. Record the exact Maya error. |
| Interface import fails | Confirm the delivery includes the scripts. Check module registration or the supplied script/Python paths, and restart Maya after path changes. |
| Details do not deform | Check Envelope, the driver connection, and topology warnings. Rebind after topology or driven rest-shape changes. |
| Details follow the wrong side | Inspect the bind pose. Use Local Patch, adjust Driver rings, and rebind with the intended attachment side. |
| Unexpected rotation | Check patch coverage and Rotation Stability. Severe collapse of the driver can make orientation unreliable. |
| Pieces separate too early | Inspect the contact shapes. Check Collision Mode, Collision Shape Size, Collision Thickness, and Normal Offset. |
| Overlap remains | Check Collision strength, Collision Shape Size above 0, painted collision influence, and neighbor coverage. Review iterations, Attachment Strength, Max Slide, and Max Lift. Expand neighbors or rebind if needed. |
| Gaps remain during compression | Collision does not attract separated pieces. For details that should follow the driver until contact, try Relaxation at 0 and Collision Shape Size at 1. Use Relaxation when you need spacing adjustment. |
| Playback is slow | Try an animation proxy, hide the original, disable expensive overlays, and reduce unnecessary iterations. Compare Block GPU on and off. GPU eligibility does not guarantee faster playback. |
Include the plugin release, Maya version, operating system, reproduction steps, and exact error messages. Share a minimal example scene when permitted.