I put some things into collections that only really need to show up at render time. I got it down to 2.8M verts and only 646 objects. Selection, moving things around, etc seem nice and fast.
I can hit play and it keeps up.
And if I put a keyframe on one object, just one keyframe, the fps drops down to about 4. Delete the keyframe? Still 4 until I clean up unused data.
I started hiding one thing after another and finally figured Something out, but it baffles me.
One assembly is linked in every product. It has an armature with a couple of driven animations. It’s a rubber flap on an AC and a DC plug. It had some sharp spots in the data so I also added a bevel modifier with those edges to be bevelled, and a weighted normal after that. But I had them disabled in the viewport. But the armature was showing.
I switched to matcop and switched on backface culling. I was getting 8fps and only have 1 LocRot keyframe on 1 parent. That’s it.
If I disable the armature modifier also it goes from 8-14fps. Hide just the copy of the object with that on it and it goes up to 60fps, which seemed to be where my machine maxes out no matter what, and that’s fine.
It seems odd to me that even if the modifiers are disabled, it still makes things crazy slow, up until the object is hidden from the viewport. But anyway that’s ok for me. I can see the bones moving to know if the door is open or closed visually in the viewport. It’s just that troubleshooting odd behaviors like this in blender is somewhat infuriating.
I started enabling more and had to turn off the handles too. And then I realized the common denominator is that the objects are using drivers. For the handles I had 2 versions, but the only difference was the length of something, so I mirrored them and “stored” each version by moving an empty back and forth to control the length. I only needed 2 lengths, so using a driver was easy to just have it as 0/1, basically short or long. Then I used a driver to put the handles up/down. That seemed easier than dealing with constraints in this case. Who knew simply having a driver would cause my scene to grind to a hault? (hint: it wasn’t me)
Unfortunately I can’t share the scene because it’s client data. It’s all public though, so I could show people, but I’m not comfortable asking the client if it’s ok to have a video out there in the public until after I deliver. But if someone were willing and interested I’d be happy to walk through it via screen share.