Every object needs to have a unique name. When it comes to adding object number 400000, it has to check the other 399999 objects to see if there are no collisions, and if there are, resolve them. That’s one of the many things that can impact the performance of adding objects.
I still don’t see how it’s important to be able to edit every single seat. There is no way that you’ll have that many seats in view and still see the difference between them (unless the edits are enormous, of course). Maybe library overrides can help? With those you might be able to use instances everywhere, and override the mesh for only those instances that actually need adjustment. Not sure if it’ll work that way, though, I haven’t played with library overrides enough.
The main reason they want single seat is that the final render is done in unity and they would like to tweak the details of the sectors/seats within blender, don’t ask me why but it’s just the workflow of the company. And to import it to unity I merge seats from each Sector into a single mesh. I will try look into
library override.
I wonder if it would help to have an option of not checking and correcting for name collisions? I mean if you are scripting this yourself you should be able to generate names that are unique beforehand.
Yeah I guess it would help, but it will be a potential issue, I was thinking maybe name collision checking could be accelerated with a hash map or something, if it wasn’t already
In other software, each object gets its own unique GUID or UUID, which could be called the object’s internal name. Then, it doesn’t matter if the objects have the same front end name appearing in the UI and there is no need to constantly loop through the whole object array to check for duplicate names.
Edit now I am actually wondering why doesn’t Blender use UUIDs? It would probably solve a lot of the speed bottlenecks that many have been complaining about.
Many ID speed issues are known TODO in Blender (main task would be https://developer.blender.org/T73359), we simply have no man power to tackle it currently.
Note that using UUIDs is not a magic trick here, we can most definitely achieve much better performances without them. We do already have session UUIDs since several months now, which helped quiet a lot for some runtime operations.
But handling name conflicts when adding many objects is not the only (probably not even the main) bottleneck, updating all the runtime/persistent info regarding objects, collections and layer collections is also a huge time sink currently.