Blender Object Mode Performance

Yea, for sure :d

Aras (developer that worked on optimizing obj importer) wrote in his cool blog

in order to fully “import” this 2.5GB OBJ file into Blender, right now 7 seconds are spent loading & parsing the OBJ file, and then 38 seconds are doing something with the parsed data, until it’s ready to be used by a user inside Blender. For reference, this “other work” time breakdown is roughly:

  • 20 seconds - ensuring that object names are unique. Blender requires objects to have unique names, and the way it’s implemented right now is basically quadratic complexity with the scene object count. Maybe I should finish up some WIP code
  • 10 seconds - assigning materials to the objects. Note, not creating materials, but just assigning them to object material slots. Likely some optimization opportunity there; from a quick look it seems that assigning a material to an object also needs to traverse the whole scene for some reason (wut?).
  • 10 seconds - some processing/calculation of normals, after they are assigned from the imported data. I don’t quite understand what it does, but it’s something heavy :slight_smile:

20s out of 45s just for unique names, why are those even unique? why names and not some other easily generatable uuid?

Does users even benefit from having unique names? For me personally they are hassle when things that i export have to have proper names and not some “.001” suffixes.

I hope BF hire someone like Aras to work just on optimizing Blender.

btw checkout his “wip code” naming and moana scene D14162
edit: damn, he even already made patch for this assigin materials problem D15145

5 Likes

Yeah, I’m hoping Aras gets an itch to tackle some of these.

1 Like

If you produce advertisments for automobile or mechanical engineering or plant construction companies you deal with large CAD geometries which you have little time to optimize.
I think this is a common use case.

It probably depends on your location but here in Germany it seems like every other job has something to do with importing large CAD assemblies.

4 Likes

Ask the community to vote - with money - for the things they want most. The massive Blender user base is not being inspired to donate nearly as much as they could. Perhaps it is time to rethink allowing people to donate towards specific goals.

5 Likes

There is a very good reason why Krita went from specific donations to general ones. Specific goals are not sustainable and can not cover all the other work that has to be done.
What might be an option in my opinion is that the developers let the community vote on a feature once or twice a year (features may have been inspired by the community, but the developers need to pick the suitable ones for the vote).

7 Likes

Some things are very low hanging fruit and the community needs a way to nudge the devs towards doing them or attract an external dev with blender experience to cash in on that simple task while doing it in a way that is more likely to get accepted by the internal devs.

For example, Looptools Bridge should probably replace the native Bridge Edge Loops (or combine the 2) and Looptools Circle is far more useful in 2 dimensional situations than the native Mesh > Transform > To Sphere. Looptools Circle should really be available by default without having to activate an addon. Everything else from Looptools can stay in an addon but those 2 should probably become native and I think quite a few hundred people would be willing to put $5 towards making that happen.

I think there are many people who have spent $5 or more on an addon who would be willing to spend another $5 or more just to get ONE feature of the addon natively into blender.

Also, fillet curve. That would be awesome as an active tool like it is in Affinity Designer
https://affinity.help/designer/en-US.lproj/index.html?page=pages/CurvesShapes/corneringShapes.html?title=Cornering%20shapes

https://affinity.serif.com/en-us/tutorials/designer/desktop/video/301808178/

2 Likes

Unfortunately the same reason this community addon (which means non official) is disabled by default is the same reason why the always used node wrangler isn’t either… So yeah seems like a dev policy or something, but indeed is a ridiculous idea to not have this enabled by default…

I never thought of using to sphere to regularize a quad grid or edge loops, that feature is more for a solid object (i.e a quad sphere, even tho that’s not necessary anymore since that primitive already comes perfectly spherical)

hmmm i dont think so, native bridge edge loops is way more feature complete than loops tools but of course more features to get extra results are welcome, for example to create custom profiles like sweeping and etc…

here is an small comparison:

in blender is very easy and flexible to bridge anything, from vertices to polygons:

Screenshot 2022-06-15 205335
Screenshot 2022-06-15 205400

in the other hand 3dsmax is more context selection sensitive, which in my opinion looks unintuive to me to work with, and you cant bridge vertices for what it looks like, edge loop bridging doesnt work well except if you pick two edges, border bridging does what is expected, polygon the same but deletes the base polygons from where is extruded (probably unwanted)…




