0
$\begingroup$

I have a complex character rig. Its a Rigify rig base, but with a bunch of other stuff i've added, like a custom face rig. Somewhere in the process of building it all, the performance has gone down. Its now quite slow when attempting to pose things. The rig is slow on its own even when all armatures are disabled, so I know the problem is somewhere in the rig.

I'm trying to find out if there's any tools or debug options that can help me narrow down what part of the rig is causing the slow performance. I don't know if its one problem driver or constraint causing a big slow down, or a bunch of things contributing.

Of course, I can delete parts of it a bit at a time and see if that helps, and then narrow it down from there. But if there's some better way to approach this, I'd like to know!

$\endgroup$
1
$\begingroup$

To begin with, are you sure that the rig itself is a problem? I mean what if you delete everything except the armature(s)? Will it remain being hard for FPS of your scene. I've made & seen different rigs, including very complex, but I've never seen FPS going down because of Armature constraints/drivers/whatever. But OK, if the rig is the problem, I'd start with these suggestions:

  • cyclic dependencies: bone/object/property A somehow depends on bone/object/property B while bone/object/property B somehow depends on bone/object/property A (constraints, drivers, parent-child relationships - and take hierarchy into account, because it's often
    quite not obvious, that 10th child of bone A depends on 12th child of bone B & vice cersa); you can check if there any cyclic dependencies in your file by toggling the command line, it will be shown there
    along with some other helpful info: errors, missing paths, lost drivers and so on;

  • action constraints: I've noticed that among all the constraints Action constraints are the hardest ones - especially when there are 100+ of them (I had even much more when made the rig with large amount of facial emotions);

  • drivers with complex logic: large expressions with many variables and modifiers can potentially slow down FPS;

  • driven shape keys: if you use shape keys with drivers on them, it can really slow down the scene, I had mesh with 50+ driven shape keys and it had been freezing my FPS like hell, and when I tried to delete
    them all, FPS increased from 5 to 30;

  • other complex modifiers: OK, let's say there's no more Armature modifiers and our mesh is no longer connected to its rig (well, at least - it's no longer obviously connected); but what about other modifiers? Lattice, Mesh Deform, Laplacian Deform and other deformers like that can catastrophically reduce your FPS.

So, there's no scripted way to find the bottleneck of Mesh-Rig relationships, and I just tried to mention some of the approaches I use in my work.

$\endgroup$
1
  • $\begingroup$ In the case of the problem that caused me to make the original post, it was a Shrinkwrap constraint that I thought I had deleted but was left on, and was to an object with a bunch of subsurf on. It took awhile to find it. So it would have been nice if there were tools that could have told me what was taking what amount of time on the rig to resolve, or something. $\endgroup$
    – Ascalon
    Jul 21 '20 at 19:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.