Properties UI: Multiple objects #37902

Closed
opened 2013-12-20 19:46:49 +01:00 by William Reynish · 21 comments

The Properties Editor is for editing the settings and properties of datablocks in Blender.

The Issue
The properties can only act on one item at a time. If you've selected five objects and want to change the same setting across all five, you've got to jump through hoops to make it possible:

Either, you can use the Copy menu to copy settings from active -> selected (only works for a few settings)
You can also right-click and select Copy To Selected, which copies the given setting from active -> selected

Here's why this is a problem:

  • Having to right-click and select Copy to Selected on every property every time you change it is inefficient, and not fun
  • It doesn't work for some things, like adding modifiers, setting up rigid bodies etc
  • It's quite complicated solution and is hidden
  • Some tools have been added to work around this limitation (Rigid Body Tools) whose only reason for being is to apply certain settings to multiple objects

Proposed Solution
Make the Properties Editor act on multiple selections. Display a '-' symbol for settings that differ, and display the value for settings that match.

Advantages:

  • No need to right-click and select a menu item for every single property change
  • It's clearer and simpler for the user
  • This way we don't need separate 'tools' such as Rigid Body Tools just to apply settings to multiple objects

Example:
Editing_multiple_objects.png

The Properties Editor is for editing the settings and properties of datablocks in Blender. **The Issue** The properties can only act on one item at a time. If you've selected five objects and want to change the same setting across all five, you've got to jump through hoops to make it possible: Either, you can use the Copy menu to copy settings from active -> selected (only works for a few settings) You can also right-click and select Copy To Selected, which copies the given setting from active -> selected Here's why this is a problem: - Having to right-click and select Copy to Selected on *every* property *every* time you change it is inefficient, and not fun - It doesn't work for some things, like adding modifiers, setting up rigid bodies etc - It's quite complicated solution and is hidden - Some tools have been added to work around this limitation (Rigid Body Tools) whose only reason for being is to apply certain settings to multiple objects **Proposed Solution** Make the Properties Editor act on multiple selections. Display a '-' symbol for settings that differ, and display the value for settings that match. Advantages: - No need to right-click and select a menu item for every single property change - It's clearer and simpler for the user - This way we don't need separate 'tools' such as Rigid Body Tools just to apply settings to multiple objects Example: ![Editing_multiple_objects.png](https://archive.blender.org/developer/F46911/Editing_multiple_objects.png)
Author
Member

Changed status to: 'Open'

Changed status to: 'Open'
Author
Member

Added subscriber: @billrey

Added subscriber: @billrey

Added subscriber: @koilz

Added subscriber: @koilz

There are two different ways to implement this.
1: When you change the value of properties, do you want all the properties to go the same.
2: When you change the value of properties, do you want all the properties to have a relative change.

Example for 2.
I have two lamps, the Z rotations are 1.5 and 1.7.
When i increase the value, it would go from [1.5, 1.7] to [2.1, 2.3].
This would be displayed with a +0.6.

There are two different ways to implement this. 1: When you change the value of properties, do you want all the properties to go the same. 2: When you change the value of properties, do you want all the properties to have a relative change. Example for 2. I have two lamps, the Z rotations are 1.5 and 1.7. When i increase the value, it would go from [1.5, 1.7] to [2.1, 2.3]. This would be displayed with a +0.6.

Added subscriber: @brecht

Added subscriber: @brecht

Marking this as low priority not because it's not important, but because it's a big project and not likely to be implemented soon.

How this will work in some areas is still unclear to me. For example object groups, modifiers, constraints, materials, textures, .. it's not entirely clear to me what would be displayed there. In general each object will have a list of things that may or may not match the others. Do you display that list only if it matches and otherwise blank or just for one object? Do you merge those lists (but do you really want to display all modifiers if you select a 1000 objects)?

When you change the value of properties, do you want all the properties to go the same.

This is the standard behavior in other applications I think. There could be some way that you can do a relative values, but that would be an extra feature, not the default.

From a technical perspective, there's a bunch of challenges here. How to handle this in the UI toolkit, how to expose such groups of objects to python UI scripts, how to handle the slowness when you select 1000 objects in a scene x 100 properties, etc.

Marking this as low priority not because it's not important, but because it's a big project and not likely to be implemented soon. How this will work in some areas is still unclear to me. For example object groups, modifiers, constraints, materials, textures, .. it's not entirely clear to me what would be displayed there. In general each object will have a list of things that may or may not match the others. Do you display that list only if it matches and otherwise blank or just for one object? Do you merge those lists (but do you really want to display all modifiers if you select a 1000 objects)? > When you change the value of properties, do you want all the properties to go the same. This is the standard behavior in other applications I think. There could be some way that you can do a relative values, but that would be an extra feature, not the default. From a technical perspective, there's a bunch of challenges here. How to handle this in the UI toolkit, how to expose such groups of objects to python UI scripts, how to handle the slowness when you select 1000 objects in a scene x 100 properties, etc.

