In this tutorial, you'll set up a tension visualization on a deforming mesh and learn the core workflow for using Dynamic Geometry Attributes in your rigging and character FX pipeline. By the end, you'll understand how to visualize stretch and squash data on your meshes.

Dynamic Geometry Attributes Workflow
Before You Start
You'll need:
- A deforming mesh (we'll use a cylinder with a squash deformer in this example)
- Basic familiarity with the Maya Node Editor
- Important: Disable Cache Playback (bottom-right of Maya interface) - cached playback can prevent DGA nodes from updating properly.
Step 1: Set Up Your Scene
Create a simple test scene to see tension in action:
- Create a polygon cylinder in your viewport with sufficient resolution:
- Set Height to 6 and Height Subdivisions to 12 or higher for better tension visualization.
- Set Radius Subdivisions to 8 or higher.
- Add a Squash deformer to the cylinder (Deform > Nonlinear > Squash).
- Animate the squash deformer's Factor attribute (try values between -2 and 2) to see the cylinder compress and stretch.
- Reminder: Ensure Cache Playback is disabled in the timeline controls.
This gives you a mesh that deforms over time - perfect for calculating tension.
Step 2: Prepare Your Node Editor
Set up the Node Editor to show all necessary connections:
- Open the Node Editor (Windows > Node Editor).
- Select your cylinder shape node in the Outliner and add it to the Node Editor.
- Click the expand arrows (top-right of Node Editor) multiple times to show all connections, including the original geometry created by the deformer.
- You should now see both the deformed cylinder shape and the original geometry node.
Step 3: Create the Tension Node
Calculate where the mesh is experiencing stretch and squash:
- In the Node Editor, press Tab or right-click and create a dgaTension node.
- Important: Right-click on the dgaTension node and select "Show All Attributes" (some nodes only show outputs by default).
- Make these connections:
- Connect the original geometry's outMesh to dgaTension's Original Geometry input.
- In the Squash deformer, expand outputGeometry, then connect Output Geometry[0] to dgaTension's Input Geometry.
The dgaTension node now compares your deformed mesh against the original, calculating surface tension based on the deformation.
Step 4: Visualize the Results
Turn those tension values into something you can see:
- Create a dgaVisualizer node in the Node Editor.
- Select the dgaVisualizer node.
- Open the Attribute Editor for the dgaVisualizer node.
- Locate the Solo Attribute in the Visualization Attributes section.
- Make these connections:
- Connect dgaTension's Output Attributes to dgaVisualizer's Input Attributes.
- Connect dgaTension's Output Geometry to dgaVisualizer's Input Geometry.
- Connect dgaVisualizer's Output Geometry to your cylinder shape's inMesh input.
- Set the Solo Attribute value to Stretch.
- In the Node Editor, right-click on the dgaVisualizer node and select "Show All Attributes".
- Enable Color Display: Switch to Modeling mode (top-left menu set) and go to Mesh Display > Toggle Display Colors Attribute.
- Scrub through your timeline. You should now see a heat map on your cylinder showing tension as it deforms.
Fine-Tune the Visualization
Adjust the visualization for better results:
- Select the dgaTension node and open the Attribute Editor.
- Try different settings:
- Tension Mode: UV
- Normalize Tensions : Enable for consistent visualization.
- Max Squash/Stretch: Tune these to the expected values to capture the range better.
- Select the dgaVisualizer node and adjust:
- Visualization Mode: Switch between tension, stretch, and squash.
- Normalization Mode: Set to "Dynamic".
- Color Ramp: Customize the color gradient to your preferences.
Troubleshooting
If you don't see colors on your mesh:
- Ensure "Toggle Display Colors Attribute" is enabled in Mesh Display menu.
- Check that Cache Playback is disabled.
- Verify all node connections are correct.
- Try switching Normalization Mode to "Dynamic".
If nodes don't show input attributes:
- Right-click on each node and select "Show All Attributes".
If colors don't update when scrubbing:
- Disable Cache Playback (this is the most common issue).
- Check that all geometry connections are properly made.
What's Next?
Now that you understand the basic workflow, try these ideas:
- Use the ComponentTagExpression attribute on the dgaTension node to analyze specific areas of your mesh.
- Experiment with Edge and UV calculation methods to see which works best for your geometry.
- Connect tension data to deformer weight lists to drive corrective blend shapes automatically.
- Try the dgaDelta node to compare two completely different mesh states.
Advanced: Arnold Integration (Optional)
For users comfortable with scripting, you can export tension data to Arnold:
- Create a dgaToArray node.
- Expand dgaTension's Output Attributes and connect Output Values to dgaToArray's Input Double Values.
- Connect geometry to dgaToArray's Input Geometry.
- Create a custom attribute using MEL:
addAttr -ln "mtoa_varying_tension" -dt "doubleArray" yourMeshShape;
Note: For more information about naming convention, explore the Arnold userData docs. - Connect dgaToArray's output to the custom attribute.
- Use aiUserDataFloat in your material graph with attribute name "tension".
Dynamic Geometry Attributes gives you precise control over how your characters deform. Whether you're fixing problematic skinning, creating realistic cloth wrinkles, or adding procedural surface detail, this toolset puts the power in your hands.