Page MenuHome

Collection Assets: To Instance or Not to Instance
Needs Triage, NormalPublicTO DO

Description

When using collections as assets, it needs to be defined when dropping a collection should use instancing and when not. Instancing collections basically means a non-editable version of the collection is added to the scene, with an empty acting as the pivot point. So the collection can be transformed by transforming the empty, but the contents of the collection aren't editable without further steps.

https://docs.blender.org/manual/en/latest/scene_layout/object/properties/instancing/collection.html

Proposal: Operator Option

While we could just add another option for instancing to the Asset Browser, next to the Import Type option, it adds clutter and also requires setting up things before dragging: If you dragged in an asset and used the wrong setting or change your mind afterwards, you'd have to undo and perform the operation again, or manually replace the collection.
So it violates the Operate -> Settings design paradigm of Blender. Instead the proposal is to have this controlled via an operator option, whereby the option will remember what it was set to last. Another setting could still be added, but the operator setting should be useful either way.

Current File Asset Library

In the Current File asset library we often reuse data, but not as often as with the Append (Reuse Data) option. E.g. materials are shared, but objects are duplicated including their mesh. D12879 tries to make things more unified & explicit, but it's on hold.

No strong opinion on how this should be handled, I'd say let's avoid confusing users by sharing meshes. So:

  • If the Instance operator option is...:
    • ... true: Create a new collection instance.
    • ... false: Add a new collection (no instance). If the collection already exists in the file, all objects will be duplicated.
Other Asset Libraries

Link:

  • Use drop operator option to determine if instancing should be used (Instance option)

Append:

  • If the Instance operator option is...:
    • ... true: Create a new collection instance.
    • ... false: Add a new collection (no instance). If the collection already exists in the file, all objects will be duplicated.

Append (Reuse Data):

  • If the Instance operator option is...:
    • ... true: Create a new collection instance.
    • ... false: Add a new collection (no instance). If the collection already exists in the file, a new collection is created but the object's meshes are shared.
Determining the Drop Location & Rotation

Idea is to make the drop location and rotation be defined visually. So when dropping a collection, it is transformed to land under the mouse cursor (and later use bounding-box snapping), regardless of where the instance empty is, or regardeless of the collection instance offset. They are reverse applied.

Notes:

  • The drop transform will have to be applied to all added objects, including objects used by the objects inside the collection, which are not in the collection itself. E.g. if an object has a parent or a boolean modifier, the parent or boolean-object is imported along, and the relative transform needs to be preserved. We already do this for dropping object assets, code can be shared.
  • When linking without instancing, the dropped collection will use the drop location of the source file.
What Should be the Default

There seems to be some agreement that in production environments, instancing should be the default. However for beginners (or anybody unfamiliar with collection instancing) this may be a bit confusing. Needs some feedback, for now instancing can be the default behavior.

Event Timeline

Julian Eisel (Severin) updated the task description. (Show Details)
Julian Eisel (Severin) changed the subtype of this task from "Report" to "To Do".

Your proposal sounds good for me.
It accommodates many use cases while being transparent to the user and without cluttering the UI.

In our particular workflow we intend to use the Asset Browser without instancing.
Right now that means opening the Redo Panel and toggling the option everytime we restart Blender or create a new blend file (the option is reset) = quite innefficient.

Could the user be able to change the default behaviour ?
Or can a shortcut be implemented ? (alt+drag&drop = no instancing)

Another feedback regarding drop location :
could we have an option to drop at 3D Cursor or World Origin ?

Right now we have to open the Redo Panel and reset X/Y/Z to zero manually.
Suggestion : double-clicking an Asset in the Asset Browser could drop it to the 3D Cursor ?

When doing "Append (Reuse Data)" I think it should not create a new collection, even when it shares the same objects, but the collection is new, so it's not actually re-using all the data present in the scene (AKA: the already existing collection) and this can make a blend file a big mess very fast.

If the collection "My_Asset" already exists and I drag the collection from the Asset Browser I think the collection instance should call the already existing collection.

¿Why is this better than reusing the meshes?

