Best rigging practice in Maya for efficiency?

At a low level, what are some ways to improve the responsiveness and reduce lag of your Maya scenes? The only concrete thing I know is that expressions are very bad, but is there anything more than that?
For example, when aiming in one axis, is it better to use an aim constraint, or a rotate plane handle? I’m asking because I’m working on a small mechanical unit, and there are going to be up to fifty at a time in the animation scene, so every little counts.
I’d be very grateful for any advice you can give me, this place is amazing.

Utilising matrix nodes rather than constraints where possible is probably a plus.

Also, consider how Maya’s parallel evaluation will interact with your rig, isolating dependency graph connections to minimise cross-evaluation will help (if part A does not require part B to evaluation make sure you do not have any arbitrary connections between them etc).

Also, utilise the DG Profiler. This comes with maya but is exposed as a plugin. Open the plugin manager and enable it. You can then access it via the Window/General menu. This will highlight the ‘hotspots’ on your rig and allow you to target them.

Finally, remember that Maya utilises a lazy evaluation method - it will not calculate everything in the frame, only what it thinks you need to see. With that in mind you may want to consider proxy representations which do not expose all the detail of the moment - perhaps a box representation of meshes parented under only the most obvious deformation points etc.

If you have a large number of nodes all involved in the same calculation you could be adventurous and compile the behaviour down to a single C++ node. Providing all the nodes are always being evaulated to reach the desired result this will also give you a speed gain. With parallel evaluation this will not help if only parts of the calculation are required each frame though.

All in all, start building in a way you’re comfortable with and continuously run the DG profiler to find problem areas.

2 Likes

Thanks very much, that’s really interesting. I never knew about the lazy evaluation, it explains a lot actually.

Some other random tips:

remapValue nodes are a bit lighter than driven keys. Especially if your driven keys are just linear values between 2 keys, you might as well use remapValue instead. (You can’t cycle with them though.)

Expressions are not “really bad” they just evaluate every frame and you have to keep that in mind. They certainly can be a lot slower. The key is to test. Every once in a rare while, expressions are the most feasible solution.

Here is a good article on deformation layering and making sure your rig can work in parallel evaluation. This might be less applicable to use if you are doing mechanical stuff. But it could be interesting. https://medium.com/@charles_76959/deformation-layering-in-mayas-parallel-gpu-world-15c2e3d66d82

1 Like