Make XYZ symmetry a property of Objects #79785

Closed
opened 2020-08-14 17:03:53 +02:00 by Pablo Dobarro · 19 comments
Member

Currently, XYZ symmetry options are available in all Edit and Paint Modes as a property of the mode, which is shared for all tools in that mode. This has the following implications:

  • Editing operations are not consistent between modes, so it is possible to unintentionally break an objects symmetry by using a tool in a different mode. Moving a part of the mesh in sculpt mode and edit mode will have different results if the symmetry options of both modes are not equal. As a workaround for this, user often use the mirror modifier to keep symmetry consistent between all modes and operations.

  • Symmetry options in the same mode are preserved when switching objects. This means that when you switch the active object in a paint mode, you need to also manually switch the symmetry options that make sense for that object. The most common example for this blocking a character's head in sculpt mode. The face is usually symmetrical, but the hair is not. Switching from the face to the hair currently implies the following operations

    • Exit Sculpt Mode in Object A
    • Select Object B
    • Enter Sculpt Mode in Object B
    • Manually configure the symmetry options for Object B
      As these kind of operations are quite common when working with modes with multiple object, forgetting enabling the right symmetry options when you change objects means that you need to resymetrize the mesh or manually clean the unintended affected area.

By moving the symmetry properties to be stored in Objects, we achieve the following:

  • Modes can always read same symmetry options for the object, so all operations are consistent between all modes, making harder to break an objects symmetry unintentionally
  • When switching objects with different symmetry properties, all tools of the mode will adapt to the symmetry of the new object without tweaking the symmetry settings after each object change.
  • Users will also be able to enable/disable the symmetry for an existing model with multiple objects by using the existing multi object property editing capabilities.

This change does not require any UI change. Symmetry options can be exposed both in the objects property panel and in the topbar.

Currently, XYZ symmetry options are available in all Edit and Paint Modes as a property of the mode, which is shared for all tools in that mode. This has the following implications: - Editing operations are not consistent between modes, so it is possible to unintentionally break an objects symmetry by using a tool in a different mode. Moving a part of the mesh in sculpt mode and edit mode will have different results if the symmetry options of both modes are not equal. As a workaround for this, user often use the mirror modifier to keep symmetry consistent between all modes and operations. - Symmetry options in the same mode are preserved when switching objects. This means that when you switch the active object in a paint mode, you need to also manually switch the symmetry options that make sense for that object. The most common example for this blocking a character's head in sculpt mode. The face is usually symmetrical, but the hair is not. Switching from the face to the hair currently implies the following operations - Exit Sculpt Mode in Object A - Select Object B - Enter Sculpt Mode in Object B - Manually configure the symmetry options for Object B As these kind of operations are quite common when working with modes with multiple object, forgetting enabling the right symmetry options when you change objects means that you need to resymetrize the mesh or manually clean the unintended affected area. By moving the symmetry properties to be stored in Objects, we achieve the following: - Modes can always read same symmetry options for the object, so all operations are consistent between all modes, making harder to break an objects symmetry unintentionally - When switching objects with different symmetry properties, all tools of the mode will adapt to the symmetry of the new object without tweaking the symmetry settings after each object change. - Users will also be able to enable/disable the symmetry for an existing model with multiple objects by using the existing multi object property editing capabilities. This change does not require any UI change. Symmetry options can be exposed both in the objects property panel and in the topbar.
Author
Member
Added subscribers: @PabloDobarro, @JulienKaspar, @JulianEisel, @pablovazquez

Added subscriber: @brecht

Added subscriber: @brecht

Related discussion for this is in #65872 and D3869.

I think the consensus is that these symmetry settings should be per object and also unified across modes.

For edit mode, symmetry is already a property of the object, not the mode. It doesn't have all the same settings as sculpt mode, but those can be added. Ideally edit mode would then also support them.

Related discussion for this is in #65872 and [D3869](https://archive.blender.org/developer/D3869). I think the consensus is that these symmetry settings should be per object and also unified across modes. For edit mode, symmetry is already a property of the object, not the mode. It doesn't have all the same settings as sculpt mode, but those can be added. Ideally edit mode would then also support them.
Author
Member

It looks like they are a property of meshes, not objects. So the idea would be to create new OB_SYMMETRY_ flags and use them everywhere, replacing all the current flags we have now, right?

About radial and tiling, I was planning to dealing with those in a different way when refactoring how symmetry works in sculpt mode. I would rather have those options as a part of a separate, more flexible system that allows to create instances of the same stroke in a more flexible way, and then, apply XYZ symmetry on top of the instances.

