Curious about linked characters and performance

I’m not complaining or asking for a fix, I’m just genuinely curious as to what is going on ‘under the hood’:

You can make a rigged character of moderate complexity (say, 20k verts, plus some clothing and sundries) that is smooth as butter to manipulate and pose in the viewport, when you have the file where it actually lives open in Blender. But if you make a new file and link/proxy to the original file, while it is still usually usable, it is still significantly slower to pose, or really do anything with that character. At least with things I have tried or used, that’s pretty much universally the case.

There isn’t any obvious (to me) reason why manipulating a linked rigged character ought to be slower than manipulating a local character… but obviously there is a reason, because that is what you can observe the difference.

That said, the performance disparity is far less than in 2.7x, so 2.8 has improved it a lot.

So what causes this? Is using linked data more resource intensive for some reason? Mumble mumble dependency tree mumble?

The only thing that comes to mind right now, is that maybe linked data is not entirely ‘seen’ (loaded) as local data after loading a scene. If so, there’s a lot of I/O going on which will affect performance.
And with all the changes from 2.79 to 2.0 regarding groups & collections, there might be some extra overhead there.

If it’s reproducable every time, I suggest you move to the dev forums, make a proper example case and show them. It might be something simple to fix. :wink:

I don’t think that’s likely to be it, because I am just referring to framerate as you attempt to pose, not anything that (as far as I know) would involve loading new data.

But you’re right, I ought to just make a demonstration example.

By “the dev forums” do you mean rightclickselect, or the bug tracker on githib, or something else I’m not aware of?


I mean the devtalk forum:


Awesome. Thanks!

hey, I’ve been using linked character since a long time and never witnessed some kind of slowdown,
But I haven’t benchmarked it either…

Maybe RobWu is right here , that remind me of something with 2.7* :
We had a props (a bowling ball) that was running quite smooth in the original file, and once linked it was really slowing down.
The issue was , that on the original file there was a second ball that was using booleans in a hidden layer.
(It was an old version keept here as a backup)
On the original file, as the layer was hidden the second ball wasn’t evaluated, so no speed issue .
But once linked, even if the ball wasn’t visible in the scene (it was set as an hidden layer in the group), blender was evaluating the boolean on every change of the rig , and there was a major slowdown.

All that said, the linking/ proxy stuff under the hood isn’t quite complicated. At loading time everything (mesh, armature) is linked into the blend file as if it’s local. With python you can even access all the linked objects and even do stuff with them like changing some modifiers, materials ect… All this is linked into the scene through an instance collection , but there isn’t much difference bettween having stuff local and linked.

Hmm. I’ll look for that. I don’t seem to be able to have any rigged characters that AREN’T slower when linked, unless I just throw together a box and a few bones. I guess I should see if there is something consistent across my rigs.

I just read that again. It’ll evaluate things in the source file even if they aren’t actually linked? O.o That seems like… not the behavior you’d expect.

Does that mean that if you, say, had a saved character with multiple sets of clothing, that you could link individually… that blender would still be evaluating expensive modifiers on clothing sets that you didn’t even link from the scene you are working on?

Or do I misunderstand?

I think you are closer to solve this mystery…
When you are in the original .blend file, blender doesn’t evaluate meshes that aren’t visible ( hide viewport) In the old 2.79 blender skipped evaluation of objects that are on hidden layers as well, I guess it’s the same with the collection system.

When you link a collection, all object inside get evaluated , if there are object that are not in the collection but some objects need it , they get also linked.

Try to take a character, remove all invisible objects like multiples sets of cloth and see if you still get the slowdown.
To solve the issue, you may want to drive visibility of the objects, and/or modifiers like armatures when they are hidden…

I’m curious of the results of your tests !