Added subscriber: @JonathanWilliamson

Added subscriber: @JonathanWilliamson

I guess this requires some good design before its considered.

For the lag problem, one feature could be limit to 10, or limit to custom number, this would prevent blender from freezing.
I think it would be best to test on small things first, like Transform properties.

Ive added a picture of how this could work, but im not sure how hard this would be to implement.
multimode.PNG

I guess this requires some good design before its considered. For the lag problem, one feature could be limit to 10, or limit to custom number, this would prevent blender from freezing. I think it would be best to test on small things first, like Transform properties. Ive added a picture of how this could work, but im not sure how hard this would be to implement. ![multimode.PNG](https://archive.blender.org/developer/F52606/multimode.PNG)
Author
Member

@brecht: For modifiers, it could show all the ones that are common among objects? Although I realise you can have more than one of the same modifier on the same object. Not sure what to do in that case.

Regarding slowness, you mean that it would have to compare values across many objects to figure out what to display? Yes, that's true. I wonder how other apps do this without much overhead.

@brecht: For modifiers, it could show all the ones that are common among objects? Although I realise you can have more than one of the same modifier on the same object. Not sure what to do in that case. Regarding slowness, you mean that it would have to compare values across many objects to figure out what to display? Yes, that's true. I wonder how other apps do this without much overhead.

Added subscriber: @BartekMoniewski

Added subscriber: @BartekMoniewski
Author
Member

@brecht:

How this will work in some areas is still unclear to me. For example object groups, modifiers, constraints, materials, textures, .. it's not entirely clear to me what would be displayed there. In general each object will have a list of things that may or may not match the others. Do you display that list only if it matches and otherwise blank or just for one object? Do you merge those lists (but do you really want to display all modifiers if you select a 1000 objects)?

More thinking: I think it's ok to keep this fairly simple. If a list differs, just put a dash and don't display anything. I don't think we need to get into complicated merging of lists and things like that - at least not initially.

Trouble is, what to do with materials/mesh data etc? These can be shared among objects, but can also differ. They're not part of an object, they are linked to it.

It seems logical that if Object A and Object B have different materials, you should be able to select those objects and make changes across both materials. Say you want to make objects green, but still have different materials. But how to handle that?

Here are some options:

  • If you select two objects with different active materials, show those materials in the top in the little 'path' breadcrumb, and users can then edit values across those materials.
  • Merge list of materials and let users choose inside the list box what the scope of the changes should be (deselect material X to make changes not apply to that)
  • Assume that changes should be done to all linked materials on all selected objects
  • Don't support materials and mesh data for this

I imagine this could become fairly complicated, editing multiple materials. How to handle nodes etc internally I don't know. I think it's probably ok to leave materials out.

@brecht: >How this will work in some areas is still unclear to me. For example object groups, modifiers, constraints, materials, textures, .. it's not entirely clear to me what would be displayed there. In general each object will have a list of things that may or may not match the others. Do you display that list only if it matches and otherwise blank or just for one object? Do you merge those lists (but do you really want to display all modifiers if you select a 1000 objects)? More thinking: I think it's ok to keep this fairly simple. If a list differs, just put a dash and don't display anything. I don't think we need to get into complicated merging of lists and things like that - at least not initially. Trouble is, what to do with materials/mesh data etc? These can be shared among objects, but can also differ. They're not part of an object, they are linked to it. It seems logical that if Object A and Object B have different materials, you should be able to select those objects and make changes across both materials. Say you want to make objects green, but still have different materials. But how to handle that? Here are some options: - If you select two objects with different active materials, show those materials in the top in the little 'path' breadcrumb, and users can then edit values across those materials. - Merge list of materials and let users choose inside the list box what the scope of the changes should be (deselect material X to make changes not apply to that) - Assume that changes should be done to all linked materials on all selected objects - Don't support materials and mesh data for this I imagine this could become fairly complicated, editing multiple materials. How to handle nodes etc internally I don't know. I think it's probably ok to leave materials out.

Seems to me that editing of properties is pretty straight forward (at least as far as the user display is concerned). But like @brecht mentioned, it starts to get quite complicated when you start looking at materials, modifiers, etc.

Some other software packages solve this by not displaying them, but by requiring the user to open a floating window by double clicking on the material, layer, modifiers, etc. This makes it easy to select many objects but then specify the one you wish to work on further.

However, that is a very un-Blender approach and is not a good one in my opinion. I don't know that you can easily display datablocks for multiple objects at the same time with the current design, but you could make it a hybrid display. For example, if a single object is select it would display the material (or other datablock) exactly like it does now. But if multiple objects are selected then it would present a list of those objects within the properties panel, allowing you specify which one to work on.

Regardless, these are big changes that require careful design.

Seems to me that editing of properties is pretty straight forward (at least as far as the user display is concerned). But like @brecht mentioned, it starts to get quite complicated when you start looking at materials, modifiers, etc. Some other software packages solve this by not displaying them, but by requiring the user to open a floating window by double clicking on the material, layer, modifiers, etc. This makes it easy to select many objects but then specify the one you wish to work on further. However, that is a very un-Blender approach and is not a good one in my opinion. I don't know that you can easily display datablocks for multiple objects at the same time with the current design, but you could make it a hybrid display. For example, if a single object is select it would display the material (or other datablock) exactly like it does now. But if multiple objects are selected then it would present a list of those objects within the properties panel, allowing you specify which one to work on. Regardless, these are big changes that require careful design.

Added subscriber: @eugenio_jr

Added subscriber: @eugenio_jr

I'm glad to see this topic being discussed by developers. This seems to be a good place to share my proposal. I think the best solution is through making a robust Outliner, which needs a massive overhaul on it's own.

I hope the explanations in the following images are good enough...

{F65860}Multiple-Modifier-Editing-Explanation.png

I'm glad to see this topic being discussed by developers. This seems to be a good place to share my proposal. I think the best solution is through making a robust Outliner, which needs a massive overhaul on it's own. I hope the explanations in the following images are good enough... {[F65860](https://archive.blender.org/developer/F65860/Outliner-Proposal.png)}![Multiple-Modifier-Editing-Explanation.png](https://archive.blender.org/developer/F65862/Multiple-Modifier-Editing-Explanation.png)

Added subscriber: @michaelknubben

Added subscriber: @michaelknubben

Added subscriber: @PawelLyczkowski-1

Added subscriber: @PawelLyczkowski-1
Tene commented 2014-02-14 11:10:53 +01:00 (Migrated from localhost:3001)

Added subscriber: @Tene

Added subscriber: @Tene
Tene commented 2014-02-14 11:10:53 +01:00 (Migrated from localhost:3001)

Not sure if possible / convenient, but what would You say for a specifically designed pop-up window (or whatever panel) that appears only if multiple objects are selected and some keyboard shortcut pressed? It could look similar (in some ways...) as outliner, containing list of values common to all selected objects (so a dynamic list). Then it can have a field near every value, in which You can put expressions like "+0,5", "*7" etc, and "0" (disabled) or "1" (enabled) where applicable. Near this field there could be a dropdown menu with the type of action, where You can choose "linear" or "incremental".

EXAMPLE:

You selected three objects and pressed the keyboard shortcut. The list appears which contains:

Value 1 --> [modification field] --> dropdown menu

Let's say You want to place every object on different layer, so You search for a "Layer" line, and type:

Layer --> [+1] --> [incremental] (it adds 1 to Layer index of every object selected, incrementally, so the first one is +1, second is +2 etc).

A downside of this solution is that it's only applicable for numeric data, so I think it could serve only as a starting point, not a complete solution.

Not sure if possible / convenient, but what would You say for a specifically designed pop-up window (or whatever panel) that appears only if multiple objects are selected and some keyboard shortcut pressed? It could look similar (in some ways...) as outliner, containing list of values common to all selected objects (so a dynamic list). Then it can have a field near every value, in which You can put expressions like "+0,5", "*7" etc, and "0" (disabled) or "1" (enabled) where applicable. Near this field there could be a dropdown menu with the type of action, where You can choose "linear" or "incremental". EXAMPLE: You selected three objects and pressed the keyboard shortcut. The list appears which contains: Value 1 --> [modification field] --> dropdown menu Let's say You want to place every object on different layer, so You search for a "Layer" line, and type: Layer --> [+1] --> [incremental] (it adds 1 to Layer index of every object selected, incrementally, so the first one is +1, second is +2 etc). A downside of this solution is that it's only applicable for numeric data, so I think it could serve only as a starting point, not a complete solution.

Added subscriber: @rulkens

Added subscriber: @rulkens

Added subscriber: @Januz

Added subscriber: @Januz
Member

Closed as duplicate of #44666

Closed as duplicate of #44666
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
12 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#37902
No description provided.