Add option "Auto Add Fake User" to user preferences

Which means we should leave it for another 3 years? :man_shrugging:
The discussion threads have been going on for a long time and every time they have been pushed back to the status quo and then someone brings it up again because they lose data. Over and over again.

1 Like

What funnily would align perfectly with your standpoint not to change it all.

How I see the “solution” in ours holly-war.
For example we have MyScene.blend and previous saved file MyScene.blend1 as usually.

In Preferences add a checkbox to make an additional file (for example) MyScene.garb where all garbage will be saved (turned on by default).

USER1 send file MyScene.blend to his colleague USER2, USER2 open blend file and Blender show a message “Missing MyScene.garb continue “Y/N”” (or maybe without message - discuss).

USER2 continue working with file without MyScene.garb, saves file and send to USER1 new without MyScene.garb connected (if he have disabled checkbox).

USER1 open new file and connect his last garbage file to the scene (like Append from other .blend file, but from .garb file or just drag-n-drop to the scene).

Done!

The current system is not ok because if you just fake user everything, you will offload the duty of garbage collection to user. This is fine but only for software which has right tools to do that. Blender does not:

  1. Blender has no good place to manage datablocks. Closest to it is outliner in Blender File mode, but it’s gravely insufficient:
  • It doesn’t even show any indicator which datablocks are fake usered and which are not.
  • It doesn’t allow for creation of new datablocks.
  • It doesn’t have any feature to inspect which datablocks is the datablock you are interested in referenced by.
  1. The tools to clean up the datablocks manually are also bad. You can just nuke everything untagged as fake user, and you won’t even know what you are deleting before it happens, only after, which is ridiculous concept.

What about lights, cameras or meshes? If this was the case, then all the datablocks from deleted lights, cameras and meshes would keep piling up constantly. This is not nearly as simple. It’s about common user expectations. And the expectations are that only datablocks which have some dedicated editors should be persistent. But when it comes to objects created in 3D view, users generally don’t expect those to still exist once they are deleted from the viewport (and all scenes).

Regarding the naming, I think the best way would be to “invert” the fake user, instead trying to rename it. If we went that route, then IMO the best way would be to replace fake user with “Automatically Clean Up” button, which would be off by default, would have following tooltip:

“When enabled, this data-block will be automatically removed from blender file if it’s no longer used anywhere.”

And would have a simple trash bin icon.
image

This would very clearly communicate what will happen.

But then we again circle back to the problem that it makes almost no sense to ask user in advance whether they plan to use the data-block or not. I mean if the user didn’t intend to use the datablock, why would they be creating it in the first place. People will always create only stuff they plan to use, and don’t usually think about long term future of that data.

So what will likely happen is that most people will just never ever press this clean up button, and once the Blender file starts to get bloated, they will, with great frustration, have to stop their work and do some manual blender file cleaning. But if they do so, they won’t be going from object to object, material to material and start clicking this button on each datablock. Exactly because if this datablock is not used anywhere, there won’t be any place to click this button. So they will have only reasonable option to use Outliner in Blender File mode, and as I already explained above, that one is insufficient for the task.

All these half baked solutions still don’t solve the main problem - that the users should not have to spend significant mental energy managing the 3D software file data on their own in 3rd decade of 21st century.

3 Likes

It’s a bit more complicated than that but in general I absolutely egree to your post.
The part of “importing a lot of meshes” is a valid point because that often happens when you have to mass manage external data. In which case I find that an import toggle for “mark materials as purgeable” could to the trick probably.

So yes, there is dire need of discussion and fringe cases, and probably a few adjustments in later releases. But I absolutely agree that this is something that Blender should not postpone due to analysis paralysis, any longer.

1 Like

