Documentation / Artist workflowBack to cgdzg.com
Rigid details. Flexible surfaces.

Keep the detail.
Follow the form.

Attach scales, bark, armor plates, and other mesh pieces to a deforming surface. Bring your detail into motion with rigidWrap for Autodesk Maya.

Surface detail illustrationSeparate plates arranged along a curved surface, illustrating rigid details that follow a driver. RIGID DETAILSDRIVER SURFACE
Surface attachmentIllustration
Windows & Linux buildsGPU acceleration availableRigid mesh islandsArtist controls
01 / THE SURFACE

Driver mesh

The deforming surface your details follow, such as a character body or tree trunk.

02 / THE DETAILS

Driven mesh

The detail mesh. Each separate connected shell is treated as one rigid island.

03 / THE STARTING POINT

Bind pose

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.

01

Installation

Use the package supplied for your Maya version and operating system. Follow its release notes for supported configurations and runtime requirements.

Install the module package

  1. Keep the package together

    Place the supplied folder in a stable location. Keep rigidWrap.mod, plug-ins, and scripts in their original arrangement.

  2. Register the installation folder

    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.env · Example path
MAYA_MODULE_PATH=C:/plugins/rigidWrap-1.1.0
  1. Load rigidWrap

    Start Maya. Open Windows → Settings/Preferences → Plug-in Manager and load rigidWrap. Windows builds use rigidWrap.mll; Linux builds use rigidWrap.so.

  2. Open the tool window

    If your package includes the artist interface, run the following in the Python tab of Maya’s Script Editor.

Python · Open rigidWrap
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.

Installing a standalone binary

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.

02

Your first bind

Start with your driver and details in their intended rest pose. A driven mesh can contain many disconnected pieces.

  1. Choose the meshes

    Open the Bind tab. Select the details and click Use Selected beside Driven mesh. Select the deforming surface and repeat beside Driver mesh.

  2. Choose a preset

    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.

  3. Create the attachment

    Click Bind Meshes. Pose or animate the driver and inspect the details. Binding supports Maya Undo/Redo.

  4. Adjust the existing deformer

    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.

Bind tab

Prepare the next attachment

Mesh fields, presets, samples, and region settings apply to the next bind. They do not update an existing node.

Tools tab

Work with an active node

Choose the Active node for contact checks, proxies, and overlays. Changing viewport selection alone does not switch this target.

Bind using MEL or Python

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.

MEL · Bind by name
rigidWrapBind "scaleMesh" "bodyMesh";
Python · Bind by name
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:

Python · Bind selected meshes
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.

03

Binding settings

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.

General Surface

A starting point for details on an open surface. Uses Global driver, spacing, and collision regions.

Local Patch

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.

SettingHow to use it
Samples per islandDefault 16 · UI range 1–64More 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–128Sets neighboring pieces available for spacing and collision. Use enough coverage for the poses you expect; more neighbors increase evaluation cost.
Neighbor radiusDefault 0 = UnlimitedLimits neighbor coverage by bind-pose distance in scene units. Smaller values can exclude pieces that will meet later.
Driver regionGlobal / Local PatchUse 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 PatchUse Driver Patch to keep spacing adjustments within the intended local surface region.
Collision regionGlobal / Driver PatchGlobal 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 / 8Adjust 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.

04

Deformer controls

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.

ControlArtist guidance
EnvelopeMain · Default 1Overall deformation influence. 0 disables the effect; 1 applies the full result. Partial values may change the apparent shape of an island.
Normal OffsetMain · Default 0Move details along the driver’s current normal. Positive values move outward. This offset is separate from collision lift and movement limits.
Rotation StrengthMain · Default 10 follows position only; 1 follows full rotation. Intermediate values reduce rotation while retaining island size before deformation blending.
Rotation StabilityMain · Default 1Helps reduce unstable rotation under severe compression. 0 disables stabilization. It does not set a maximum tilt angle.
RelaxationRelaxation · Default 0Adjust spacing toward the bind arrangement to help with stretched gaps and crowding. 0 is off; 1 is strongest.
Relaxation IterationsRelaxation · Default 4Increase for stronger spacing adjustment across crowded areas, at additional evaluation cost.
Tangent BlendRelaxation · Default 00 allows spacing movement in 3D; 1 restricts it to sliding along the surface. Collision lift has its own control.
Scale X / Y / ZScale · Default 1Resize 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 −1Limit 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 0Pull details back toward their driver-following placement. 0 adds no attraction; 1 pins them completely. Strong attachment can leave overlap unresolved.
Block GPUGPU OverrideEnable 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.
Connect island scale to a rig

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.

MEL · Example scale connections
connectAttr joint1.scaleX rigidWrap1.scaleX;
connectAttr joint1.scaleY rigidWrap1.scaleY;
connectAttr joint1.scaleZ rigidWrap1.scaleZ;
Python · Example scale connections
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.

05

Working with collision

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.

Choose a contact shape

Radius

A starting option for compact, roughly round pieces. Can leave extra visible clearance around long or irregular details.

ConvexHull

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.

ControlHow to use it
CollisionDefault 0 · Range 0–1The 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–1Raise 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 CapsuleChoose Radius, Capsule, or ConvexHull to suit your detail geometry. Inspect the contact shapes when visible gaps seem too large.
Collision ThicknessAdvanced Collision · Default 0.01Minimum contact thickness before XYZ scaling. Actual geometry depth is preserved. Excessive thickness can separate visible pieces too early.
Collision Shape SizeAdvanced Collision · Default 1Size 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–32Higher values can improve crowded contacts, at additional evaluation cost. Tight movement limits or strong attachment can still prevent separation.
Collision LiftAdvanced Collision · Default 00 permits sliding along the surface. Values toward 1 allow outward movement, subject to Max Lift.
Collision SoftnessAdvanced Collision · Default 0.05Higher values soften contact and can leave more overlap. Inspect the result with your chosen iteration count.

