Synchronizing editors between workspaces #76810

Open
opened 2020-05-16 20:34:58 +02:00 by Michael Soluyanov · 24 comments

Here is a design discussion about synchronizing editors between workspaces.

Basically, synchronizing editors try to keep content in editors with same type when you switch between workspaces.

Working prototype and previous discussion is here https://developer.blender.org/D7272

Problems, that we need to discourse:

  1. How to enable synchronizing?
  2. If workspaces have more than one editor with same type, how to determine which area in one workspace corresponds to the area in another workspace?
  3. What settings we heed to synchronize - view position / window scroll / settings / open-close state in Outliner
  4. If I change editor type in area, that have marked as synchronized, what should Blender do? Change editor type in all synchronized areas, or disable synchronizing for current area? - my current answer is "disable"
  5. If Blender changes editor type in area by image editor, while rendering, or file browser, what should it do? Change editor types in all synchronized areas, or disable synchronizing for current area? - my current answer is "change editor types"
  6. Should Blender allow creating new synchronizing links, instead using existing ones (For example, synchronizing areas in workspaces W1 <=> W2 and W3 <=> W4, instead W1 <=> W2 <=> W3 <=> W4 )

Solutions

Add a Synchronize property for areas. When two areas in different workspaces are marked as Synchronize, they get same Sinc ID, and Blender will synchronize areas by this ID.

What settings we heed to synchronize

I noted, that synchronization of view position approved by all, but not all wants synchronization of other settings. So there is a suggestion to divide synchronization into several parts: view position, window scroll and settings, open-close state.

Possible solutions how to do this:

  1. Add different menu items:
  • for viewport: Sinc View, Sinc Settings
  • for outliner: Sinc Scroll, Sinc State
  • for 2d editors: Sinc scroll, Sinc Settings
I am not a fan of this because it is not clear. That will happen then one area will mark as Sinc View, other Sinc Settings?
  1. Add settings in User Preferences:
  • View and Scroll Possition
  • Area Settings
  1. Add only synchronizing view position / window scroll / open-close state in Outliner only and add an operator "Copy Overlay (Shading, Gizmo) Settings to all Viewports (Editors)". By the way, it will be nice to have this operator and without this synchronization task

  2. Synchronize all settings, but add more settings to workspace. For example, assign Shading Mode to the workspace (where now Object Mode selector is located). Or maybe, Minimum Shading level. It will be useful for Shading workspace. When you tap to Shading workspace from Solid mode, you switch to "Material Preview", but if you already have Rendered mode, it will be nice to keep it and do not downgrade it to "Material Preview"

UI

The new menu View - Area - Sinc, made like a property with checkbox. If it checked, area is synchronized.
I suggest some different variations, how menu can be looks like, depends on current situation:

rect1063.png

I created this design because @JulianEisel suggest this. This is my first task, if I did something wrong, notify me.