If it was simple, I am quite sure someone would have started a business just doing that. The coding side would likely be doable, but for most developers, the communication would highly likely end up being a nightmare. (I considered doing something like that and the reason why I decided against it was the amount of stakeholders.)
And as you can see, with your low hanging fruits, there is already a reply with a different opinion on certain aspects. This is how a seemingly simple task can easily blow up into a communication nightmare.

2 Likes

These exact use cases are the real problems that hold Blender back, and not allowing it to become robust and super efficient. These are the “hard benchmarks” and stress test the software in real and practical conditions.

I think that we must abandon the entire mindset related to:

  • “well: at least it’s free”
  • “if you don’t like it, just use 3dsmax”
  • “no you must not do that (use a workaround)”

No this type of thinking is unacceptable and unprofessional. Blender developers have to really think in real terms what is going on rather than focusing on new shiny features.

4 Likes

Community addons authors doesn’t want, or can’t guarantee that their addons work with stable versions of Blender at launch, that’s why “community” addons do exists: Devs recognize these addons are useful, but the authors just don’t have the time to sync their addons with BF schedule, and they can break when newer versions of Blender are released for some hours/days after release. Blender official add-ons authors guarantee that their add-ons will work when stable releases of Blender happens, and some of these are coded and fixed by developers themselves, and tend to work even on Alpha/Beta releases of Blender.

Some people find community addons useful, and is understandable they want these enabled by default. But these are included in the “community” group for a reason: BF Devs hope they work, but cannot guarantee they will do.

2 Likes

What kind of shiny new features are they working on that don’t solve real problems?

2 Likes

Nearly all of the Blender releases since 2.80 has (together) brought critically needed performance improvements to a number of core areas (Undo/Redo, editmode, OpenSubDiv, outliner, Import/Export, vertex/texture painting, ect…). Shiny new stuff is still a thing, but let us not pretend the devs. are focusing only on that.

Undo?

Bumping this too after I read 3.0 roadmap.

In my opinion the undo performance is the biggest issue that Blender has in its current state. While more features and UI improvements are nice, studios can easily afford hiring people who knows Python to improve their workflow. What they can’t do is to overhaul how undo works. If core team isn’t solving this, then no one will be.

I’ve never seen any other software that lags so badly for undo. And unfortunately, undo is one of the most used feature in any software. I understand it’s a lot of work to overhaul such a fundamental part of Blender, but that’s exactly why we need the core team’s help. If it were easy people would’ve solved it anyway.

I know the veterans are used to it and accepted that’s how Blender is. Again, Blender is probably the only software on the earth that requires users to be so aware of their undo actions. It often takes as much time to undo a single vertex editing as to run a frame of physics simulation, which is one of the most challenging task in computer science. I hope this means something.

1 Like

Well the stuff user want has mostly not to do with funny CG effects, but is rather doll an simple. From UI, to multi selection, managing larger amounts of assets, objects and materials. Rendering tools and easy workflow. Or the make everything personal adjust able and presets like you want. Organisation is key and basically where we waste most of our creative time.
Every click matters and no one want stupid repeating work.
Now, every software is bad in that area, because users constantly want to avoid these time consuming workflow problems. And while some tool have solved the organization and multi editing problem, like Modo does, others completely leave that to the TDs and a good SDK like Maya. Blender is somewhere in the middle and it has actually tons of very useful little things helping. But then its killing that it has no layer system, does many things different and often to complicate, missed a material editor, where all materials can be edited and screws every EXR workflow do to its viewlayer preferences.
Its like it is and hopefully they won’t make the mistake to stop listening, like many other products did. After all, whats new in lates 3dsmax, Maya, etc… they probably added a plugin and did a few icons new.

It was worse with the initial 2.8 release (where undo was slow in anything other than small scenes and larger scenes would just crash). Editmode would just crash on larger models as well, OpenSubDiv would just crash on medium to large models ect…

The activity over the last year appeared to be second time the BF turned the prospect of a mass exodus of users into overall growth. The first time was early in the 2.6x series where Blender’s ancient mesh structure and renderer was starting to make it unable to be anything more than a toy (but then we got Cycles and the official inclusion of Bmesh).

3 Likes

Well, to put things in perspective: from my early tests a while ago Cinema4D does not handle scenes with many objects nearly as well as Blender does. Nor does Modo.

