Collection Assets: To Instance or Not to Instance #96963

Open
opened 2022-04-01 22:27:58 +02:00 by Julian Eisel · 21 comments
Member

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.

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 ](https://wiki.blender.org/wiki/Human_Interface_Guidelines/Paradigms#Operate_-.3E_Settings) 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](https://archive.blender.org/developer/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.
Author
Member

Added subscriber: @JulianEisel

Added subscriber: @JulianEisel

Added subscriber: @antoine.grasset

Added subscriber: @antoine.grasset

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)

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 ?

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 ?

Added subscriber: @juang3d

Added subscriber: @juang3d

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 :)

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 :)

Added subscriber: @Rincewind3D-1

Added subscriber: @Rincewind3D-1

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.

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.
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 :) 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".

Asset.mp4

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.

> 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". [Asset.mp4](https://archive.blender.org/developer/F13003875/Asset.mp4) > 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:

sub collectioin.mp4

Nice, CTRL + Z even keeps sub collections: [sub collectioin.mp4](https://archive.blender.org/developer/F13003883/sub_collectioin.mp4)

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
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

Added subscriber: @xrogueleaderx

Added subscriber: @xrogueleaderx

Added subscriber: @Pixelink

Added subscriber: @Pixelink

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.

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.

Added subscriber: @RainerTrummer

Added subscriber: @RainerTrummer

Added subscriber: @Yerus_Ovelha

Added subscriber: @Yerus_Ovelha

Hey! I think the default "make instance" should be unchecked because is not user friendly. I was producing a rigged asset with custom properties and sending it to Blender Kit but after seeing it wouldn't work by default I gave up, because the users wouldn't know that 'trick', they would only think that the asset is broken and find it unusable.
I agree that a shortcut could be implemented, like Tony G said the 'alt+drag and drop' but to import instancing and not without instancing like he proposed. Not instacing should be the default. Default option should ALWAYS be the easiest and fastest one imo, so beginners could use them in no time.

About the importing systems:

  • I think double-clicking should import to 3D cursor. It doesn't make sense to import to World Origin because 99% of the time we would want to import the asset in a scene context, where positioning at World Origin wouldn't be a possibility at all, plus: if the you want to import at origin you just have to reset your 3D cursor. Either ways, there could be an option box in the preferences on that matter, with the defult being 'to 3D cursor'.
Hey! I think the default "make instance" should be unchecked because is not user friendly. I was producing a rigged asset with custom properties and sending it to Blender Kit but after seeing it wouldn't work by default I gave up, because the users wouldn't know that 'trick', they would only think that the asset is broken and find it unusable. I agree that a shortcut could be implemented, like Tony G said the 'alt+drag and drop' but to import instancing and not without instancing like he proposed. Not instacing should be the default. Default option should ALWAYS be the easiest and fastest one imo, so beginners could use them in no time. About the importing systems: - I think double-clicking should import to 3D cursor. It doesn't make sense to import to World Origin because 99% of the time we would want to import the asset in a scene context, where positioning at World Origin wouldn't be a possibility at all, plus: if the you want to import at origin you just have to reset your 3D cursor. Either ways, there could be an option box in the preferences on that matter, with the defult being 'to 3D cursor'.
Iliya Katushenock removed the
Status
Needs Triage
label 2023-08-24 17:39:17 +02:00

Yeah. I also think it should be default, or at least have an option somewhere to toggle it on & off permanently.

Yeah. I also think it should be default, or at least have an option somewhere to toggle it on & off permanently.

Is this topic dead?

The default instancing is a bug, IMO.
I can only imagine fringe cases when you want a dropped collection asset to be an instance. Can we please make this user friendly?

Is this topic dead? The default instancing is a bug, IMO. I can only imagine fringe cases when you want a dropped collection asset to be an instance. Can we please make this user friendly?
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
10 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#96963
No description provided.