It looks like they are a property of meshes, not objects. So the idea would be to create new OB_SYMMETRY_ flags and use them everywhere, replacing all the current flags we have now, right? About radial and tiling, I was planning to dealing with those in a different way when refactoring how symmetry works in sculpt mode. I would rather have those options as a part of a separate, more flexible system that allows to create instances of the same stroke in a more flexible way, and then, apply XYZ symmetry on top of the instances.

In #79785#996288, @PabloDobarro wrote:
It looks like they are a property of meshes, not objects. So the idea would be to create new OB_SYMMETRY_ flags and use them everywhere, replacing all the current flags we have now, right?

Actually, I think symmetry remaining a mesh rather than object property is right?

In most cases it won't make a difference, but when you do switch between mesh datablocks on an object or share the mesh between multiple objects, I think you do want the symmetry to come along with the mesh.

About radial and tiling, I was planning to dealing with those in a different way when refactoring how symmetry works in sculpt mode. I would rather have those options as a part of a separate, more flexible system that allows to create instances of the same stroke in a more flexible way, and then, apply XYZ symmetry on top of the instances.

I don't know enough about typical workflow to have a strong opinion on this. Radial symmetry to me seems very similar to mirror symmetry conceptually, but I don't know if in practice this option is something you would have enabled for a long time, or if it's more something you use with a particular tool and then disable again.

> In #79785#996288, @PabloDobarro wrote: > It looks like they are a property of meshes, not objects. So the idea would be to create new OB_SYMMETRY_ flags and use them everywhere, replacing all the current flags we have now, right? Actually, I think symmetry remaining a mesh rather than object property is right? In most cases it won't make a difference, but when you do switch between mesh datablocks on an object or share the mesh between multiple objects, I think you do want the symmetry to come along with the mesh. > About radial and tiling, I was planning to dealing with those in a different way when refactoring how symmetry works in sculpt mode. I would rather have those options as a part of a separate, more flexible system that allows to create instances of the same stroke in a more flexible way, and then, apply XYZ symmetry on top of the instances. I don't know enough about typical workflow to have a strong opinion on this. Radial symmetry to me seems very similar to mirror symmetry conceptually, but I don't know if in practice this option is something you would have enabled for a long time, or if it's more something you use with a particular tool and then disable again.
Author
Member

Actually, I think symmetry remaining a mesh rather than object property is right?

I'm also not sure about that. What about editing tools for armatures or volumes? My idea was to use the same flags everywhere.
If it is ok to have different symmetry flags per object type then It would probable make sense to move the symmetry options to meshes.

> Actually, I think symmetry remaining a mesh rather than object property is right? I'm also not sure about that. What about editing tools for armatures or volumes? My idea was to use the same flags everywhere. If it is ok to have different symmetry flags per object type then It would probable make sense to move the symmetry options to meshes.

I think we can define the properties on meshes, armatures, etc individually. But we should aim to make them consistent and share code where possible.

At some point we should introduce a Geometry base class. But for now some things like materials and textures space settings are duplicated, and I don't see a problem with that being the same for symmetry.

I think we can define the properties on meshes, armatures, etc individually. But we should aim to make them consistent and share code where possible. At some point we should introduce a Geometry base class. But for now some things like materials and textures space settings are duplicated, and I don't see a problem with that being the same for symmetry.
Pablo Dobarro self-assigned this 2020-08-14 18:45:49 +02:00
Author
Member

Ok, I'll try to work on this next week then

Ok, I'll try to work on this next week then

Added subscriber: @hadrien

Added subscriber: @hadrien

In #79785#996298, @PabloDobarro wrote:
I'm also not sure about that. What about editing tools for armatures or volumes?

Typical characters are symmetrical, props and other objects can either be or not be, so I would say it makes sense in the context of rigging that symmetry be a per-armature setting as well. However, it would probably have to be split off from pose mode's symmetry options as well, because animators don't want to be posing their character symmetrically (unless exceptional circumstances), otherwise any symmetrical edit required on the character rig file would require the rigger to turn symmetry on, make the needed fixes, and turn it off again before saving. Or maybe this is something riggers could live with ?

Is this task related at all to edit mode operators' symmetry support ?

> In #79785#996298, @PabloDobarro wrote: > I'm also not sure about that. What about editing tools for armatures or volumes? Typical characters are symmetrical, props and other objects can either be or not be, so I would say it makes sense in the context of rigging that symmetry be a per-armature setting as well. However, it would probably have to be split off from pose mode's symmetry options as well, because animators don't want to be posing their character symmetrically (unless exceptional circumstances), otherwise any symmetrical edit required on the character rig file would require the rigger to turn symmetry on, make the needed fixes, and turn it off again before saving. Or maybe this is something riggers could live with ? Is this task related at all to edit mode operators' symmetry support ?