I am actually thinking there could be poor man’s version of my Proposal: Explicit Management of Data Blocks and (possible) Deprecation of Fake User

  1. Automatically fake-user everything that does not reside in the 3D View. Everything except:
    Objects, Meshes, Armatures, Cameras, Curves, Collections, Lights, Lattices, Light Probes, Meshes, Metaballs, Paint Curves, Point Clouds, Simulations, Speakers, Volumes.
    Users usually expect deleting objects from 3D viewport to be synonymous with deleting them from the Blender file.

  2. Completely remove the fake-user button from everywhere. The button would not exist anywhere in the UI next to any datablock selector.

  3. In Blender View Outliner mode, add icon indicator for any datablocks that have 0 users, so users can overview/manage/clean them up quickly.

  4. Accept this patch: Blender Archive - developer.blender.org so users can do it in one click, but safely.

3 Likes

That is not a good idea. The datablock workflow IS vey useful and actually a good thing. It just is set a bit too hostile for most users by default.

Rest - total agree.

(edit) A default setting in the Options would still be good to have.
I can totally see the current behaviour be useful as an option.

Ask yourself, when was the last time you have clicked fake user on a:
Mesh:


Or a light:

Or a camera:

Or armature:

etc…

Really, just take a while to think about it, how it would be in practice. If you imagine that materials, geometry nodes, textures, etc… would simply have no fake user button so you would have that safe cozy feeling that they will always be around until you decide to clean them up manually. And then all the 3D objects (stuff that can be placed into a 3D scene) will also always be there unless you just delete them from the viewport.

If you take a moment to think about it, then you realize how redundant the fake-user button is. The only case for it to exist is a rare case where you know well in advance that the material/node group or something you are creating is for sure just for some temporary/testing stuff. But even if you are just slightly unsure, you’d already be reluctant to disable fake user on it.

And once it truly becomes unused, then you will not be unchecking the fake user button, because there’s nowhere to uncheck it in the UI, as it’s not used anywhere.

It takes a while of contemplation, but that contemplation almost always leads to a realization the fake user button just doesn’t make sense.

Not too long ago, actually. Last week? :sweat_smile:

Hmm, interesting. And do you think it would would pay off to use workaround of for example putting object using that mesh into a disabled collection if what you got in return was just not having to ever care about fake user at all?

My point here is that Blender is only 3D DCC which has a concept of being able to store a mesh without it existing in the 3D scene. And users of all those other DCCs don’t really seem to be limited by it in any way.

Yes. Absolutely. I’ve been saying this earlier as well - all the data users can manage as first class citicens should have a better way of management. I am not sure if the hidden collection would be the way to go. The scene view should be as focused as possible. I would rather see the “Blend File” or “Oprphaned Data” browser in the outliner to get more mass management skills, instead… :slight_smile:

But there have been many more discussions about this topic in the other threads, already. I think those are all valid.

And for the record: In the case of the Mesh file I would totally expect having to manually take care of it. This was really just saying that ‘unexpected cases’ may not actually be as unexpected for everybody. As long as there remains a way to manage and replace datablocks. They may not be hidden so much that we get the opposite of what we have right now.
I think they need to be manageable, accessible and switchable ob objects. They need to be less hostile for users than they are right now and they need default behaviours for creation. Everything beyod that are individual cases which probably need scripting anyways.

So in principle I absolutely agree with you ^^

Well if you are for example a 3D concept artist and do some heavy density 3D concept art sculpt sketching, you may create/copy/delete a heavy 1M+ poly mesh maybe even several dozen times in just a single hour. If the unused mesh datablocks weren’t progressively purged you’d constantly keep ending up with up to dozens of gigabytes large .blend files. And if you are a 3D concept artist, you want to just focus on creating your art. You don’t want to have to stop every 30 minutes and switch your attention to doing some chores just to avoid running out of HDD space or waiting for the blender file to save for a while since it got huge.

Sure. Absolutely agree. As I said: Meshes are expected to be automatically marked as deletable and gone after exit, the latest. I just thik the ability to manage these blocks if needed has to remain somehow.