Max and Blender do equally well depending on the scene.

But it is very VERY scene context dependent no matter the DCC. Whether object linking/instancing/referencing is used or what not also may completely change results.

I would hesitate to bring in 600.000 objects into any general-use DCC. To me having 600.000 separate individual screws just means bad optimization before importing a CAD scene.

1 Like

Sure but sometimes you need it all. You can’t optimize it away if marketing wants to do a fly through. I could replace every bolt with a hexagonal polygon but Blender will still choke on it because it has issues with tons of instanced objects, it has nothing to do with the amount of geometry.

But @const nailed it, this is my personal torture test for Blender to really get an idea of how much an optimization impacts the speed of the software. For 99% of the stuff I export and work with for marketing, Blender is a dream and a million times faster than Maya(what we used before).

The whole point of this thread was that it was not the case.

It depends. In the era pre 2.8xx Blender was quite slow and couldn’t handle more than a few thousands of objects on screen, and creating more than let’s see… about 2k or 3k objects and it hanged for quite a good ammount of time (in some cases, more than 10 minutes). Nowadays even on scenes with 30K objects you can still get some respectable speed, but it will be noticeably slow to create new objects. Trying to diplicate more than 10k objects can take some minutes. Since these ammount of objects are quite unlikely to be found in movie projects (which happens to be the focus of BF) it seems optimization at this level is still at the level of the time when 1 core processors ruled the world.

So, for what i use Blender nowadays (CAD models and graphics data processing) is leaves a lot to be desired. But still can compete reasonably well with MAX on this dept.

But everyone has their pet project, right?. So in my case, what i would like to see is a complete overhaul of the system, so everything can be multithreaded as it can (meshes can only be threaded to a certain point, is still a research problem at that level), so selecting an object when you have around 50k or 60k objects shouldn’t take 2-3, minutes. or duplicating 10k objects doesn’t take about 3-5 minutes (with my shiny I7 12700k using about 5-6% of CPU time…), preferably before i stop working on all things 3D (i’m retired, but still doing work mostly out of need). Hey!, dreaming is still free :smiley:

But realistically speaking, i doubt it can happen in the short term. TBH at this time, optimizations will come, sure. But the juggernault is just too huge to happen overnight, and for movie production (the focus of BF) is not really a required thing.

Although, undo is still an unsolved problem.

1 Like

@DeepBlender @Ace_Dragon @Herbert123

Since the features already in use right now, more or less were developed in that kind of fashion, I guess it is of no use to mention them.

But to put it into perspective:

https://code.blender.org/2022/01/strategic-targets-2022/

So for me it goes like this:

  • Application Templates: I don’t have a clue what it supposed to do. Essentially if you want customize Blender you do it with Python addons that change properties and such. Or actually save a dozen of templated .blend if needed.
    I have already created a very rough and pumped script for this reason, injects new shortcuts, overrides default menu settings, etc etc… It achieves a great balance towards what I consider “good default” + “personal preference” + “workflow specific standard”.

  • Overrides: As the initial goal was to replace the Proxy system so what was the best answer? Assets? On the contrary, regarding instancing and duplicating data, Godot team solved this problem with the most simple and elegant way. Everything is a scene and a scene contains subscenes. So at this point Blender is stuck with the old design of Scene / Object / LinkedDuplicate / LinkAppend / Proxy / Asset. But eventually it involves fixing and adding new features to a weak idea. Which is not that it hits on bull’s eye in terms of how well intented the design should be.

  • Physics: In the grand scheme of everything nodes I guess that at some point is expected to have gradually more features added. As long as the current shortcomings regarding the current state of the Geometry Nodes system have been addressed to a certain degree.

  • Texturing: This perhaps is something good, but still carries lots of R&D with it who knows if it actually can hit on point the most crucial workflows.

But the final point is as you can see, we can start debating whether or not these are good or not or if they do make sense, which is not the purpose. The purpose is to consider that there are “broken windows” that need to be fixed as much as new features added, same goes for addressing some problems that make Blender hard to use in some cases.

I mean that “Right Click Select” is a good place for getting more ideas, but now is time for a “Left Click Select” that has to pinpoint all problematic areas and even adopt the concept of bounty hunting. Generally all of the shortcomings must come to an end.

1 Like