Added subscriber: @zeauro

Added subscriber: @zeauro

A 3D shape can be made of many parts that have different symmetries.
An octopus with symmetrical tentacles, but each one is unique and a symmetrical head.

Unfortunately, only mirror modifier allows to play with a custom plane of symmetry defined by an object without messing up origin of object.
And the use of mirror modifier forced the whole mesh to be symmetrical at the end.
Contrary to mirror modifier, you can work in edit mode or sculpt mode with an asymmetrical mesh to make symmetrical only one part of mesh.
But currently, we often have to modify origin of object just for the change and then, to reset it where it was.

I am not doing the same task in edit mode, sculpt mode, weight paint mode or texture paint mode.
So, often, I don't need same symmetry options in all modes.
I need symmetry options pertinent for the task I am doing.
I need symmetry options versatile that I can change according to my task.

So, that makes sense to have different symmetry options per object, per mode and per working sessions.
If one day, we have multi-editing working with sculpt mode. We would need a way to synchronize symmetry through all objects to maintain sculpt strokes.
I don't mind to have symmetry synchronized through all modes based on origin position by default.
As long as I have a way to modify that.

When you are posing basis of mesh, that make sense to have synchronized symmetry through all modes.
But that is the opposite that is desired when you are detailing the model.

Symmetry seems to be something very simple with just X,Y,Z buttons.
But if you add radial symmetry and a possible custom origin, that would not be so simple.
And it would be valuable to have presets for that.
So, maybe, there is a means to make symmetry presets that can be shared through modes, with ability to use a different preset per mode. (Like matcaps/studio lights per 3D view).
Maybe other mode options could be shared as is.
Instead of just Symmetry presets we could imagine Mode Options presets.
(Same way that people are still hoping for shading presets).

A 3D shape can be made of many parts that have different symmetries. An octopus with symmetrical tentacles, but each one is unique and a symmetrical head. Unfortunately, only mirror modifier allows to play with a custom plane of symmetry defined by an object without messing up origin of object. And the use of mirror modifier forced the whole mesh to be symmetrical at the end. Contrary to mirror modifier, you can work in edit mode or sculpt mode with an asymmetrical mesh to make symmetrical only one part of mesh. But currently, we often have to modify origin of object just for the change and then, to reset it where it was. I am not doing the same task in edit mode, sculpt mode, weight paint mode or texture paint mode. So, often, I don't need same symmetry options in all modes. I need symmetry options pertinent for the task I am doing. I need symmetry options versatile that I can change according to my task. So, that makes sense to have different symmetry options per object, per mode and per working sessions. If one day, we have multi-editing working with sculpt mode. We would need a way to synchronize symmetry through all objects to maintain sculpt strokes. I don't mind to have symmetry synchronized through all modes based on origin position by default. As long as I have a way to modify that. When you are posing basis of mesh, that make sense to have synchronized symmetry through all modes. But that is the opposite that is desired when you are detailing the model. Symmetry seems to be something very simple with just X,Y,Z buttons. But if you add radial symmetry and a possible custom origin, that would not be so simple. And it would be valuable to have presets for that. So, maybe, there is a means to make symmetry presets that can be shared through modes, with ability to use a different preset per mode. (Like matcaps/studio lights per 3D view). Maybe other mode options could be shared as is. Instead of just Symmetry presets we could imagine Mode Options presets. (Same way that people are still hoping for shading presets).

This issue was referenced by 5502517c3c

This issue was referenced by 5502517c3c12086c111ae5477fae9c0d2eb8a84c

Added subscriber: @rwman

Added subscriber: @rwman
Member

Added subscriber: @lichtwerk

Added subscriber: @lichtwerk
Member

Changed status from 'Needs Triage' to: 'Needs Developer To Reproduce'

Changed status from 'Needs Triage' to: 'Needs Developer To Reproduce'
Member
  • sculpt_paint_texture devs: I assume this is obsolete now that 5502517c3c is in?
- sculpt_paint_texture devs: I assume this is obsolete now that 5502517c3c is in?

Changed status from 'Needs Developer To Reproduce' to: 'Resolved'

Changed status from 'Needs Developer To Reproduce' to: 'Resolved'

I believe so.

I believe so.
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
7 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#79785
No description provided.