Because in Cycles when an object has a modifier it stops being an instance, so if it's not the same actual collection, and an object has a modifier, that object will stop being an instance, and this can lead to a big problem in the long run, and it's something many users won't be aware of.

So IMHO "Append (Reuse Data)" should re-use the already existing collection in the scene, not populate a new collection with the meshes of the old collection :)

Hey I just tested the collections for the Asset Browser.

At the moment it's seems not pretty usefull, after I can add the collection asset only as link to the scene, even if "Append" is selected in the import drop down.
Also converting the linked collection via ID->Make Local don't seems to work.

Are there any plans to add for the final 3.2 version the option to import a collection unlinked and/or use library overwrite with them?

To the question: "What Should be the Default"

I think having assets linked per default would be the better option, if they would be created automatically as library overwrites.
Best would be to have an addtional option for "Library Overwrites" besides "Links" (linked assets may be still pretty usefull for scatter, I guess).

Btw, it's a little bit strange if I add an object as a link it can't be moved/translated, until I add a library overwrite.
While collections can be moved out of the box, without a library overwrite.

For me, it first hard to figure out that I had to add a library overwrite, when added a linked object via the asset browser, to make that object movable again.

Okay, I figured out you can convert the linked collection back into real objects with CTRL + A Make instaces real.
But it seems that sub collections are getting lost, while doing this (meaning if the collection has some sub selections, to keep the structure clean).

However, Machin3Tools just released an intresting collection asset browser tool:
https://www.youtube.com/watch?v=7DPFawKrxbY&t=2s

What it makes better:

  • Snapping is still working, when a multiple objects is added to the asset browser via this tool
  • Driver are still working.

If you use Append at first you will see as if there is a link in the scene, but that’s just temporary, if you save and open again you will see there is no link at all, the collection is inside the .blend :)

And yes, keeping the internal collections when making it real would be awesome.

With that said, you can always link the original collection to the scene if you go to blend file in the outliner, collections and there you oree “link to scene” in the collection menu, that should give you the collection with everything correctly done.

A “link to scene as is” option could be great for appended collections, so it replaces the instance with the real collection and respects inherited transforma from the empty :)

If you use Append at first you will see as if there is a link in the scene, but that’s just temporary, if you save and open again you will see there is no link at all, the collection is inside the .blend :)

Okay, that's not working for me. It stays a linked collection, even after reopening the file.

But I discovered something pretty weird, if I press CTRL + Z directly AFTER adding the collection asset to scene, it's changing it back to a normal collection.

I did a video. First I demonstrate that Saving an opening the file is not helping. And than the CTRL + Z "workaround".

And yes, keeping the internal collections when making it real would be awesome.

Not only awesome, I think it's pretty important, for the case if the collection asset is using some geo nodes based on collections. I guess the geo node will break if the collections are missing.

Nice, CTRL + Z even keeps sub collections:

Hello all,
the Collection Assets are still being worked on and many of your requests have been raised to the developers.
I think a better place to discuss things might be here : https://devtalk.blender.org/t/collection-assets-feedback/23789

The CTRL+Z hack is useful right now, but will be replaced in the future by a proper workflow (this has been discussed on Blender.Chat with Julian).

At the moment you can import collection properly (with subcollections intact) :

  • drag&drop a Collection Asset in the viewport
  • open the Redo panel (left bottom corner of the viewport)
  • unckecking the "Instance" checkbox

I see instancing as a case by case thing. There are times that I just want to use the asset as is, no editing required.
Then if I need to edit, I can make instance real. That's fine.
However, I run into breaking issues if I make a collection real and it has modifiers that sometimes break.
I was told to uncheck the "instancing" check box, and that fixes it.

However, there is a problem with this.
I for one did not even know that.
The natural response for most is you should be able to just drag-n-drop and asset and everything works, even editing and the mods.

So, even though I see use case scenarios for both, how about this option to make it easier for beginners as well as experts.

When you add a collection as an asset, after clicking on "Add Assets" menu a popup dialog asks you do you want to make collection and instance or leave it as editable.?

This way the decision is left up to user at the beginning of the action instead of being left with a couple steps to make the collection real editable objects afterwards.

This way there doesn't have to be a default.