Fake user does make sense in the way that it is a way of marking datablocks for keeping that the user would otherwise need to keep track of manually or that would usually not be saveable. Again: That blender actually does have a way of exposing this is a good thing. It allows for a few tricks that are simply not possible in other software. It’s the management aspect that is a problem. Not the existence.

Most other software for example only allows to keep everything or delete everything unassigned. That sucks. A way to actually mark things for keeping is good here. Havin the option to assign mesh data to other objects - occasionally super nice. I sometimes use it to sneakily switch meshes in existing hierarchies and not destroy or rebuild everything in the process. There are very, very useful cases which simply aren’t possible like this in other software. We really just need to make sure that we shift the importance and management aspects.

But since I am repeating myself now I just shut up.
The forum already reminded me that we two are talking mostly exclusive to each other already :sweat_smile:

I’ve been so used to blender’s way of doing things it didn’t even register with me it will delete unused datablocks on save. Now I realize I do a bunch of actions and rituals inside the program to avoid this kind of situation.

Yeah I could not agree more. I’m already managing datablocks my self with purging and deleting them from the outliner, I definitely don’t want blender to surprise delete my materials on save.

1 Like

This being the actual problem that needs solving. And accepting dataloss because the managing is clumsy is imo not the right solution to that problem.

Meh. If the cleaning process would be easier this wouldn’t be much of a problem. IMO much preferable over accidentally losing material nodetrees you’ve spent hours on. But I could see the value of having implicit GC for lightweight stuff like lights and empties and the like. But Keeping things consistent would be better I think.

So, there should be better cleanup tools. Having a central list of all your unused datablocks with some statistics would be quite handy anyway.

Maybe it could be as simple as just never implicitly running the GC and only run it when requested.

111 replies of people arguing about trivial things- not a great look for the Blender community today, y’all need to chill out a bit

1 Like

You may want to take a step back a bit. Most of us are just discussing, not arguing. At least that’s how I perceive it. Chill debates are usually debates about things people don’t care about. As soon as people care about something, it’s obvious the discussion will be vigorous, but I don’t see anything even remotely wrong about the tone of the discussion thus far.

Data management is one of the most crucial Blender topics in the past decade. I see no reason to chill out a bit, because chilling out is not the approach that gets anything ever moving.

If you don’t have anything to contribute to the topic, then just please let us talk.

1 Like

Can’t this be solved by a checkbox in global preferences that switches between the two?

Some of these issues are inter-related, but that does not mean all of them require the same solution. It doesn’t mean that a universal solution that solves all potential issues is required.

The core issue is this: Blender deletes materials (for example) without any direct action by the user. This is not acceptable.

I believe the origin of this flaw originates with the fact that a material/action/whatever is is treated by Blender as a property. Properties that are not used, are discarded. This was a design flaw as it was applied to things in ways that it should not have been, and the following approach of garbage collection and “purge on save” is a punitive result. We cannot undo that old decision, but nonetheless the result of it is not ok.

When the user creates 4 cubes, lights, or bones - and deletes them - yes, blender silently throws it in a trash can without telling the user “I’ll throw this away later.” That’s acceptable, because the user deleted the item.

Materials are not managed this way. If the user creates 10 materials and doesn’t assign them to objects at a given moment (or REMOVES a material from the only object using it) - which is a normal workflow in other software, Blender will throw it away unless you tell it not to. I didn’t hit DELETE - it just got burned. The comparison with “well, what about a deleted mesh or light” isn’t valid.

Blender is the only 3D software I’ve ever which treats materials in this manner. It’s not logical, it’s not rational, and it’s a poor design to force a user to tell the program - “I made this, and YES I WANT IT. Do not burn it!”

There are various issues with fake user beyond this, but those issues do not have to ALSO be solved in order to correct this flaw. Previous debates have fallen heavily to the Nirvana fallacy, and it’s time to stop embracing it as a brick wall.

7 Likes

I agree, as years go by and nothing changes, we have to accept that data system is never going to be redesigned.

This solution is not perfect, but it is a solution.

And after it is implemented, better data management tools will follow.

1 Like