A useful starting setup

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.

06

Paint controls

Use Maya’s paintable deformer attributes on the driven mesh to vary spacing and collision across your details.

AttributeEffect
spacingWeightsDefault 1Spacing influence per island. 1 allows spacing correction; 0 disables it for affected relationships.
collisionWeightsDefault 1Collision influence per island. 1 allows response; 0 disables it for affected relationships while leaving spacing available.
spacingBiasDefault 0.5Desired spacing. 0.5 keeps bind spacing; 0 targets 75%; 1 targets 125%.
Standard deformer weightsVertex blendingBlend 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.

07

Proxies & inspection

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.

Check Contacts

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.

Expand Collision Neighbors

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.

Create an animation proxy

  1. Return to the bind/rest pose

    Choose the source node and open Animation proxy in Tools.

  2. Set the proxy options

    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.

  3. Create and use the proxy

    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.

Create a proxy using MEL or Python

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.

MEL · Named animation proxy
rigidWrapCreateProxy -maxVertices 8 -scale 1 -name "scaleAnimProxy" "rigidWrap1";
Python · Named animation proxy
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.

Viewport debug

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.

RadiusCapsuleConvexHullSpacing links
  • Spacing links show spacing neighbors. Collision coverage may differ.
  • X-ray makes hidden overlays visible through other geometry.
  • Lift vectors requires Solve Collision Debug on the debug locator. This displays lift; the deformer’s Collision Lift setting controls movement.

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.

08

Command reference

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.

CommandUse
rigidWrapBindAttach a driven mesh to its driver. Returns the new rigidWrap deformer name. See Your first bind for basic named and selection-based examples.
rigidWrapCreateProxyCreate a reduced animation mesh from a rigidWrap node. Returns the proxy transform name. See Proxies & inspection for MEL and Python examples.
rigidWrapDebugDrawDraw or clear viewport overlays, or request a contact report with -report.
Bind with local attachment and custom coverage

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.

MEL · Local attachment setup
rigidWrapBind
    -sampleCount 8
    -spacingNeighborCount 8
    -spacingNeighborRadius 0
    -driverRegionMode "localPatch"
    -driverRegionRings 12
    -spacingRegionMode "driverPatch"
    -spacingRegionRings 8
    -collisionRegionMode "global"
    "scaleMesh" "bodyMesh";
Python · Local attachment setup
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)
FlagValue
-sampleCount / -scPositive integer. Default 16; smaller islands use at most their vertex count.
-spacingNeighborCount / -sncPositive integer. Default 6 neighbors per island.
-spacingNeighborRadius / -snrNonnegative distance in scene units. Default 0 means unlimited.
-driverRegionMode / -drmglobal (default) or localPatch.
-driverRegionRings / -drrNonnegative integer. Default 12; used with Local Patch.
-spacingRegionMode / -srmglobal (default) or driverPatch.
-spacingRegionRings / -srrNonnegative integer. Default 8; used with Driver Patch spacing.
-collisionRegionMode / -crmglobal (default) or driverPatch.
-collisionRegionRings / -crrNonnegative integer. Default 8; used with Driver Patch collision.
Find nodes and edit existing deformer settings

Find rigidWrap nodes in the scene with Python:

Python · Find rigidWrap nodes
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.

MEL · Configure contact
setAttr "rigidWrap1.collisionStrength" 1;
setAttr "rigidWrap1.collisionMode" 1;
setAttr "rigidWrap1.collisionScale" 1;
setAttr "rigidWrap1.collisionIterations" 16;
setAttr "rigidWrap1.collisionLift" 0.5;
Python · Configure contact
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.

Request a contact report

Returns a JSON snapshot for the current frame without creating a debug locator. In Python, convert the result to a dictionary for inspection.

MEL · Contact report
rigidWrapDebugDraw -report "rigidWrap1";
Python · Read a contact report
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.

Draw and clear viewport overlays

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.

MEL · Draw overlays
rigidWrapDebugDraw -mode all -xray "rigidWrap1";
Python · Draw overlays
import maya.cmds as cmds

locator = cmds.rigidWrapDebugDraw("-mode", "all", "-xray", "rigidWrap1")
print(locator)

When finished, remove the overlays for that node:

MEL · Clear overlays
rigidWrapDebugDraw -clear "rigidWrap1";
Python · Clear overlays
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.

Expand collision neighbors with Python

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.

Python · Expand collision coverage
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.

09

Troubleshooting

Change one setting at a time and compare the result in the same pose.

SymptomWhat to check
Plugin does not loadConfirm 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 failsConfirm the delivery includes the scripts. Check module registration or the supplied script/Python paths, and restart Maya after path changes.
Details do not deformCheck Envelope, the driver connection, and topology warnings. Rebind after topology or driven rest-shape changes.
Details follow the wrong sideInspect the bind pose. Use Local Patch, adjust Driver rings, and rebind with the intended attachment side.
Unexpected rotationCheck patch coverage and Rotation Stability. Severe collapse of the driver can make orientation unreliable.
Pieces separate too earlyInspect the contact shapes. Check Collision Mode, Collision Shape Size, Collision Thickness, and Normal Offset.
Overlap remainsCheck 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 compressionCollision 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 slowTry 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.

Preparing a support request

Include the plugin release, Maya version, operating system, reproduction steps, and exact error messages. Share a minimal example scene when permitted.