Add option "Auto Add Fake User" to user preferences

The problem with unassigned data is slightly different.
The problem is not that it bloats the file by itself.
When user stores some important data unassigned (in case if the system designed to allow that), it mixes with the other (useless) unassigned data, so you can’t purge such files during collaboration - because you will shred someones important but unassigned data.
This is why fake user is supposed to be set manually - it allow to separate useful unassigned data from messy pile of a useless unassigned data.

Also not sure how centralized data editor will help to retrieve useful data among 4k of a useless data.

But data monitor would be nice to have for sure - for example we wrote such kind a monitor for textures in order to have the ability to check their status, weight, or adress (which material/node it belongs to).
Very useful, taking into account blend file packing ability.

2 Likes

Thing is - in principle most people here absolutely agree with you there. Unneeded data should be shredded religiously and managment of this kind of data is important. IT’s just thefinition of useless where most user will differ.

Quick naive question … why are scripts set to auto-save?
They surely aren’t used after they are executed, are they?

Yes its this kind of explicit and direct management that should be the way to go. ( What shall not mean that I’d be against a trashbin )

Its not about keeping everything stored in blendfile, sure is there is temporary or no longer needed data, but how its currently is furthers accidents that happen because someone didnt take action, and eg thought of marking some data as persistent after a change.

Its one thing if intentional actions lead to dataloss, but another if the opposite leads to that.

Imo the core system is ok, it’s just that:

  • For anything the user creates the fake user should be added by default.
  • The name ‘fake user’ should be changed to ‘guard’, or ‘protect’ or something like that, with a tooltip ‘save even when unused’.
  • The options to list unused datablocks should be expanded. Maybe some setting/filter in the outline ‘blender-file’ view to only show unused data.

Not sure how outliner deletion could help clarity.
Empty scene with three cubes with materials AB, BC, AC.
Deleting two of them will make at least one material became no user, regardless from where they will be deleted - outliner or viewport. If it will be handled differently it will be a mess.

Well, at this point I think that the original idea of developers to write unused IDs but with manual fake user useful/useless unused data delimeter is far away to be perfect and has perictable issues, but is better than any Autofake concept in general, because of no ability of setting useful/useless unused data delimeter.

If there’s a list of all data that is unused by anything in the scene it would be a one-click action to delete everything. Collaboration cleanup problem solved.

And that person who kept there a couple of a materials he spent several hours to make but decided to assign them tomorrow (lazydodo case) will appreciate that?

The materials state shouldnt depend on the existence of objects using it. And after one deletes all objects that use it,eg a dialog could ask for confirmation if the material should be deleted or kept.

There was a proposal to show warning splash before closing file.

You have a point there, but still I think the situation is preferable to the ‘auto deletion’ we have now, which bites people in the ass all the time.

There should be a way to turn off GC for any user generated datablock, while still keep it for autogenerated ones.

Yeah cool, but there’s still a difference to immediate and direct feedback or verification.

Not sure if it could be a smooth solution - stock data is made mostly manually by users so its data will stuck in projects. Also modifying imported data will be a corner case. (You import a model with generic materials, set them up properly, but they are not protected since was imported)

Anything the user creates should only be deleted explicitly, so if that is truly the case the GC should just be turned off and only run when there is an explicit cleanup action from the user. But I’ve seen addons/scripts which generated lots of temporary objects and rely on the GC to have them deleted and even some modifiers do this I think.

That’s why we should keep any “save datablock” functionality. We just really need to change the behaviour and tools. Give the option for marking them as “due to purging if unassigned” (aka no fake user).

Honestly, Materials have been needing a dedicated manager for a long time anyways. It’s weird how only Blender regards them as something that is a dedicated mesh attribute. No way of editing or selecting them if there is no mesh in the scene. I never understood that about Blender.
It’s simply accepted that if I want to edit an unassigned material I have to create a suzanne and apply the material. And if I want to edit another unassigned material I have to change the Suzanne Material from a long scroll list.instead of a dedicated outliner. Why?

And yes: “Purge all unassigned” should be an Option. A manual Option.

3 Likes

Anyway, this is not a problem whose solution can be found by brute force. There are too much context to take into account…

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