Here is a design discussion about synchronizing editors between workspaces. Basically, synchronizing editors try to keep content in editors with same type when you switch between workspaces. Working prototype and previous discussion is here https://developer.blender.org/D7272 **Problems, that we need to discourse:** 1) How to enable synchronizing? 2) If workspaces have more than one editor with same type, how to determine which area in one workspace corresponds to the area in another workspace? 3) What settings we heed to synchronize - view position / window scroll / settings / open-close state in Outliner 4) If I change editor type in area, that have marked as synchronized, what should Blender do? Change editor type in all synchronized areas, or disable synchronizing for current area? - my current answer is "disable" 5) If Blender changes editor type in area by image editor, while rendering, or file browser, what should it do? Change editor types in all synchronized areas, or disable synchronizing for current area? - my current answer is "change editor types" 6) Should Blender allow creating new synchronizing links, instead using existing ones (For example, synchronizing areas in workspaces W1 <=> W2 and W3 <=> W4, instead W1 <=> W2 <=> W3 <=> W4 ) **Solutions** Add a Synchronize property for areas. When two areas in different workspaces are marked as Synchronize, they get same Sinc ID, and Blender will synchronize areas by this ID. **What settings we heed to synchronize** I noted, that synchronization of view position approved by all, but not all wants synchronization of other settings. So there is a suggestion to divide synchronization into several parts: view position, window scroll and settings, open-close state. Possible solutions how to do this: 1) Add different menu items: - for viewport: Sinc View, Sinc Settings - for outliner: Sinc Scroll, Sinc State - for 2d editors: Sinc scroll, Sinc Settings ``` I am not a fan of this because it is not clear. That will happen then one area will mark as Sinc View, other Sinc Settings? ``` 2) Add settings in User Preferences: - View and Scroll Possition - Area Settings 3) Add only synchronizing view position / window scroll / open-close state in Outliner only and add an operator "Copy Overlay (Shading, Gizmo) Settings to all Viewports (Editors)". By the way, it will be nice to have this operator and without this synchronization task 4) Synchronize all settings, but add more settings to workspace. For example, assign Shading Mode to the workspace (where now Object Mode selector is located). Or maybe, Minimum Shading level. It will be useful for Shading workspace. When you tap to Shading workspace from Solid mode, you switch to "Material Preview", but if you already have Rendered mode, it will be nice to keep it and do not downgrade it to "Material Preview" **UI** The new menu View - Area - Sinc, made like a property with checkbox. If it checked, area is synchronized. I suggest some different variations, how menu can be looks like, depends on current situation: ![rect1063.png](https://archive.blender.org/developer/F8546339/rect1063.png) I created this design because @JulianEisel suggest this. This is my first task, if I did something wrong, notify me.
Michael Soluyanov self-assigned this 2020-05-16 20:34:58 +02:00
Author
Member

Added subscribers: @JulianEisel, @crantisz

Added subscribers: @JulianEisel, @crantisz

Added subscriber: @Debuk

Added subscriber: @Debuk

If workspaces have more than one editor with same type, how to determine which area in one workspace corresponds to the area in another workspace?

This is heavily dependent on if the goal is to support different synchronziation groups/ids for the same editor types or if there is just one sync ID them. (eg have for all 3dviews just one id possible)

If there is just one sync id per areatype, then syncing could be handled like subscribing to its defined id. So more views in a viewport could subsribe to being in sync with that or not and every area could opt out of individual properties associated with this sync id, like pos, shading,...

This comes with limitations in possibilities but would be easier to handle, so my question left open is this, more sync ids per areatype or is that beyond scope ?

> If workspaces have more than one editor with same type, how to determine which area in one workspace corresponds to the area in another workspace? This is heavily dependent on if the goal is to support different synchronziation groups/ids for the same editor types or if there is just one sync ID them. (eg have for all 3dviews just one id possible) If there is just one sync id per areatype, then syncing could be handled like subscribing to its defined id. So more views in a viewport could subsribe to being in sync with that or not and every area could opt out of individual properties associated with this sync id, like pos, shading,... This comes with limitations in possibilities but would be easier to handle, so my question left open is this, `more sync ids per areatype or is that beyond scope` ?
Author
Member

In the last implementation, the sinc IDs in no way depend on the type of editor. It allows keeping areas synchronized, even they temporary replaced by image editor during rendering. And, of-course, it allows synchronizing more than one editor with same type

In the last implementation, the sinc IDs in no way depend on the type of editor. It allows keeping areas synchronized, even they temporary replaced by image editor during rendering. And, of-course, it allows synchronizing more than one editor with same type
Author
Member
MACHIN3tools realization via pie-menu: https://www.youtube.com/watch?v=HdKkskyFDN4&feature=youtu.be&t=263

Added subscriber: @BulatKR

Added subscriber: @BulatKR

Added subscriber: @TheCharacterhero-4

Added subscriber: @TheCharacterhero-4

Added subscriber: @1D_Inc

Added subscriber: @1D_Inc

In #76810#943037, @crantisz wrote:
MACHIN3tools realization via pie-menu: https://www.youtube.com/watch?v=HdKkskyFDN4&feature=youtu.be&t=263

Changing the 3D view is the most disorienting in my opinion.

> In #76810#943037, @crantisz wrote: > MACHIN3tools realization via pie-menu: https://www.youtube.com/watch?v=HdKkskyFDN4&feature=youtu.be&t=263 Changing the 3D view is the most disorienting in my opinion.

Added subscriber: @Luxary

Added subscriber: @Luxary

I think this design proposal could be reworked in favour of simplicity. Two main things come to mind:

  • The sync toggle should probably be a global property that spans across workspaces. The idea would be to activate a Global Sync that stays true for all 3D Views until it's turned off.
  • Everything should be in plain sight. With a single glance the user should be able to tell if the current viewport is synchronized, and if global sync is active at all.

I don't the Global Sync should carry anything other than view_location, view_rotation, view_distance and view_perspective. Perhaps, lens, clip_start and clip_end as well.
Anything more than that would defy the purpose of having multiple workspaces, which tend to have different view/shader settings specifically because they're designed to be different "environments". The true inconvenience that stems from the current situation, IMHO, is the need to readjust the view when working on a certain part of the scene while hopping between different stages (Modeling, Sculpting, Unwrapping, Shading...).

The global syncing should be fast to toggle on and off. Hiding the option into a context menu is inadequate. It both hides the current Sync state from the user, and "opting in" for each viewport is a lengthy and inconvenient process. Instead, I think it would be easier to have a global setting from which a viewport can "opt out" of, entering in a temporary "Free view" state. Here's a working mock-up I made in python:

2020-08-20_17-38-35.mp4

There are still some problems that need to be addressed, such as handling a workspace with many 3D Views. Offhand, it would seem logical to me to designate one of them as the main one from which you'd copy the view settings. After all, multiple 3D Views in workspace are almost always used to check the scene from different angles, perhaps with different settings. The user would be in charge of selecting which view would be the main one, perhaps from the same popover menu that would dynamically accomodate the settings.

Finally, I wouldn't cram too many features into this proposal. Storing and linking multiple sets of views, for example, is something that is not only potentially confusing, but kinda goes out of the main proposal's scope. Not to mention, there are bundled add-ons that enable this functionality . Keeping it simple and manageable is a good first step to actually have something that embraces Blender's design philosophy.

I think this design proposal could be reworked in favour of simplicity. Two main things come to mind: - The sync toggle should probably be a global property that spans across workspaces. The idea would be to activate a Global Sync that stays true for all 3D Views until it's turned off. - Everything should be in plain sight. With a single glance the user should be able to tell if the current viewport is synchronized, and if global sync is active at all. I don't the Global Sync should carry anything other than `view_location`, `view_rotation`, `view_distance` and `view_perspective`. Perhaps, `lens`, `clip_start` and `clip_end` as well. Anything more than that would defy the purpose of having multiple workspaces, which tend to have different view/shader settings specifically because they're designed to be different "environments". The true inconvenience that stems from the current situation, IMHO, is the need to readjust the view when working on a certain part of the scene while hopping between different stages (Modeling, Sculpting, Unwrapping, Shading...). The global syncing should be fast to toggle on and off. Hiding the option into a context menu is inadequate. It both hides the current Sync state from the user, and "opting in" for each viewport is a lengthy and inconvenient process. Instead, I think it would be easier to have a global setting from which a viewport can "opt out" of, entering in a temporary "Free view" state. Here's a working mock-up I made in python: [2020-08-20_17-38-35.mp4](https://archive.blender.org/developer/F8797030/2020-08-20_17-38-35.mp4) There are still some problems that need to be addressed, such as handling a workspace with many 3D Views. Offhand, it would seem logical to me to designate one of them as the main one from which you'd copy the view settings. After all, multiple 3D Views in workspace are almost always used to check the scene from different angles, perhaps with different settings. The user would be in charge of selecting which view would be the main one, perhaps from the same popover menu that would dynamically accomodate the settings. Finally, I wouldn't cram too many features into this proposal. Storing and linking multiple sets of views, for example, is something that is not only potentially confusing, but kinda goes out of the main proposal's scope. Not to mention, [there are bundled add-ons that enable this functionality ](https://docs.blender.org/manual/en/dev/addons/3d_view/stored_views.html). Keeping it simple and manageable is a good first step to actually have something that embraces Blender's design philosophy.

Added subscriber: @NeilSmith-1

Added subscriber: @NeilSmith-1

Added subscriber: @APEC

Added subscriber: @APEC

In #76810#999675, @Luxary wrote:

Looks so nice!
The "lock" on views looks just perfect instead of checkboxes.

One thing is to move this option to View - View Sync

> In #76810#999675, @Luxary wrote: Looks so nice! The "lock" on views looks just perfect instead of checkboxes. One thing is to move this option to View - View Sync

In #76810#1068964, @APEC wrote:

Well, usually, in the context menus you'd have single-entry operators and nothing else. They're not really meant for checkboxes and stuff.
This was thought more along the lines of Object Types Visibility panel, the functionality of UI elements is pretty similar to that.
Also, I felt like it would have to be as readily accessible as possible, hence why I hacked it in the viewport.

I'm glad you like it, though. But I wonder if this task needs to be re-published, since it's inactive by now.

> In #76810#1068964, @APEC wrote: Well, usually, in the context menus you'd have single-entry operators and nothing else. They're not really meant for checkboxes and stuff. This was thought more along the lines of Object Types Visibility panel, the functionality of UI elements is pretty similar to that. Also, I felt like it would have to be as readily accessible as possible, hence why I hacked it in the viewport. I'm glad you like it, though. But I wonder if this task needs to be re-published, since it's inactive by now.

In #76810#1068978, @Luxary wrote:
They're not really meant for checkboxes and stuff.

Yes, you are right. There is no place in viewport except where it is now or near the "View Object Types".

BTW what we should do to make this design active?

> In #76810#1068978, @Luxary wrote: > They're not really meant for checkboxes and stuff. Yes, you are right. There is no place in viewport except where it is now or near the "View Object Types". BTW what we should do to make this design active?

In #76810#1068986, @APEC wrote:
BTW what we should do to make this design active?

Ah, nevermind that, I just noticed it's on the 2.92 Workboard as Short-Term Scope, just not as high in priority, so it's fine the way it is. It will eventually bubble to the top (hopefully) ;)
This thread is meant for design proposals and technical discussion by the way, so we should avoid anything that isn't strictly related to that.

> In #76810#1068986, @APEC wrote: > BTW what we should do to make this design active? Ah, nevermind that, I just noticed it's on the 2.92 Workboard as Short-Term Scope, just not as high in priority, so it's fine the way it is. It will eventually bubble to the top (hopefully) ;) This thread is meant for design proposals and technical discussion by the way, so we should avoid anything that isn't strictly related to that.

Added subscriber: @ckohl_art

Added subscriber: @ckohl_art

Added subscriber: @StroBlend

Added subscriber: @StroBlend

Hi @Luxary any news here ? is this patch ready ? We have the nicer user interface of all 3D softwares and workspaces is a wonderful/powerful feature to quickly jump between different workflow, And THIS please! can really give a better user experience using full worspaces potential! So we don't have to make lot of scroll and rotate of viewport to continue the work on what we were just currently working at!
Blender 3.0 is coming and it will fit perfectly with it!

Hi @Luxary any news here ? is this patch ready ? We have the nicer user interface of all 3D softwares and workspaces is a wonderful/powerful feature to quickly jump between different workflow, And THIS please! can really give a better user experience using full worspaces potential! So we don't have to make lot of scroll and rotate of viewport to continue the work on what we were just currently working at! Blender 3.0 is coming and it will fit perfectly with it!

Would be nice feature for 3.1+
Just to remember for subscribers, this design still exist.

Would be nice feature for 3.1+ Just to remember for subscribers, this design still exist.
Author
Member

I've made an add-on with this functionality:

https://blenderartists.org/t/synchronize-workspaces-blender-add-on/1356695

Post suggestions for improvements, after the add-on will be more polished, I will post it in suggest add-on box.

I've made an add-on with this functionality: https://blenderartists.org/t/synchronize-workspaces-blender-add-on/1356695 Post suggestions for improvements, after the add-on will be more polished, I will post it in suggest add-on box.

Added subscriber: @Mentales

Added subscriber: @Mentales
Philipp Oeser removed the
Interest
User Interface
label 2023-02-10 09:24:27 +01:00
Member

Removing the Needs Triage label. This is under the general rule that Design and TODO tasks should not have a status.

If you believe this task is no longer relevant, feel free to close it.

Removing the `Needs Triage` label. This is under the general rule that Design and TODO tasks should not have a status. If you believe this task is no longer relevant, feel free to close it.
Alaska removed the
Status
Needs Triage
label 2024-04-07 05:44:35 +02:00
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#76810
No description provided.