1
$\begingroup$

My blender keep stucking on "not responding" every few clicks and runs a simple animation at only 7 fps, even though Im in solid mode. I have a fairly good PC but Blender isn't using all it's power. My project has around 800k vertices and zero simulations. I've alredy looked every tutorial to make it's performance better, but I can't solve it. Specs: Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz 32.0 GB 2400 MHz NVIDIA GeForce RTX 3060 - 12GB Windows 10

Here is a printscreen of my task manager while playing the animation. As you can see, Blender don't use half of it's power, but still runs at 7 fps.

Task Manager

I would be very grateful for your help :)

$\endgroup$
7
  • $\begingroup$ I wonder if the ram speed is the bottleneck. Do you know if your system is properly built and taking advantage of both memory channels? If you are comfortable you could try overlooking the memory and see if there is any difference. $\endgroup$ Commented Jul 28, 2023 at 18:53
  • $\begingroup$ 2400MHz that's not a lot indeed. Is that DDR3 memory? How many sticks do you have and - if a tower computer - are they plugged in the right slots? (if you built it yourself, definitely check your motherboard manual for that) $\endgroup$
    – Lauloque
    Commented Jul 28, 2023 at 19:18
  • $\begingroup$ @AllenSimpson Yes, the system is properly built with the memory cards on the right slots, (I've double checked it with an IT technician). I rather try other ways before overclocking it. Thanks for the attention :) $\endgroup$ Commented Jul 28, 2023 at 22:17
  • $\begingroup$ @L0Lock I have four DDR4 sticks and It's in the right slots. Thanks for the answer :) $\endgroup$ Commented Jul 28, 2023 at 22:18
  • $\begingroup$ I would like to see the scene file, just to be sure it's not the issue there. Could you upload it on Blend-Exchange then edit your post to add the link there? Otherwise, maybe consider using the menu Help > Report A Bug, although 2400MHz isn't the ideal ram speed it shouldn't lead to Blender "not responding" every few clicks on a normal scene. $\endgroup$
    – Lauloque
    Commented Jul 28, 2023 at 22:39

2 Answers 2

1
$\begingroup$

On opening your scene, I see that we are not on the "around 800k vertices" already:

enter image description here

Just about a third more, but if you look at a more meaningful data: it's 2M3 triangles. Not a light scene to begin with.

Looking at your scene, I see some areas of improvements. But one bigger than the others:

Simulations are running

When running the playback, during the first time going through the play range I am around 18-20fps, but once it loops back to the beginning I jump to ~400 fps (with unlocked FPS for benchmark purposes, nobody needs nor wants to run at 400fps in the viewport).

This means, things are getting cached down during the first time each of the frames are played (hence the gain of speed once all frames are done caching). And usually, that means physics simulations.

I don't see where you use them, but usually you do simulations separately in an isolated work scene for that sole purpose.

Deleting rigid body simulations seem to do the trick in your scene. To do this, go to Properties Editor > Scene tab > Rigid Body World and click Remove Rigid Body World:

enter image description here

This should already do a lot.

But we can do more if you need to.

For the next steps, read entirely before doing anything to avoid issues down the line.

Disable Auto Smooth

Autosmooth can be nice for obtaining the combination of flat and smooth shaded edges, but it's heavier in calculations, is recalculated on every frame for animated objects, and is; t compatible with GPU subdivision.

So I suggest selecting all objects, go to Properties Editor > Mesh Data tab > Normals panel, hold ⎇ Alt down while unchecking Auto Smooth so that it propagates to all selected objects.

You also have some objects with weighted normals modifiers. Not the least impactful modifiers, you might want to remove them or apply them.

Use instances

You have a lot of objects that are exactly the same. Instead of using full copies, you could use instances. Instead of loading identical objects dozens of times, you load it once for all of its instances. This drastically reduces memory usage, loading and calculation times.

When you want to duplicate an object, instead of using the Duplicate operator with ⇧ ShiftD, use ⎇ AltD to instantiate.

For objects, you already duplicated but would like to turn into instances:

  • Select identical objects, like your chairs
  • Press ⎈ CtrlL > Link Object Data

You could also apply this logic to duplicated parts within a single object if you want. Much like you did here with these 13 identical bars generated from one bar and an array modifier:

enter image description here

If you have identical objects or need to apply some modifiers, do all the other steps before turning them into instances. As you can't apply modifier on instances.

Objects with a lot of unnecessary geometry

To illustrate, I set the viewport shading to flat white, and enabled the wireframe overlay:

enter image description here

ALL the black you see here is just raw wireframe. By raw, I mean it doesn't show any mesh generated by a subdivision modifier, for example.

This tiny rack alone is 65k triangles, and I can't even distinguish them in close up:

enter image description here

Most of this geometry is pretty much indistinguishable in rendering until you are close enough, so you could probably could remove a lot of it and be fine.

And ideally, even if you get close enough, you should have the bulk of your geometry handled by subdivision modifiers instead. Firstly because you can change their level of subdivision manually or automatically (like by using the Simplify like you already do), but also because you can let your GPU handle them for better performances:

enter image description here

If I were you, I would do a pass on all your objects to reduce their mesh density and chose which ones to add a subdivision modifier.

Before doing this: make sure to identify which objects you want to turn into instances. Do these first, then edit the mesh and modifiers of only one of the identical objects. And when selecting objects to turn them into instances : select the one with the new geometry last, so that it is active and is the one used as instances in the others.

Some might be easy to do with just a couple modifiers. Like your chairs:

enter image description here

This could be a lighter mesh with a subdivision modifier instead.

Since the mesh is even and quite obviously obtained from a raw mesh plus a subdivision applied onto it, you can sort-of undo the process by first adding a Decimate modifier, un Un-Subdivide mode and even number of iterations:

enter image description here

Not perfect, but serviceable most of the time, and you can fix the topology afterward if you want.

Apply that modifier, then add a subdivision modifier.

Or you reduce the amount of decimate operations to the highest number you can without weird topology, apply it, then manually remove what you don't need.

Some other objects might be tricky to handle by semi-automated ways, like your cupboards:

enter image description here

Unless you go at it by hand, it will be hard to press a button and not lose the nice curves. But it's still possible to do at least some quick fixes that won't be noticed easily.

Let's try the handle button:

  • ↹ Tab into edit mode
  • Press 2 to toggle edge selection
  • Hold ⎈ Ctrl⎇ Alt and click an edge to select a ring loop: enter image description here
  • Menu Select > Checker deselect to deselect every other edge
  • Menu Select > Select Loops > Edge Loops enter image description here
  • ⎈ CtrlX to dissolve the edges and their vertices.
  • ⎇ Alt LMB LMB some edges in the other way to select their loops and dissolve them, and you can get something like this: enter image description here

Apply this kind of logic to the whole object, and in 30 seconds you end up with this:

enter image description here

Extra tips:

  • In edit mode you can hit F3 and search for "unsubdivide" to unsubdivie a selection of mesh, like does the modifier but with your control on the area of effect
  • To not spend your life clicking the same menus and sub-menus every time (like the checker deselect and loop select), I suggest you RMB RMB them and Add to Quick Favorites Menu. This menu is available via Q and you can add/remove anything you want at any time. A huge time savior when doing repetitive tasks.

It's not much, but if you do this in a few selected places enough, with all the duplicated meshes you have, it will help a lot.


If you do this even sparingly, you will get improvements. In my case, I did a quick pass on a few objects.

BEFORE:
enter image description here

AFTER:
enter image description here

The scenes statistics are very different:

enter image description here

And even though it struggles to playback the frame range the first time, after it went through it once to cache everything, the fps go from ~20 to 400-500.

The difference might not feel like much on my system because we are already at 400 to begin with. But on another system where you could have barely reached 12fps, that could mean hitting the 24fps constant.

Last but not least:

In the outliner, enable the "Disable in viewport" restriction toggle:

enter image description here

When you want to hide objects or collections to have better performances, use that screen icon instead of the eye icon.

$\endgroup$
0
$\begingroup$

Your CPU is the problem; it is very outdated. The Blender viewport (Workbench) relies on single-core CPU performance, not GPU performance, unless it's for rendering with Cycles or Eevee.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .