UI: Improve Mesh Edge Highlighting #111431

Manually merged
Campbell Barton merged 12 commits from Gilberto.R/blender:temp-edgehighlight into main 2023-11-02 12:10:12 +01:00
Contributor

Changes to edit mode mesh overlays, use hue shift instead of color fading/darkening for selection mode visual differentiation, and some theme changes to improve the display of mesh edges and faces with good selection visibility. Also:

  • Removed "edge" toggle from edit mode overlays panel.
  • No longer halves the edge and face alpha depending on selection mode. Half the face alpha in wireframe mode. For better visibility on most themes.
  • Adjusted theme presets for better visibility, selection mode differentiation, or to follow the theme concept even more (Maya theme).

The visibility of mesh edges were more distinct in Blender 2.79 than in 2.80+ versions. The "edge highlight" option in the edit mode viewport overlay panel being 'off' by default is one of the reasons why. The edges are faded, making selection harder to see. Turning edge highlight ON helps selection visibility and reduced eye fatigue when modeling for many hours.

In the following poll, the vast majority of respondents support edge highlighting being 'ON' by default: https://devtalk.blender.org/t/blender-4-0-default-change-edge-highlighting-feedback/30203

But turning it 'on', without other changes, removes some visual distinction between selection modes. This PR removes this toggle and removes the edge/face color fading, and instead adds secondary hue shifted selection theme colors that are used depending on the active selection mode (for select edge/select face).

Following shows some comparisons. For each monkey the current behavior is to the left, this PR on the right. The top-left monkey is in Vertex select mode, the top-right is Edge select, bottom-left is Face select, bottom right has all selection modes selected:

image

Changes to edit mode mesh overlays, use hue shift instead of color fading/darkening for selection mode visual differentiation, and some theme changes to improve the display of mesh edges and faces with good selection visibility. Also: - Removed "edge" toggle from edit mode overlays panel. - No longer halves the edge and face alpha depending on selection mode. Half the face alpha in wireframe mode. For better visibility on most themes. - Adjusted theme presets for better visibility, selection mode differentiation, or to follow the theme concept even more (Maya theme). --- The visibility of mesh edges were more distinct in Blender 2.79 than in 2.80+ versions. The "edge highlight" option in the edit mode viewport overlay panel being 'off' by default is one of the reasons why. The edges are faded, making selection harder to see. Turning edge highlight ON helps selection visibility and reduced eye fatigue when modeling for many hours. In the following poll, the vast majority of respondents support edge highlighting being 'ON' by default: https://devtalk.blender.org/t/blender-4-0-default-change-edge-highlighting-feedback/30203 But turning it 'on', without other changes, removes some visual distinction between selection modes. This PR removes this toggle and removes the edge/face color fading, and instead adds secondary hue shifted selection theme colors that are used depending on the active selection mode (for select edge/select face). Following shows some comparisons. For each monkey the current behavior is to the left, this PR on the right. The top-left monkey is in Vertex select mode, the top-right is Edge select, bottom-left is Face select, bottom right has all selection modes selected: ![image](/attachments/e346fe82-ecac-4f64-825e-73cc62c6904c)
137 KiB
646 KiB
Gilberto Rodrigues requested review from Pablo Vazquez 2023-08-23 14:34:39 +02:00
Gilberto Rodrigues requested review from Campbell Barton 2023-08-23 14:34:57 +02:00

The down side of this is it makes it harder to tell (at a glance) the difference between vertex & edge-select mode.
This is worst when the entire mesh is selected.
There is also no visual difference between "Vertex" and "Vertex+Edge" selection modes.

During 2.8 design some effort was made to have the different modes visually distinctive.

An alternative to this patch could be to:

  • Adjust the highlighting of edges when when edge-highlight is disabled.
  • Increase the contrast between selected faces & selected edges, to make the edges easier to read.

Although the benefits of tweaking the current colors may be marginal.

Overall if others prefer this behavior, I think it's OK but it does undermine our attempt to make the selection modes visually distinct which is a shame.


Adding @JulienKaspar as reviewer.

The down side of this is it makes it harder to tell (at a glance) the difference between vertex & edge-select mode. This is worst when the entire mesh is selected. There is also no visual difference between "Vertex" and "Vertex+Edge" selection modes. During 2.8 design some effort was made to have the different modes visually distinctive. An alternative to this patch could be to: - Adjust the highlighting of edges when when edge-highlight is disabled. - Increase the contrast between selected faces & selected edges, to make the edges easier to read. Although the benefits of tweaking the current colors may be marginal. Overall if others prefer this behavior, I think it's OK but it does undermine our attempt to make the selection modes visually distinct which is a shame. ---- Adding @JulienKaspar as reviewer.
Campbell Barton requested review from Julien Kaspar 2023-08-24 03:29:36 +02:00
Author
Contributor

@ideasman42 what you said is true, but I still think that the change is worth it. It boils down to a trade off between seeing well what is selected and knowing quickly what selection mode you're in.
When could someone not know what selection mode they're in? When they first open some file, or when they misstype the selection mode hotkey number, or when they just forget. They'll notice it as soon as they select something or look at the icons. But when does someone needs to see well what's selected? Much more often: after every selection to confirm visually that it was selected correctly and before doing any operation.
I have felt the eye strain after long modelling sessions in 2.80+, and that has been a huge painpoint for multiple users in the 2.8 wireframe discussion: https://devtalk.blender.org/t/blender-2-8-wireframes-discussion
It took me a while to discover that there was a toggle to resolve that eye health issue. And I think many people still don't know that this toggle exists because I see youtubers make their vertex very big to compensate for the bad visibility.

Everything that you have mentioned already also applies to the wireframe shading mode and the x-ray mode, since you reported and fixed the poor edge visibility in those modes by turning the edge highlight always 'on' in them. #67637
And after your patch there was no one concerned or bothered by not knowing the selection mode they're in, in those shading modes.
Just like there wasn't anyone concerned by that in 2.79 or earlier versions.

@ideasman42 what you said is true, but I still think that the change is worth it. It boils down to a trade off between seeing well what is selected and knowing quickly what selection mode you're in. When could someone not know what selection mode they're in? When they first open some file, or when they misstype the selection mode hotkey number, or when they just forget. They'll notice it as soon as they select something or look at the icons. But when does someone needs to see well what's selected? Much more often: after every selection to confirm visually that it was selected correctly and before doing any operation. I have felt the eye strain after long modelling sessions in 2.80+, and that has been a huge painpoint for multiple users in the 2.8 wireframe discussion: https://devtalk.blender.org/t/blender-2-8-wireframes-discussion It took me a while to discover that there was a toggle to resolve that eye health issue. And I think many people still don't know that this toggle exists because I see youtubers make their vertex very big to compensate for the bad visibility. Everything that you have mentioned already also applies to the wireframe shading mode and the x-ray mode, since you reported and fixed the poor edge visibility in those modes by turning the edge highlight always 'on' in them. https://projects.blender.org/blender/blender/issues/67637 And after your patch there was no one concerned or bothered by not knowing the selection mode they're in, in those shading modes. Just like there wasn't anyone concerned by that in 2.79 or earlier versions.
Author
Contributor

This picture shows how the selection visibility is compared to 2.79(the one on the right). Even with a smaller vertex it's easier to see the 2.79 selection.

image

This picture shows how the selection visibility is compared to 2.79(the one on the right). Even with a smaller vertex it's easier to see the 2.79 selection. ![image](/attachments/c09621d3-ec79-41e7-8b49-8ef182b9f3c9)
Member

I think this is going in the right direction. Dimming the values of wires depending on the selection mode is hurting readability.

I'd propose to take this further. Remove this overlay option. Instead shift the Hue to indicate the active selection modes.
Display inactive selection mode components slightly more red-orange with full value intensity.
Active selection components are bright yellow-orange to stand out.
Faces can still be slightly dimmed outside of face selection mode to keep verts/edges more readable.
This way we still keep visual feedback of what selection mode is active.

Vert Edge Face
Screenshot_20230824_123905.png Screenshot_20230824_124051.png Screenshot_20230824_123930.png

Here's are the current colors for comparison:

Vert Edge Face
Screenshot_20230824_124402.png Screenshot_20230824_124404.png Screenshot_20230824_124406.png

I didn't have time to read through the forum threads. But I'd be happy to once I have more time.

I think this is going in the right direction. Dimming the values of wires depending on the selection mode is hurting readability. I'd propose to take this further. Remove this overlay option. Instead shift the Hue to indicate the active selection modes. Display inactive selection mode components slightly more red-orange with full value intensity. Active selection components are bright yellow-orange to stand out. Faces can still be slightly dimmed outside of face selection mode to keep verts/edges more readable. This way we still keep visual feedback of what selection mode is active. | Vert | Edge | Face | | -------- | -------- | -------- | | ![Screenshot_20230824_123905.png](/attachments/6636a1a3-591c-4cca-ad2f-5e57f3ba46cd) | ![Screenshot_20230824_124051.png](/attachments/eabc0868-e7d3-40e9-9d10-b11e7bfc9e88) | ![Screenshot_20230824_123930.png](/attachments/ca25002b-e102-4eef-b51c-0bf0bb275691) | Here's are the current colors for comparison: | Vert | Edge | Face | | -------- | -------- | -------- | | ![Screenshot_20230824_124402.png](/attachments/eeca7dd7-762e-40ec-be47-971286b8a615) | ![Screenshot_20230824_124404.png](/attachments/22854a5d-3769-4570-8eb6-ff451e2f3b0b) | ![Screenshot_20230824_124406.png](/attachments/d668f6eb-8b0f-4c95-a0c1-3657127a2557) | I didn't have time to read through the forum threads. But I'd be happy to once I have more time.
Author
Contributor

@JulienKaspar Your idea for differentiating the selection modes is good, but I'm generally against having different color in the viewport from the selection colors set in the theme. Also, 10% of the users voted against the change, so I don't know if the 10% will be happy if I completely remove the toggle. Because they didn't provide any reasoning why they don't like it 'on', I'm not sure if they'll be satisfied with your solution.
Personally, I have never felt any need for differentiating more the selection modes. But if you want this, we could do something simpler and more impactful: change the selected vertex color a bit and turn on the facedot.
Still, I think any change besides turning Edge Highlight on is unecessary.

@JulienKaspar Your idea for differentiating the selection modes is good, but I'm generally against having different color in the viewport from the selection colors set in the theme. Also, 10% of the users voted against the change, so I don't know if the 10% will be happy if I completely remove the toggle. Because they didn't provide any reasoning why they don't like it 'on', I'm not sure if they'll be satisfied with your solution. Personally, I have never felt any need for differentiating more the selection modes. But if you want this, we could do something simpler and more impactful: change the selected vertex color a bit and turn on the facedot. Still, I think any change besides turning Edge Highlight on is unecessary.
Harley Acheson added this to the User Interface project 2023-08-25 02:11:49 +02:00
Member

In this idea the colors used are the similar to object mode for selections and active selection.
So it's still within the theme.

I would discourage from enabling face dots by default. They signify a change in selection behavior. Like when Xray is enabled, faces are selected via the face dots.

I can share this on the forum threads. Would be good to get some more opinions on this.

In this idea the colors used are the similar to object mode for selections and active selection. So it's still within the theme. I would discourage from enabling face dots by default. They signify a change in selection behavior. Like when Xray is enabled, faces are selected via the face dots. I can share this on the forum threads. Would be good to get some more opinions on this.
Member

Hmm ok seems like the Hue shift idea wouldn't solve the issue of selection mode differentiation for unselected wires ...

I think then I'd be fine with either solution. Enabling edge highlights by default, or that + the hue shift.
Both will increase the wire visibility.
The latter would keep selection mode differentiation a little bit (but only in the edge case of using both vert and wire selection at the same time), so it's negligeable.

Hmm ok seems like the Hue shift idea wouldn't solve the issue of selection mode differentiation for unselected wires ... I think then I'd be fine with either solution. Enabling edge highlights by default, or that + the hue shift. Both will increase the wire visibility. The latter would keep selection mode differentiation a little bit (but only in the edge case of using both vert and wire selection at the same time), so it's negligeable.
Member

Not my area (at all), but this thread reads like there could be some kind of compromise - Edge highlight on and a lessened hue change? My gut feeling is that something that both @JulienKaspar and @Gilberto.R agree on would be a great improvement.

I'm just not wanting this thread and PR to stall.

Not my area (at all), but this thread reads like there could be some kind of compromise - Edge highlight on and a lessened hue change? My gut feeling is that something that both @JulienKaspar and @Gilberto.R agree on would be a great improvement. I'm just not wanting this thread and PR to stall.
Author
Contributor

@JulienKaspar the hue shift would work for unselected edges if they were changed to light blue (I don't like this idea, just mentioning it)

@JulienKaspar the hue shift would work for unselected edges if they were changed to light blue (I don't like this idea, just mentioning it)
Author
Contributor

Either way, the edge highlight will be turned on, so we don't have to wait for the additional changes if we decide to do them. Most people already prefer edge highlight ON, as seen on the poll, and having it off is a health issue. Can we just approve and commit this?

Either way, the edge highlight will be turned on, so we don't have to wait for the additional changes if we decide to do them. Most people already prefer edge highlight ON, as seen on the poll, and having it off is a health issue. Can we just approve and commit this?
Member

@pablovazquez @ideasman42 What do you think? Would you be fine with having the Edge highlight enabled by default?
And what about a subtle hue shift for selected verts/edges/faces depending on the enabled selection modes?

@pablovazquez @ideasman42 What do you think? Would you be fine with having the Edge highlight enabled by default? And what about a subtle hue shift for selected verts/edges/faces depending on the enabled selection modes?
Member

What do you think? Would you be fine with having the Edge highlight enabled by default?

If there will be no difference between Vertex and Edge select modes, why having this setting at all then?

Another option is for edges to be drawn thicker when in Edge select mode, or selected . This has been discussed back in 2.8x but the theme setting didn't exist back then.

Vertex mode Edge mode Vertex+Edge
1 2 3

Only selected:

image

And what about a subtle hue shift for selected verts/edges/faces depending on the enabled selection modes?

This could be interesting to test. Perhaps now with this highlight we can revisit the idea of using the object data color for edit mode. But it can be done as a separate patch.

> What do you think? Would you be fine with having the Edge highlight enabled by default? If there will be no difference between Vertex and Edge select modes, why having this setting at all then? Another option is for edges to be drawn thicker when in Edge select mode, or selected . This has been discussed back in 2.8x but the theme setting didn't exist back then. |Vertex mode|Edge mode|Vertex+Edge| |----|----|----| |![1](/attachments/fe93b38e-b75c-484f-a5b3-f3e5750b0db7)|![2](/attachments/0ffed4a8-9511-4d3a-9769-1e94ee786292)|![3](/attachments/2d4dd908-1a53-45ec-8d0b-e99d4bcc2261)| Only selected: ![image](/attachments/1edb379f-9c5d-4cef-9cfb-971ef1a0f465) > And what about a subtle hue shift for selected verts/edges/faces depending on the enabled selection modes? This could be interesting to test. Perhaps now with this highlight we can revisit the idea of using the object data color for edit mode. But it can be done as a separate patch.
First-time contributor

Another option is for edges to be drawn thicker when in Edge select mode, or selected

Thickening wireframes display have been discussed, such a solution doesnot fit dense wireframes readability conditions.

our attempt to make the selection modes visually distinct

In blender the selection is transferrable (vertices selection forms edges and faces selection and vice versa), this way the selection is supposed to be the same in every mode, and the difference between selection modes is the difference between operations you can apply to it (expand, form, apply tools, filter non-faces selection by switching to faces mode, etc).

The distinction solution has two main flaws - the selection looks different between modes, and dimming contrast solution injures readability, since human's perception of a color is not linear and distinguishable color dimming also results in huge contrast perception dropdown, making the selection not recognisable fast enough.

> Another option is for edges to be drawn thicker when in Edge select mode, or selected Thickening wireframes display have been discussed, such a solution doesnot fit dense wireframes readability conditions. > our attempt to make the selection modes visually distinct In blender the selection is transferrable (vertices selection forms edges and faces selection and vice versa), this way the selection is supposed to be the same in every mode, and the difference between selection modes is the difference between operations you can apply to it (expand, form, apply tools, filter non-faces selection by switching to faces mode, etc). The distinction solution has two main flaws - the selection looks different between modes, and dimming contrast solution injures readability, since human's perception of a color is not linear and distinguishable color dimming also results in huge contrast perception dropdown, making the selection not recognisable fast enough.
Author
Contributor

@pablovazquez If it was up to me I would totally remove that toggle, but 10% of people are against the change. that's why I didn't remove it. I think it's because they are used to other software, and want no selection color on unselected edges around selected vertex in vertex select mode, which could be a theme option. but until they say why, I'm just guessing.

@pablovazquez If it was up to me I would totally remove that toggle, but 10% of people are against the change. that's why I didn't remove it. I think it's because they are used to other software, and want no selection color on unselected edges around selected vertex in vertex select mode, which could be a theme option. but until they say why, I'm just guessing.
Member

I think it would be good to do something here. We have a bunch of options to move forward and testing them out and tweaking would help.

If a perfect solution can't be reached I think it would be fine having the edge highlight enabled by default for now.
Better edge readability definitely trumps distinguishing vertex & edge selection mode combinations. Especially because Blender is not strict with what operations can be used between selection modes.

I think it would be good to do something here. We have a bunch of options to move forward and testing them out and tweaking would help. If a perfect solution can't be reached I think it would be fine having the edge highlight enabled by default for now. Better edge readability definitely trumps distinguishing vertex & edge selection mode combinations. Especially because Blender is not strict with what operations can be used between selection modes.
First-time contributor

In the other software mesh selection submodes has indeed very different mechanics - it is not (directly) transferrable, there are separate independent vertices, edges, faces and entities selection modes, each of them stores its own selection (vertices selection doesnot form edges and faces selection by default there) and each submode has its own subset of operations to apply.
Such a system assumes different mechanics to operate, and has its own flaws and tradeoffs, including selection displaying/analysis area.

Since its mesh selection submodes are not transferrable and stores independent selections, visual selection submodes distinguishing is quite natural for such kind of a systems.

In the other software mesh selection submodes has indeed very different mechanics - it is not (directly) transferrable, there are separate independent vertices, edges, faces and entities selection modes, each of them stores its own selection (vertices selection doesnot form edges and faces selection by default there) and each submode has its own subset of operations to apply. Such a system assumes different mechanics to operate, and has its own flaws and tradeoffs, including selection displaying/analysis area. Since its mesh selection submodes are not transferrable and stores independent selections, visual selection submodes distinguishing is quite natural for such kind of a systems.
Member

@Gilberto.R

Hey, we talked about this in the UI Module meeting yesterday and it took an interesting turn...

We started off by just agreeing that it is better with that option on. But then reasoning that that if it was on by default there isn't a reason to turn it off. So why not just remove the option?

If the option is removed we could just, under the hood, act like it is on when in vertex or edge mode, but off if face selection (only). On if you have edge+face, etc. If I am misunderstanding the conversation, best if @pablovazquez weighed in.

The discussed solution would be something like the following. Do you see any problems with the idea?

diff --git a/scripts/startup/bl_ui/space_view3d.py b/scripts/startup/bl_ui/space_view3d.py
index 4a389dc291a..2a56d9dffc0 100644
--- a/scripts/startup/bl_ui/space_view3d.py
+++ b/scripts/startup/bl_ui/space_view3d.py
@@ -6803,8 +6803,6 @@ class VIEW3D_PT_overlay_edit_mesh(Panel):
 
         sub = split.column()
         sub.active = is_any_solid_shading
-        sub.prop(overlay, "show_edges", text="Edges")
-        sub = split.column()
         sub.prop(overlay, "show_faces", text="Faces")
         sub = split.column()
         sub.active = is_any_solid_shading
diff --git a/source/blender/blenloader/intern/versioning_280.cc b/source/blender/blenloader/intern/versioning_280.cc
index 7ff1d692848..1244db462cc 100644
--- a/source/blender/blenloader/intern/versioning_280.cc
+++ b/source/blender/blenloader/intern/versioning_280.cc
@@ -4105,8 +4105,8 @@ void blo_do_versions_280(FileData *fd, Library * /*lib*/, Main *bmain)
             View3D *v3d = (View3D *)sl;
             v3d->overlay.edit_flag |= V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS |
                                       V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE |
-                                      V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES |
-                                      V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS;
+                                      V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_CREASES |
+                                      V3D_OVERLAY_EDIT_BWEIGHTS;
           }
         }
       }
diff --git a/source/blender/blenloader/intern/versioning_defaults.cc b/source/blender/blenloader/intern/versioning_defaults.cc
index 8bf2fbe14e1..503eaf16c94 100644
--- a/source/blender/blenloader/intern/versioning_defaults.cc
+++ b/source/blender/blenloader/intern/versioning_defaults.cc
@@ -185,8 +185,8 @@ static void blo_update_defaults_screen(bScreen *screen,
       v3d->overlay.texture_paint_mode_opacity = 1.0f;
       v3d->overlay.weight_paint_mode_opacity = 1.0f;
       v3d->overlay.vertex_paint_mode_opacity = 1.0f;
-      /* Use dimmed selected edges. */
-      v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES;
+      /* Clear this deprecated bit for later reuse. */
+      v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES_DEPRECATED;
       /* grease pencil settings */
       v3d->vertex_opacity = 1.0f;
       v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES;
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc
index 8c1a3e39570..2595371f2d9 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc
@@ -57,7 +57,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
   View3D *v3d = draw_ctx->v3d;
   bool select_vert = pd->edit_mesh.select_vert = (tsettings->selectmode & SCE_SELECT_VERTEX) != 0;
   bool select_face = pd->edit_mesh.select_face = (tsettings->selectmode & SCE_SELECT_FACE) != 0;
-  bool select_edge = pd->edit_mesh.select_edge = (tsettings->selectmode & SCE_SELECT_EDGE) != 0;
+  pd->edit_mesh.select_edge = (tsettings->selectmode & SCE_SELECT_EDGE) != 0;
 
   bool show_face_dots = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_FACE_DOT) != 0 ||
                         pd->edit_mesh.do_zbufclip;
@@ -66,7 +66,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
   float retopology_offset = RETOPOLOGY_OFFSET(v3d);
 
   pd->edit_mesh.do_faces = true;
-  pd->edit_mesh.do_edges = true;
+  pd->edit_mesh.do_edges = (tsettings->selectmode != SCE_SELECT_FACE);
 
   int *mask = shdata->data_mask;
   mask[0] = 0xFF; /* Face Flag */
@@ -85,16 +85,6 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
   if ((flag & V3D_OVERLAY_EDIT_FACES) == 0) {
     pd->edit_mesh.do_faces = false;
   }
-  if ((flag & V3D_OVERLAY_EDIT_EDGES) == 0) {
-    if ((tsettings->selectmode & SCE_SELECT_EDGE) == 0) {
-      if ((v3d->shading.type < OB_SOLID) || (v3d->shading.flag & V3D_SHADING_XRAY)) {
-        /* Special case, when drawing wire, draw edges, see: #67637. */
-      }
-      else {
-        pd->edit_mesh.do_edges = false;
-      }
-    }
-  }
 
   float backwire_opacity = (pd->edit_mesh.do_zbufclip) ? v3d->overlay.backwire_opacity : 1.0f;
   float face_alpha = (!pd->edit_mesh.do_faces) ? 0.0f : 1.0f;
@@ -191,7 +181,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
     DRW_shgroup_uniform_ivec4(grp, "dataMask", mask, 1);
     DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity);
     DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex);
-    DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges || select_edge);
+    DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges);
     DRW_shgroup_uniform_bool_copy(grp, "do_smooth_wire", do_smooth_wire);
     DRW_shgroup_uniform_float_copy(grp, "retopologyOffset", retopology_offset);
 
diff --git a/source/blender/makesdna/DNA_view3d_defaults.h b/source/blender/makesdna/DNA_view3d_defaults.h
index 2a422f5e28e..e9fd2f3ea2b 100644
--- a/source/blender/makesdna/DNA_view3d_defaults.h
+++ b/source/blender/makesdna/DNA_view3d_defaults.h
@@ -56,7 +56,7 @@
  \
     .edit_flag = V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS | \
                              V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE | \
-                             V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES | \
+                             V3D_OVERLAY_EDIT_FREESTYLE_FACE | \
                              V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS, \
     .handle_display = CURVE_HANDLE_SELECTED, \
  \
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index 780faa29908..6b996058e84 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -591,7 +591,8 @@ enum {
 
   V3D_OVERLAY_EDIT_WEIGHT = (1 << 4),
 
-  V3D_OVERLAY_EDIT_EDGES = (1 << 5),
+  V3D_OVERLAY_EDIT_EDGES_DEPRECATED = (1 << 5),
+
   V3D_OVERLAY_EDIT_FACES = (1 << 6),
   V3D_OVERLAY_EDIT_FACE_DOT = (1 << 7),
 
diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc
index b8a5fa33513..2da0f2deddc 100644
--- a/source/blender/makesrna/intern/rna_space.cc
+++ b/source/blender/makesrna/intern/rna_space.cc
@@ -4602,11 +4602,6 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
       prop, "Display Split Normals", "Display vertex-per-face normals as lines");
   RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr);
 
-  prop = RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_EDGES);
-  RNA_def_property_ui_text(prop, "Display Edges", "Highlight selected edges");
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr);
-
   prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_FACES);
   RNA_def_property_ui_text(prop, "Display Faces", "Highlight selected faces");

@Gilberto.R Hey, we talked about this in the UI Module meeting yesterday and it took an interesting turn... We started off by just agreeing that it is better with that option on. But then reasoning that that if it was on by default there isn't a reason to turn it off. So why not just remove the option? If the option is removed we could just, under the hood, act like it is on when in vertex or edge mode, but off if face selection (only). On if you have edge+face, etc. If I am misunderstanding the conversation, best if @pablovazquez weighed in. The discussed solution would be something like the following. Do you see any problems with the idea? ```Diff diff --git a/scripts/startup/bl_ui/space_view3d.py b/scripts/startup/bl_ui/space_view3d.py index 4a389dc291a..2a56d9dffc0 100644 --- a/scripts/startup/bl_ui/space_view3d.py +++ b/scripts/startup/bl_ui/space_view3d.py @@ -6803,8 +6803,6 @@ class VIEW3D_PT_overlay_edit_mesh(Panel): sub = split.column() sub.active = is_any_solid_shading - sub.prop(overlay, "show_edges", text="Edges") - sub = split.column() sub.prop(overlay, "show_faces", text="Faces") sub = split.column() sub.active = is_any_solid_shading diff --git a/source/blender/blenloader/intern/versioning_280.cc b/source/blender/blenloader/intern/versioning_280.cc index 7ff1d692848..1244db462cc 100644 --- a/source/blender/blenloader/intern/versioning_280.cc +++ b/source/blender/blenloader/intern/versioning_280.cc @@ -4105,8 +4105,8 @@ void blo_do_versions_280(FileData *fd, Library * /*lib*/, Main *bmain) View3D *v3d = (View3D *)sl; v3d->overlay.edit_flag |= V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS | V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE | - V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES | - V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS; + V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_CREASES | + V3D_OVERLAY_EDIT_BWEIGHTS; } } } diff --git a/source/blender/blenloader/intern/versioning_defaults.cc b/source/blender/blenloader/intern/versioning_defaults.cc index 8bf2fbe14e1..503eaf16c94 100644 --- a/source/blender/blenloader/intern/versioning_defaults.cc +++ b/source/blender/blenloader/intern/versioning_defaults.cc @@ -185,8 +185,8 @@ static void blo_update_defaults_screen(bScreen *screen, v3d->overlay.texture_paint_mode_opacity = 1.0f; v3d->overlay.weight_paint_mode_opacity = 1.0f; v3d->overlay.vertex_paint_mode_opacity = 1.0f; - /* Use dimmed selected edges. */ - v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES; + /* Clear this deprecated bit for later reuse. */ + v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES_DEPRECATED; /* grease pencil settings */ v3d->vertex_opacity = 1.0f; v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES; diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc index 8c1a3e39570..2595371f2d9 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc +++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc @@ -57,7 +57,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) View3D *v3d = draw_ctx->v3d; bool select_vert = pd->edit_mesh.select_vert = (tsettings->selectmode & SCE_SELECT_VERTEX) != 0; bool select_face = pd->edit_mesh.select_face = (tsettings->selectmode & SCE_SELECT_FACE) != 0; - bool select_edge = pd->edit_mesh.select_edge = (tsettings->selectmode & SCE_SELECT_EDGE) != 0; + pd->edit_mesh.select_edge = (tsettings->selectmode & SCE_SELECT_EDGE) != 0; bool show_face_dots = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_FACE_DOT) != 0 || pd->edit_mesh.do_zbufclip; @@ -66,7 +66,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) float retopology_offset = RETOPOLOGY_OFFSET(v3d); pd->edit_mesh.do_faces = true; - pd->edit_mesh.do_edges = true; + pd->edit_mesh.do_edges = (tsettings->selectmode != SCE_SELECT_FACE); int *mask = shdata->data_mask; mask[0] = 0xFF; /* Face Flag */ @@ -85,16 +85,6 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) if ((flag & V3D_OVERLAY_EDIT_FACES) == 0) { pd->edit_mesh.do_faces = false; } - if ((flag & V3D_OVERLAY_EDIT_EDGES) == 0) { - if ((tsettings->selectmode & SCE_SELECT_EDGE) == 0) { - if ((v3d->shading.type < OB_SOLID) || (v3d->shading.flag & V3D_SHADING_XRAY)) { - /* Special case, when drawing wire, draw edges, see: #67637. */ - } - else { - pd->edit_mesh.do_edges = false; - } - } - } float backwire_opacity = (pd->edit_mesh.do_zbufclip) ? v3d->overlay.backwire_opacity : 1.0f; float face_alpha = (!pd->edit_mesh.do_faces) ? 0.0f : 1.0f; @@ -191,7 +181,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) DRW_shgroup_uniform_ivec4(grp, "dataMask", mask, 1); DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity); DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex); - DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges || select_edge); + DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges); DRW_shgroup_uniform_bool_copy(grp, "do_smooth_wire", do_smooth_wire); DRW_shgroup_uniform_float_copy(grp, "retopologyOffset", retopology_offset); diff --git a/source/blender/makesdna/DNA_view3d_defaults.h b/source/blender/makesdna/DNA_view3d_defaults.h index 2a422f5e28e..e9fd2f3ea2b 100644 --- a/source/blender/makesdna/DNA_view3d_defaults.h +++ b/source/blender/makesdna/DNA_view3d_defaults.h @@ -56,7 +56,7 @@ \ .edit_flag = V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS | \ V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE | \ - V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES | \ + V3D_OVERLAY_EDIT_FREESTYLE_FACE | \ V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS, \ .handle_display = CURVE_HANDLE_SELECTED, \ \ diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 780faa29908..6b996058e84 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -591,7 +591,8 @@ enum { V3D_OVERLAY_EDIT_WEIGHT = (1 << 4), - V3D_OVERLAY_EDIT_EDGES = (1 << 5), + V3D_OVERLAY_EDIT_EDGES_DEPRECATED = (1 << 5), + V3D_OVERLAY_EDIT_FACES = (1 << 6), V3D_OVERLAY_EDIT_FACE_DOT = (1 << 7), diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc index b8a5fa33513..2da0f2deddc 100644 --- a/source/blender/makesrna/intern/rna_space.cc +++ b/source/blender/makesrna/intern/rna_space.cc @@ -4602,11 +4602,6 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop, "Display Split Normals", "Display vertex-per-face normals as lines"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr); - prop = RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_EDGES); - RNA_def_property_ui_text(prop, "Display Edges", "Highlight selected edges"); - RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr); - prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_FACES); RNA_def_property_ui_text(prop, "Display Faces", "Highlight selected faces"); ```
Author
Contributor

@Harley I personally have no issue with removing it.

@Harley I personally have no issue with removing it.
Member

@Harley I personally have no issue with removing it.

Do you mind applying and testing my code changes above to ensure it works as you expect it? I could have made some mistake that turns it off all the time or something else dumb. But if works as advertised you could then update your PR with that.

I can't really take over this PR or submit a superseding version in my name. I just don't do modelling enough and a proposed change like this needs to have proper advocate, like you.

If you would rather not, or if there are any other issues, just let me know and we'll figure something else out.

Otherwise the UI module can then take another look at it on Tuesday. Maybe even give it a go/no-go then

> @Harley I personally have no issue with removing it. Do you mind applying and testing my code changes above to ensure it works as you expect it? I could have made some mistake that turns it off all the time or something else dumb. But if works as advertised you could then update your PR with that. I can't really take over this PR or submit a superseding version in my name. I just don't do modelling enough and a proposed change like this needs to have proper advocate, like you. If you would rather not, or if there are any other issues, just let me know and we'll figure something else out. Otherwise the UI module can then take another look at it on Tuesday. Maybe even give it a go/no-go then
Gilberto Rodrigues changed title from Change Edit Mode Edge Highlight default to 'on' to Remove 'Edge Highlight' overlay toggle 2023-09-01 23:30:04 +02:00
Author
Contributor

I have removed the toggle. Most of the code is by @Harley , with a few changes. It needs to be on for all selection modes, not only 'edge select' and 'vertex select', because it helps to see better the topology on groups of selected faces, and helps to see what edges from selected faces are selected and will be affected by operators like bevel. Visually differentiating the selection modes isn't that important. The selection modes already have no difference in wireframe shading mode and in x-ray mode. Let's just have the selection mode look mostly the same in all shading modes like in 2.79.

I have removed the toggle. Most of the code is by @Harley , with a few changes. It needs to be on for all selection modes, not only 'edge select' and 'vertex select', because it helps to see better the topology on groups of selected faces, and helps to see what edges from selected faces are selected and will be affected by operators like bevel. Visually differentiating the selection modes isn't that important. The selection modes already have no difference in wireframe shading mode and in x-ray mode. Let's just have the selection mode look mostly the same in all shading modes like in 2.79.
First-time contributor

I agree. Even with edges highlighting turned on I can barely recognize the selection even on primitives.

image

If shader has a bit of a glossiness it immediately destroys the readability of the selected topology

image

I agree. Even with edges highlighting turned on I can barely recognize the selection even on primitives. ![image](/attachments/79c55dc1-8638-475a-983c-e8eb5e353b5a) If shader has a bit of a glossiness it immediately destroys the readability of the selected topology ![image](/attachments/ede13284-1bea-49d5-9eff-efdbf81365ba)
Author
Contributor

@1D_Inc So what do you think, would it be better to not use different face alpha depending on selection mode? To me it could also improve selection visibility at the cost of less differentiation of selection modes.

@1D_Inc So what do you think, would it be better to not use different face alpha depending on selection mode? To me it could also improve selection visibility at the cost of less differentiation of selection modes.
First-time contributor

@1D_Inc So what do you think, would it be better to not use different face alpha depending on selection mode? To me it could also improve selection visibility at the cost of less differentiation of selection modes.

The problem is that edge and face modes became completely similar in that case.
Faces selection brightness in faces, edges and vertices could be safely equalized only if those modes are clearly distinguishable.

Facedots makes face mode clearly distinguishable from the other modes, so if facedots are turned on, faces selection brightness could be safely equalized. When facedots are off, faces selection brightness could be confusing because this will make faces and edges modes equal visually, but I would prefer to have such kind of a possibility as an option anyway.
Previously such an option was presented as Texture Solid checkbox in Shading (N-panel) , which visually equalized faces and edges modes, and it was pretty much okay.

> @1D_Inc So what do you think, would it be better to not use different face alpha depending on selection mode? To me it could also improve selection visibility at the cost of less differentiation of selection modes. The problem is that edge and face modes became completely similar in that case. Faces selection brightness in faces, edges and vertices could be safely equalized only if those modes are clearly distinguishable. Facedots makes face mode clearly distinguishable from the other modes, so if facedots are turned on, faces selection brightness could be safely equalized. When facedots are off, faces selection brightness could be confusing because this will make faces and edges modes equal visually, but I would prefer to have such kind of a possibility as an option anyway. Previously such an option was presented as `Texture Solid` checkbox in Shading (N-panel) , which visually equalized faces and edges modes, and it was pretty much okay.
Author
Contributor

@JulienKaspar i think that turning on the facedot doesn't change the selection behavior in solid mode.

@JulienKaspar i think that turning on the facedot doesn't change the selection behavior in solid mode.
Author
Contributor

I've added the edge color hue shift when edge select mode is activated, so now it is better to know the selection mode, and on wireframe mode and xray too, so it is better than the edge highlight toggle in this aspect. I think you will like the result.

I haven't added the hue shift to unselected edges because they are black, but if you want to change unselected edge to light blue I will add it.

I'm thinking of adding a control to the hue shift as a the theme option, depending on the selected wire color the user may want the hue to shift the other direction(Minimal Dark theme), a stronger hue shift (Print Friendly theme), in the 'White' theme the hue shift is looking like the active edge color. The user should also be able to have no hue shift at all because it's not so useful if the person uses facedot or if the user just wants pure wire color/ does not want the color to change depending on selection mode.

Part of the old Edge highlight toggle should be added as a theme option too if the user wants no edge color at all when edge selection is off (specially for the Maya theme) . By the way there are some people using addons that change what the operators affect depending on selection mode, like other software does, so this theme option could be nice for them. Even 2.79 had this option.

I've added the edge color hue shift when edge select mode is activated, so now it is better to know the selection mode, and on wireframe mode and xray too, so it is better than the edge highlight toggle in this aspect. I think you will like the result. I haven't added the hue shift to unselected edges because they are black, but if you want to change unselected edge to light blue I will add it. I'm thinking of adding a control to the hue shift as a the theme option, depending on the selected wire color the user may want the hue to shift the other direction(Minimal Dark theme), a stronger hue shift (Print Friendly theme), in the 'White' theme the hue shift is looking like the active edge color. The user should also be able to have no hue shift at all because it's not so useful if the person uses facedot or if the user just wants pure wire color/ does not want the color to change depending on selection mode. Part of the old Edge highlight toggle should be added as a theme option too if the user wants no edge color at all when edge selection is off (specially for the Maya theme) . By the way there are some people using addons that change what the operators affect depending on selection mode, like other software does, so this theme option could be nice for them. Even 2.79 had this option.
Member

It's starting to come together!

Could you please update it to main? I've just compiled this patch and the Fresnel option is missing.

It's starting to come together! Could you please update it to `main`? I've just compiled this patch and the Fresnel option is missing.
First-time contributor

Having the edges in edge mode mode tinted in a different hue would be a fantastic change! Currently, I sometimes forget which mode I am in between edge and face mode since they look so similar, especially since 2.8 when the face dot was removed by default.

I usually end up clicking the 2 or 3 key multiple times just to make sure I am in the right mode before doing an operation, as it's not always obvious which mode you are currently in, very annoying. It's funny since I was just about to make an add-on that implemented just this kind of change, this patch even has the same color I had in mind! So it's great that it might be implemented as an official change!

Having the edges in edge mode mode tinted in a different hue would be a fantastic change! Currently, I sometimes forget which mode I am in between edge and face mode since they look so similar, especially since 2.8 when the face dot was removed by default. I usually end up clicking the 2 or 3 key multiple times just to make sure I am in the right mode before doing an operation, as it's not always obvious which mode you are currently in, very annoying. It's funny since I was just about to make an add-on that implemented just this kind of change, this patch even has the same color I had in mind! So it's great that it might be implemented as an official change!
Member

This looks great! I also think it's almost there 👍

IMO it's necessary to still find a way to differentiate edge and face selection modes when unselected. At least subtle enough that a bit of visual feedback is noticable when switching the selection modes.
Using face dots is not ideal. It creates a lot of visual noise and it's nice to only use them when Xray is enabled to indicate where to select faces.

Maybe increase the alpha of the "Face" color from the theme preferences when face selection mode is used. Just slightly so that a change is noticable?
From the default on 0.008 to 0.016 or 0.020.

This looks great! I also think it's almost there 👍 IMO it's necessary to still find a way to differentiate edge and face selection modes when unselected. At least subtle enough that a bit of visual feedback is noticable when switching the selection modes. Using face dots is not ideal. It creates a lot of visual noise and it's nice to only use them when Xray is enabled to indicate where to select faces. Maybe increase the alpha of the "Face" color from the theme preferences when face selection mode is used. Just slightly so that a change is noticable? From the default on 0.008 to 0.016 or 0.020.
Author
Contributor

@JulienKaspar The purpose of the "Face" color is to show us filled faces in wireframe shading mode, to make it visually distinct from a mesh with deleted faces, but in solid shading it was not so useful, since the mesh faces are already shaded. I had in mind doing other PR to disable the "Face" theme color when not in wireframe shading, as it can flatten a bit the look of the studiolights, matcaps, etc. But based on your suggestion, it can be useful in solid shading, but be shown only with face selection mode, to better differentiate from the other selection modes. Besides flattening the shading, it could also decrease contrast with the Active Face, so instead of increasing it's Alpha on face select mode, I have decreased the alpha to zero on vertex and edge seletion modes. But in wireframe shading mode it's unchanged, since there is already the facedot to make the visual distinction.

@JulienKaspar The purpose of the "Face" color is to show us filled faces in wireframe shading mode, to make it visually distinct from a mesh with deleted faces, but in solid shading it was not so useful, since the mesh faces are already shaded. I had in mind doing other PR to disable the "Face" theme color when not in wireframe shading, as it can flatten a bit the look of the studiolights, matcaps, etc. But based on your suggestion, it can be useful in solid shading, but be shown only with face selection mode, to better differentiate from the other selection modes. Besides flattening the shading, it could also decrease contrast with the Active Face, so instead of increasing it's Alpha on face select mode, I have decreased the alpha to zero on vertex and edge seletion modes. But in wireframe shading mode it's unchanged, since there is already the facedot to make the visual distinction.
First-time contributor

I've added the edge color hue shift when edge select mode is activated

@Gilberto.R Nice move.
According to types of contrast scale, human eye is more sensible to hue shift, so tiny hue shift will be enough for proper modes distinguishing.
For example, human eye is much less sensitive to saturation shift, so the saturation difference which is minimally required for proper distinguishing has to be strong enough so it ruins readability.
I think that faces alpha equalizing could be safely reached with that solution to make face selection equally bright and perceptable.

image

Using face dots is not ideal. It creates a lot of visual noise and it's nice to only use them when Xray is enabled to indicate where to select faces.

@JulienKaspar Technically, true, they are cluttering.
However, there is an important difference between different systems I want to try to describe.

In non-transferrable systems faces mode is the only mode you can operate with faces, so every mode has its own tools to operate, and therefore, each mode has equal importance.
For example, in the other software you have to be in faces mode in order to be able to extrude faces.

In transferrable systems, operators are accessible in every mode, so you can extrude, delete, inset or do any other faces operations in vertices or edges modes.
Therefore, in transferrable selection system modes has no equal importance - vertices mode is the most commonly used mode, and faces mode is secondary, which is used mostly for making faces selections or checking issues.
For example, unlike in the other software, in Blender it is technically possible to finish pretty complex model without even entering faces mode (for sure it will be less convenient and slower, but in the other systems it is physically impossible).

Different systems assumes different behaviour.
So, for sure, facedots are cluttering, but from our experience in transferrable systems this has much less practical impact.

It is an important system design difference I would like to mention here, at the time it took some time to me to figure it out before I started appreciate Blender's system design solution when I originally switched to Blender from the other software.

> I've added the edge color hue shift when edge select mode is activated @Gilberto.R Nice move. According to types of contrast scale, human eye is more sensible to hue shift, so tiny hue shift will be enough for proper modes distinguishing. For example, human eye is much less sensitive to saturation shift, so the saturation difference which is minimally required for proper distinguishing has to be strong enough so it ruins readability. I think that faces alpha equalizing could be safely reached with that solution to make face selection equally bright and perceptable. ![image](/attachments/11683877-539a-4db9-a755-01fe760ff339) > Using face dots is not ideal. It creates a lot of visual noise and it's nice to only use them when Xray is enabled to indicate where to select faces. @JulienKaspar Technically, true, they are cluttering. However, there is an important difference between different systems I want to try to describe. In non-transferrable systems faces mode is the only mode you can operate with faces, so every mode has its own tools to operate, and therefore, each mode has equal importance. For example, in the other software you have to be in faces mode in order to be able to extrude faces. In transferrable systems, operators are accessible in every mode, so you can extrude, delete, inset or do any other faces operations in vertices or edges modes. Therefore, in transferrable selection system modes has no equal importance - vertices mode is the most commonly used mode, and faces mode is secondary, which is used mostly for making faces selections or checking issues. For example, unlike in the other software, in Blender it is technically possible to finish pretty complex model without even entering faces mode (for sure it will be less convenient and slower, but in the other systems it is physically impossible). Different systems assumes different behaviour. So, for sure, facedots are cluttering, but from our experience in transferrable systems this has much less practical impact. It is an important system design difference I would like to mention here, at the time it took some time to me to figure it out before I started appreciate Blender's system design solution when I originally switched to Blender from the other software.
318 KiB
Author
Contributor

@1D_Inc , I have also removed the selected face alpha difference between modes, before it was half the alpha in vertex and edge select mode, with the edge hue shift I think that this is no longer necessary.

@1D_Inc , I have also removed the selected face alpha difference between modes, before it was half the alpha in vertex and edge select mode, with the edge hue shift I think that this is no longer necessary.
First-time contributor

@Gilberto.R I've tried to imagine a nice reason for keeping it, like it was previously with Fresnel, but didn't succeed.
Probably, the selected face alpha difference between modes indeed worth removing, since hue shift is expected to work better.

@Gilberto.R I've tried to imagine a nice reason for keeping it, like it was previously with Fresnel, but didn't succeed. Probably, the selected face alpha difference between modes indeed worth removing, since hue shift is expected to work better.
Author
Contributor

The edge highlight toggle 'off' used to make the edge gradient on vertex select mode drastically weaker, which could be one of the reasons a few people used to other software may have preferred it, so I have added a user preference in viewport display, to toggle the edge gradient.

The edge highlight toggle 'off' used to make the edge gradient on vertex select mode drastically weaker, which could be one of the reasons a few people used to other software may have preferred it, so I have added a user preference in viewport display, to toggle the edge gradient.
Member

@Gilberto.R Looks pretty good 👍
Would be good to get @pablovazquez and @ideasman42 opinion on this too.

The only reason I can think of to not set the face color to 0.0 alpha in solid shading, is for cases where object/material color is set to 0.0 alpha as well. In that case they are essentially the same as wireframe shading.
But that's a corner case that I think can be accepted.

I do miss the stronger selected face color in face selection mode a bit, but only because it made that selection mode even more distinct. Now it's the only one of the three modes that doesn't have an visual element to make it stand out. But that's only an issue when mixing edge & face selection modes.

The preference to remove the edge gradient is not the right way to go. It has an important use. If it's too strong now I'd rather propose to weaken or shorten the gradient so that the edge doesn't look selected.

@Gilberto.R Looks pretty good 👍 Would be good to get @pablovazquez and @ideasman42 opinion on this too. The only reason I can think of to not set the face color to 0.0 alpha in solid shading, is for cases where object/material color is set to 0.0 alpha as well. In that case they are essentially the same as wireframe shading. But that's a corner case that I think can be accepted. I do miss the stronger selected face color in face selection mode a bit, but only because it made that selection mode even more distinct. Now it's the only one of the three modes that doesn't have an visual element to make it stand out. But that's only an issue when mixing edge & face selection modes. The preference to remove the edge gradient is not the right way to go. It has an important use. If it's too strong now I'd rather propose to weaken or shorten the gradient so that the edge doesn't look selected.
Author
Contributor

@JulienKaspar the option for edge gradient off isn't the default, just a nice to have for people that are used to other software. I still have to do the versioning to turn the gradient on when loading settings from older blender version. I personally will keep it on as the default and never toggle it off, but I've added it because I've seen a big artist ask about it on blender chat #support channel a long time ago, and also seen some artists request this on twitter: https://twitter.com/delaneykingrox/status/1646304370986999809/photo/1 . And recently there was also a RCS feature request https://blender.community/c/rightclickselect/yXY6

@JulienKaspar the option for edge gradient off isn't the default, just a nice to have for people that are used to other software. I still have to do the versioning to turn the gradient on when loading settings from older blender version. I personally will keep it on as the default and never toggle it off, but I've added it because I've seen a big artist ask about it on blender chat #support channel a long time ago, and also seen some artists request this on twitter: https://twitter.com/delaneykingrox/status/1646304370986999809/photo/1 . And recently there was also a RCS feature request https://blender.community/c/rightclickselect/yXY6
Author
Contributor

@JulienKaspar I can try to add hue shift to the face selection color to make it more distinct.

@JulienKaspar I can try to add hue shift to the face selection color to make it more distinct.
Member

@Gilberto.R Just a general advice is that keeping patches focused in smaller changes improves the chances of it getting them in faster. Adding more and more features makes it hard to review.

Regarding the edge gradient, I don't think it's the way to go. It has a purpose. If you still want to propose it I'd recommend making a separate patch, but I personally don't think it's a good idea to introduce even more settings for something so useful.

@Gilberto.R Just a general advice is that keeping patches focused in smaller changes improves the chances of it getting them in faster. Adding more and more features makes it hard to review. Regarding the edge gradient, I don't think it's the way to go. It has [a purpose](https://twitter.com/Socket_775/status/1646609300423430166). If you still want to propose it I'd recommend making a separate patch, but I personally don't think it's a good idea to introduce even more settings for something so useful.
First-time contributor

Regarding the edge gradient, I don't think it's the way to go. It has a purpose.

This is true, mesh selection in Blender is very analytical in many aspects, it allow you to see things that you mostly have to guess during work in the other software. Such kind of a visual clarity is especially helpful during working with dense/heavy/confusing meshes.
Also agree about separate patch.

> Regarding the edge gradient, I don't think it's the way to go. It has a purpose. This is true, mesh selection in Blender is very analytical in many aspects, it allow you to see things that you mostly have to guess during work in the other software. Such kind of a visual clarity is especially helpful during working with dense/heavy/confusing meshes. Also agree about separate patch.
Gilberto Rodrigues force-pushed temp-edgehighlight from 4acc283b86 to 87caeaf4fc 2023-09-07 09:02:35 +02:00 Compare
Author
Contributor

Ok, I have removed the option to turn off the edge gradient toggle, which increases the chance of people that prefferred the edge highlight toggle 'off' be mad with the removal of the edge highlight overlay toggle.

Ok, I have removed the option to turn off the edge gradient toggle, which increases the chance of people that prefferred the edge highlight toggle 'off' be mad with the removal of the edge highlight overlay toggle.
Author
Contributor

Come to think of it, the hue shift may not be as helpful for colorblind ppl.

Come to think of it, the hue shift may not be as helpful for colorblind ppl.
Member

Come to think of it, the hue shift may not be as helpful for colorblind ppl.

In that case we can expose the colors in the theme preferences so the hue shift can be made more extreme. Offering a color blind theme would be a nice long term goal witha separate task maybe?

> Come to think of it, the hue shift may not be as helpful for colorblind ppl. In that case we can expose the colors in the theme preferences so the hue shift can be made more extreme. Offering a color blind theme would be a nice long term goal witha separate task maybe?
Member

Come to think of it, the hue shift may not be as helpful for colorblind ppl.

Depends on the hue shift. This is the list of combinations we are usually concerned with: https://en.wikipedia.org/wiki/Color_blindness#Confusion_colors

> Come to think of it, the hue shift may not be as helpful for colorblind ppl. Depends on the hue shift. This is the list of combinations we are usually concerned with: https://en.wikipedia.org/wiki/Color_blindness#Confusion_colors
Author
Contributor

@JulienKaspar I've added hue shift to face select too.

@JulienKaspar I've added hue shift to face select too.
Author
Contributor

Can I add the option to turn off hue shift, please? It's not so useful for who use facedot.

Can I add the option to turn off hue shift, please? It's not so useful for who use facedot.
Author
Contributor

The selected face alpha in some themes is way too high IMO and will have to be tweaked, because it's no longer using half the face alpha.

The selected face alpha in some themes is way too high IMO and will have to be tweaked, because it's no longer using half the face alpha.
First-time contributor

Can I add the option to turn off hue shift, please? It's not so useful for who use facedot.

This is true, facedots distinguish face mode very well, so in case when facedots are used additional hue shift solution will be excessive.

> Can I add the option to turn off hue shift, please? It's not so useful for who use facedot. This is true, facedots distinguish face mode very well, so in case when facedots are used additional hue shift solution will be excessive.
Member

Can I add the option to turn off hue shift, please? It's not so useful for who use facedot.

In that case it's ideal to add theme preferences for the colors of active & inactive selection modes. Then the color can be differentiated more or made the same.

> Can I add the option to turn off hue shift, please? It's not so useful for who use facedot. In that case it's ideal to add theme preferences for the colors of active & inactive selection modes. Then the color can be differentiated more or made the same.
First-time contributor

for who use facedot.

@Gilberto.R @pablovazquez @JulienKaspar

I think it is necessary to determine the use cases of a facedot in solid mode at this point, because the cases when they are used are determined by cases when they are needed, which has certain conditions to satisfy.

Facedots is a mesh issues detecting tool, they are used depending on working conditions - how much you can trust mesh structure you work with.

  • Facedots in solid mode using can be avoided in cases when you can trust mesh structure a lot, it is about creating model from scratch with topologically stable methods, for example, by box modeling (aka vanilla data, creative workflows)

  • Facedots in solid mode using is beneficial in cases when you can't trust any aspect of a mesh structure you work with (imported data, editing workflows - finishing or supervising models made by someone farther the pipeline, mesh debugging, optimizations, stock models cleanup or extensive using topologically aggressive tools and methods like knife project, self-intersect, autoweld or booleans during vanilla modeling)

Since facedots using assumes pretty tough topology conditions, hue shift solution could be distracting for that cases while being unnecessary, so indeed it better be optional and customizable.

> for who use facedot. @Gilberto.R @pablovazquez @JulienKaspar I think it is necessary to determine the use cases of a facedot in solid mode at this point, because the cases when they are used are determined by cases when they are needed, which has certain conditions to satisfy. Facedots is a mesh issues detecting tool, they are used depending on working conditions - how much you can trust mesh structure you work with. - Facedots in solid mode using can be avoided in cases when you can trust mesh structure a lot, it is about creating model from scratch with topologically stable methods, for example, by box modeling (aka vanilla data, creative workflows) - Facedots in solid mode using is beneficial in cases when you can't trust any aspect of a mesh structure you work with (imported data, editing workflows - finishing or supervising models made by someone farther the pipeline, mesh debugging, optimizations, stock models cleanup or extensive using topologically aggressive tools and methods like knife project, self-intersect, autoweld or booleans during vanilla modeling) Since facedots using assumes pretty tough topology conditions, hue shift solution could be distracting for that cases while being unnecessary, so indeed it better be optional and customizable.
Author
Contributor

@JulienKaspar great idea, so each theme can have it's custom hue shift, facedot users can set the colors to look equal(no hue shift), colorblind ppl can set a stronger hue shift if needed or change it to look like before(darker edge selection color in non edge mode), and users can even make the the edge color totally black when not in edge select mode(for people used to other software). Also It's no longer needed to calculate the hue shift because it's just getting the hue shifted color from the theme.

@JulienKaspar great idea, so each theme can have it's custom hue shift, facedot users can set the colors to look equal(no hue shift), colorblind ppl can set a stronger hue shift if needed or change it to look like before(darker edge selection color in non edge mode), and users can even make the the edge color totally black when not in edge select mode(for people used to other software). Also It's no longer needed to calculate the hue shift because it's just getting the hue shifted color from the theme.
Author
Contributor

I think that this is mostly done. The edge toggle is removed, visibility is good, there is mode differentiation, I just need to update the non default theme presets... which I don't know how to do because git ignores the theme presets .xml files. How should I proceed?

I think that this is mostly done. The edge toggle is removed, visibility is good, there is mode differentiation, I just need to update the non default theme presets... which I don't know how to do because git ignores the theme presets .xml files. How should I proceed?
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR111431) when ready.
Harley Acheson changed title from Remove 'Edge Highlight' overlay toggle to UI: Improve Mesh Edge Highlighting 2023-09-14 22:23:52 +02:00
First-time contributor

there is mode differentiation

I am curious how it is designed)
Is it a two edges colors in theme setup with a checkbox that forces using the second edges color in edge mode?

> there is mode differentiation I am curious how it is designed) Is it a two edges colors in theme setup with a checkbox that forces using the second edges color in edge mode?
Author
Contributor

Hi @1D_Inc , you can download to test it from the Blender Bot comment right above your. There is no need for a checkbox because if the user wants there to be only one color like in 2.79, the user can just set both edge theme colors to the same color value.

Hi @1D_Inc , you can download to test it from the Blender Bot comment right above your. There is no need for a checkbox because if the user wants there to be only one color like in 2.79, the user can just set both edge theme colors to the same color value.
First-time contributor

@Gilberto.R technically, true, but only if facedots are not supposed to be switched often. A nice step anyway.
Sorry, can't download the build, it is not available for any OS (I use win and lin)
изображение

@Gilberto.R technically, true, but only if facedots are not supposed to be switched often. A nice step anyway. Sorry, can't download the build, it is not available for any OS (I use win and lin) ![изображение](/attachments/f5f2bc19-b526-4a01-8bdd-c37bb99b5b98)
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR111431) when ready.
First-time contributor

@Gilberto.R
Yes, it is compiled for mac and linux, so I tested the linux version.
And it looks very promising!
I need to test it for a while, in order to avoid a placebo effect.
I like the flexibility of a customization, now it is clear that it was definitely incomplete.

However, I found the reason to keep edge checkbox, and yes - alongside with fresnel effect it is also about dense meshes.
I made a comparison, so you can see how dense parts became more readable with Edge checkbox turned off:

изображение

I assume that the main design mistake was made by enabling by default and even locking/hardcoding options that are beneficial exclusively for dense meshes (fresnel effect, faces alpha submodes differentiation, thin edges checkbox, even facedots), which are incompatible with the editing of low and medium polygonal meshes, which represents the majority of usecases, because such an options provide worse readability conditions in that cases.
For example, we face ultradense meshes editing mostly at historical reconstruction projects, because of a photoscans and satellite photogrammetery, and even in our studio the number of a ultradense mesh editing usecases doesnot exceed 10%, most of the time we live in low and midpoly production area.

изображение

So I would recommend to keep the removed edges option, but turn it on by default to satisfy the majority of a usecases.

@Gilberto.R Yes, it is compiled for mac and linux, so I tested the linux version. And it looks very promising! I need to test it for a while, in order to avoid a placebo effect. I like the flexibility of a customization, now it is clear that it was definitely incomplete. However, I found the reason to keep edge checkbox, and yes - alongside with fresnel effect it is also about dense meshes. I made a comparison, so you can see how dense parts became more readable with Edge checkbox turned off: ![изображение](/attachments/268e0711-0f13-4ba4-b09f-f58065a84732) I assume that the main design mistake was made by enabling by default and even locking/hardcoding options that are beneficial exclusively for dense meshes (fresnel effect, faces alpha submodes differentiation, thin edges checkbox, even facedots), which are incompatible with the editing of low and medium polygonal meshes, which represents the majority of usecases, because such an options provide worse readability conditions in that cases. For example, we face ultradense meshes editing mostly at historical reconstruction projects, because of a photoscans and satellite photogrammetery, and even in our studio the number of a ultradense mesh editing usecases doesnot exceed 10%, most of the time we live in low and midpoly production area. ![изображение](/attachments/ba25e363-e090-40d2-9f7e-7a7794d720a2) So I would recommend to keep the removed edges option, but turn it on by default to satisfy the majority of a usecases.
Member

IMO the patch is almost there! Just a couple of notes:

1. When building and using this PR, existing themes break. Edges have no selection color. This should be fixed.

2. The yellow color for selected edges is too far removed from the established color palette.

We need to check with the existing themes which color fits best for each. For most default themes I recommend to match these Hue values for edge/face selection theme colors:

  • "Active Object" = Selected Variant
  • "Vertex Select" = Selected.

Then the hue difference is subtle enough to be noticable but not breaking the look of the themes.
If this should be improved further (espeically for color blindness) I highly suggest to do this after this PR is merged.

3. Instead of calling the new theme color items "Variant", let's make the naming more explicit.

I'd suggest this naming for edge/face selection theme colors:

  • "Selected Variant" should be "Selected Direct"
  • "Selected" should be "Selected Indirect"

@1D_Inc I don't think there's much benefit of keeping the Edge option around for even thinner edge drawing. But if yes, then I'd suggest to keep this in the preferences. Ideally by offering an even thinner px value for "Edge Width" slider.

The Fresnel and edge width isn't something users would switch often. I think this depends on each persons prefered workflows. If someone would like to prioritise optimal low,high or mixed density visualization, it's can be tweaked in the preferences.

IMO the patch is almost there! Just a couple of notes: **1. When building and using this PR, existing themes break. Edges have no selection color. This should be fixed.** **2. The yellow color for selected edges is too far removed from the established color palette.** We need to check with the existing themes which color fits best for each. For most default themes I recommend to match these Hue values for edge/face selection theme colors: - "Active Object" = Selected Variant - "Vertex Select" = Selected. Then the hue difference is subtle enough to be noticable but not breaking the look of the themes. If this should be improved further (espeically for color blindness) I highly suggest to do this after this PR is merged. **3. Instead of calling the new theme color items "Variant", let's make the naming more explicit.** I'd suggest this naming for edge/face selection theme colors: - "Selected Variant" should be **"Selected Direct"** - "Selected" should be **"Selected Indirect"** --- @1D_Inc I don't think there's much benefit of keeping the Edge option around for even thinner edge drawing. But if yes, then I'd suggest to keep this in the preferences. Ideally by offering an even thinner px value for "Edge Width" slider. The Fresnel and edge width isn't something users would switch often. I think this depends on each persons prefered workflows. If someone would like to prioritise optimal low,high or mixed density visualization, it's can be tweaked in the preferences.
First-time contributor

@JulienKaspar

I don't think there's much benefit of keeping the Edge option around for even thinner edge drawing.

I actually asked for thinner edges since probably 2012.
But only as an option, I didnt thought that it would be set by default for everyone at some point.

Also not sure why it should go to the preferences - it was pretty fine to have it in overlays, the only problem was that it was turned off by default, which stands for compatibility with ultradense meshes display, instead of being turned on for compatibility with low/midpoly.

For example, while working with dense meshes selection you are not interested in the distinguishing of its exact topology since you work mostly with the "selection spot", while in low/midpoly the ability to detect the exact topology of a selection is pretty much essential, so different overlay solutions satisfy different working condition demands.
The same is true for facedots - they are much more beneficial for low/mid rather than ultradense, and they are also located in the overlays.

Preferences is a nice place for storing things you will not touch in a year.
And we switch between editing low/medium and ultradense meshes a lot more often than that.

@JulienKaspar > I don't think there's much benefit of keeping the Edge option around for even thinner edge drawing. I actually asked for thinner edges since probably[ 2012](https://blenderartists.org/t/viewport-fx/540664/194?u=1d_inc). But only as an option, I didnt thought that it would be set by default for everyone at some point. Also not sure why it should go to the preferences - it was pretty fine to have it in overlays, the only problem was that it was turned off by default, which stands for compatibility with ultradense meshes display, instead of being turned on for compatibility with low/midpoly. For example, while working with dense meshes selection you are not interested in the distinguishing of its exact topology since you work mostly with the "selection spot", while in low/midpoly the ability to detect the exact topology of a selection is pretty much essential, so different overlay solutions satisfy different working condition demands. The same is true for facedots - they are much more beneficial for low/mid rather than ultradense, and they are also located in the overlays. Preferences is a nice place for storing things you will not touch in a year. And we switch between editing low/medium and ultradense meshes a lot more often than that.
Author
Contributor

@1D_Inc What you perceive as thiner edge in practice is just a lower opacity, because the pixel can only be so small. The old edge highlight toggle halfed the edge transparency depending on selection mode, which gave that impression of thinner edge. It really makes seeing dense geometry much better, so for working with dense meshes I thought of adding an edit mode vertex+edge opacity slider in the overlays panel, which would not be selection mode dependant, and could give the user more control of this effect to be weaker or stronger, as it's ideal value depends on the mesh density and zoom level, and it would also work with wireframe and xray shading. Even the UV editor has a similar slider. but that would probably be only accepted after the splitting of the edit mode overlay panel from the overlay panel, as right now that panel is way too cluttered.

@1D_Inc What you perceive as thiner edge in practice is just a lower opacity, because the pixel can only be so small. The old edge highlight toggle halfed the edge transparency depending on selection mode, which gave that impression of thinner edge. It really makes seeing dense geometry much better, so for working with dense meshes I thought of adding an edit mode vertex+edge opacity slider in the overlays panel, which would not be selection mode dependant, and could give the user more control of this effect to be weaker or stronger, as it's ideal value depends on the mesh density and zoom level, and it would also work with wireframe and xray shading. Even the UV editor has a similar slider. but that would probably be only accepted after the splitting of the edit mode overlay panel from the overlay panel, as right now that panel is way too cluttered.
First-time contributor

@Gilberto.R that sounds reasonable!
Object mode already has wireframe opacity slider, having editmode slider could be beneficial as well.

@Gilberto.R that sounds reasonable! Object mode already has wireframe opacity slider, having editmode slider could be beneficial as well.
Member

@Gilberto.R @1D_Inc The edge opacity could be an overlay slider or part of the theme preferences. Either way this should be discussed again later. Not really important for this PR anymore then.

@Gilberto.R @1D_Inc The edge opacity could be an overlay slider or part of the theme preferences. Either way this should be discussed again later. Not really important for this PR anymore then.
Author
Contributor

@JulienKaspar I'm not sure on the naming. 'Selected Direct' to me sounds like it was selected directly but then you change the mode and it apparently wasn't? What does it mean? Also changing the name of the previously existing theme color would make it a new entry on the theme files, and existing users themes would have a "reset" on that color, so it's better to just keep it as it was, but if needed it could be changed only in the UI.

It turns out that the theme presets are in the addons repository so I can't update them from this pull request, I will have to make separate PR on the addon repository.

@JulienKaspar I'm not sure on the naming. 'Selected Direct' to me sounds like it was selected directly but then you change the mode and it apparently wasn't? What does it mean? Also changing the name of the previously existing theme color would make it a new entry on the theme files, and existing users themes would have a "reset" on that color, so it's better to just keep it as it was, but if needed it could be changed only in the UI. It turns out that the theme presets are in the addons repository so I can't update them from this pull request, I will have to make separate PR on the addon repository.
Member

@JulienKaspar I'm not sure on the naming. 'Selected Direct'

This idea is coming from indirect vs direct linking. If you link a collection/asset from another file it will be directly linked. But that linked collection/asset might also have their own links to other files. Those indirect links are added automatically and will also disappear if the direct link is removed.

Same with the selection. You are directly selecting vertices if in vertex select mode and any fully enclosed edges/faces are indirectly selected as a result.

Instead of changing the existing theme colors, the "Selected Variant" could just be renamed to "Selected Direct".
Do you have another suggestion?

Otherwise I think the PR is good to go imo. I'll check it out again asap to leave a review.

> @JulienKaspar I'm not sure on the naming. 'Selected Direct' This idea is coming from indirect vs direct linking. If you link a collection/asset from another file it will be directly linked. But that linked collection/asset might also have their own links to other files. Those indirect links are added automatically and will also disappear if the direct link is removed. Same with the selection. You are directly selecting vertices if in vertex select mode and any fully enclosed edges/faces are indirectly selected as a result. Instead of changing the existing theme colors, the "Selected Variant" could just be renamed to "Selected Direct". Do you have another suggestion? Otherwise I think the PR is good to go imo. I'll check it out again asap to leave a review.
First-time contributor

Indeed "direct" term has too many meanings, which makes it vague, while the semantics is closer to "coincident" or "matching".

How about "edge selected" for indirect and "edge select mode" for direct, to depict that this color is related to edges selecting in their own mode?

Also nice to know linked collections going to be differentiated, there are indeed too many different linkings that share the same term.

I would also like to see active face setup separate from active vertex and edge.
The problem is that vertex and edge has tiny geometry, which require contrast white color to be distinguished, but for the active face, which covers area, the color is too bright, so it covers the shading and makes lots of distraction while being unnecessary most of the time.

Indeed "direct" term has too many meanings, which makes it vague, while the semantics is closer to "coincident" or "matching". How about "edge selected" for indirect and "edge select mode" for direct, to depict that this color is related to edges selecting in their own mode? Also nice to know linked collections going to be differentiated, there are indeed too many different linkings that share the same term. I would also like to see active face setup separate from active vertex and edge. The problem is that vertex and edge has tiny geometry, which require contrast white color to be distinguished, but for the active face, which covers area, the color is too bright, so it covers the shading and makes lots of distraction while being unnecessary most of the time.
Author
Contributor

@1D_Inc , I agree that "Direct" is vague, but "edge select mode" is incomplete, because it doesn't mean that it's the color of the selection, only of the mode. What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ? I think that would convey the full meaning. I preffer the noun form instead of the verb "Selected", the noun also means "the state of being selected" or "a collection of selected things" https://www.merriam-webster.com/dictionary/selection

I can make the Active Face color separate from the vertex/edge Active color but that will be in another PR.

@1D_Inc , I agree that "Direct" is vague, but "edge select mode" is incomplete, because it doesn't mean that it's the color of the selection, only of the mode. What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ? I think that would convey the full meaning. I preffer the noun form instead of the verb "Selected", the noun also means "the state of being selected" or "a collection of selected things" https://www.merriam-webster.com/dictionary/selection I can make the Active Face color separate from the vertex/edge Active color but that will be in another PR.
First-time contributor

What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ?

Yes, I meant something like that, language barrier sometimes disallow me to suggest precise definitions =)
Your wording looks better than mine, it is interesting what developers think of it.

that will be in another PR.

Sure. Sorry for making proposals in PR.
(I don't know how to avoid scattering - it is always difficult to split discussions of a problems of readability/contrast kind into small separated fractions precisely, since most of them are somehow interconnected and form a workflow-dependent balance)

> What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ? Yes, I meant something like that, language barrier sometimes disallow me to suggest precise definitions =) Your wording looks better than mine, it is interesting what developers think of it. > that will be in another PR. Sure. Sorry for making proposals in PR. (I don't know how to avoid scattering - it is always difficult to split discussions of a problems of readability/contrast kind into small separated fractions precisely, since most of them are somehow interconnected and form a workflow-dependent balance)
Member

What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ?

That sounds good 👍
Let's update the naming and get this approved before Bcon3 on the 27th so it can get into 4.0.

> What about "Edge Selection" and "Edge Mode Selection", "Face Selection" and "Face Mode Selection" ? That sounds good 👍 Let's update the naming and get this approved before Bcon3 on the 27th so it can get into 4.0.
Member

@Gilberto.R

Since this looks to be close, can you update the main description area to include a comparison image or two? Mostly something that shows off what this does in general. Imagine giving Pablo something to point at during "Blender Today".

@Gilberto.R Since this looks to be close, can you update the main description area to include a comparison image or two? Mostly something that shows off what this does in general. Imagine giving Pablo something to point at during "Blender Today".
Pablo Vazquez added the
Module
User Interface
Interest
Modeling
labels 2023-09-23 12:35:34 +02:00
Author
Contributor

I think it's done,. the rest of the theme presets are on a PR submited to the addons repository, blender/blender-addons#104912

I think it's done,. the rest of the theme presets are on a PR submited to the addons repository, https://projects.blender.org/blender/blender-addons/pulls/104912
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR111431) when ready.
Gilberto Rodrigues force-pushed temp-edgehighlight from 234b001eb3 to 163705010f 2023-09-25 09:49:50 +02:00 Compare
First-time contributor

I tested the latest build (win version has been updated) and found it pretty solid.
I am not sure about brown-reddish tones in vertices mode by default, since I find them hard to detect (on my screen it looks more terrakotta rather than sepia), but the provided customization level is flexible enough to allow to achieve the desired edges contrast result.
I like the resulted solution.

COMPS

I tested the latest build (win version has been updated) and found it pretty solid. I am not sure about brown-reddish tones in vertices mode by default, since I find them [hard to detect](https://www.youtube.com/watch?v=wh4aWZRtTwU) (on my screen it looks more terrakotta rather than sepia), but the provided customization level is flexible enough to allow to achieve the desired edges contrast result. I like the resulted solution. ![COMPS](/attachments/a27b8292-3554-4677-8f88-b5d671a50071)
220 KiB
Author
Contributor

@1D_Inc , it looks orange on my screen.
Glad you liked it!

@1D_Inc , it looks orange on my screen. Glad you liked it!
Julien Kaspar approved these changes 2023-09-26 10:40:27 +02:00

Checking the patch, I can't tell the difference between edge & face select, the difference seems far too subtle and less obvious than the current change in opacity.
Even with the hue shift, there may be materials impacting color too so I don't think a small hue shift is enough to make this clear.

Perhaps we can make faces less opaque in edge select mode, as the hue shift isn't so obvious at a glance.

Checking the patch, I can't tell the difference between edge & face select, the difference seems far too subtle and less obvious than the current change in opacity. Even with the hue shift, there may be materials impacting color too so I don't think a small hue shift is enough to make this clear. Perhaps we can make faces less opaque in edge select mode, as the hue shift isn't so obvious at a glance.
Campbell Barton requested changes 2023-09-26 15:06:44 +02:00
Campbell Barton left a comment
Owner

Theme colors need to be versioned (loading existing preferences causes edge-selection to be black), and this patch conflicts with main.

Theme colors need to be versioned (loading existing preferences causes edge-selection to be black), and this patch conflicts with `main`.
Gilberto Rodrigues added 1 commit 2023-09-26 20:00:41 +02:00
Author
Contributor

@ideasman42 the hue shift was stronger but Julien asked me to make it weaker. I agreed with him. I think it's not so subtle. Edit: Actually, I don't want to hardcode the lower edge mode face alpha, because it will make materials impact selection color even more, and also because the user may want the same face color/alpha in both edge and face mode, as we can see in @1D_Inc example, it's not a problem because he uses facedot. But the facedot by default idea was rejected, so I what I can do is make is the edge hue shift stronger again.

@ideasman42 the hue shift was stronger but Julien asked me to make it weaker. I agreed with him. I think it's not so subtle. Edit: Actually, I don't want to hardcode the lower edge mode face alpha, because it will make materials impact selection color even more, and also because the user may want the same face color/alpha in both edge and face mode, as we can see in @1D_Inc example, it's not a problem because he uses facedot. But the facedot by default idea was rejected, so I what I can do is make is the edge hue shift stronger again.
Gilberto Rodrigues added 2 commits 2023-09-27 02:10:41 +02:00
Author
Contributor

@ideasman42 , I think the merge conflict and versioning are fixed. I have now changed the colors slightly for the edge mode to be a bit more different from face mode, also changed the face selection color to be less red as asked by @1D_Inc . I could make the two modes look even more different, but there is always a tradeoff, and we have to balance selection visibility, theme cohesion and selection mode distinction. To me, visually telling apart the selection mode is the least important of these factors. With the new theme options the user is free to make it more different if he needs. It will depend on the person's eyesight, monitor and preference.

@ideasman42 , I think the merge conflict and versioning are fixed. I have now changed the colors slightly for the edge mode to be a bit more different from face mode, also changed the face selection color to be less red as asked by @1D_Inc . I could make the two modes look even more different, but there is always a tradeoff, and we have to balance selection visibility, theme cohesion and selection mode distinction. To me, visually telling apart the selection mode is the least important of these factors. With the new theme options the user is free to make it more different if he needs. It will depend on the person's eyesight, monitor and preference.
Gilberto Rodrigues added 1 commit 2023-09-27 03:50:24 +02:00
Gilberto Rodrigues requested review from Campbell Barton 2023-09-27 03:58:52 +02:00
Gilberto Rodrigues added 1 commit 2023-09-27 05:10:34 +02:00
Campbell Barton requested changes 2023-09-27 12:53:03 +02:00
@ -287,3 +287,3 @@
unsigned char vertex[4], vertex_select[4], vertex_active[4], vertex_bevel[4],
vertex_unreferenced[4];
unsigned char edge[4], edge_select[4];
unsigned char edge[4], edge_selection[4], edge_mode_selection[4];

Renaming looses the theme color from existing preferences, prefer keeping edge_select, edge_mode_select... etc.

Renaming looses the theme color from existing preferences, prefer keeping `edge_select`, `edge_mode_select`... etc.
Gilberto.R marked this conversation as resolved
Author
Contributor

@ideasman42 at first I was keeping it as 'edge_select' and 'face_select', but then when bringing the settings from 3.6 to 4.0 it would not get the updated 'edge_select' and "face_select" colors, only the new 'edge_mode_selection' and 'face_mode_selection' colors. So if the users had the blender dark or blender light themes in 3.6, they would get a theme very different from the new default when loading those settings to 4.0. And if the user had a very different theme he would get mismatching colors, for example, if he had the "Minimal Dark" theme preset on 3.6, when loading settings to 4.0 he would get blue "edge_select" and orange "edge_mode_selection", blue "face_select" and orange "face_mode_selection". So how it is now it is better for who has the dark/light themes and less disrupting for who has a very different theme, and they can be invited to edit their theme again with the new settings.

@ideasman42 at first I was keeping it as 'edge_select' and 'face_select', but then when bringing the settings from 3.6 to 4.0 it would not get the updated 'edge_select' and "face_select" colors, only the new 'edge_mode_selection' and 'face_mode_selection' colors. So if the users had the blender dark or blender light themes in 3.6, they would get a theme very different from the new default when loading those settings to 4.0. And if the user had a very different theme he would get mismatching colors, for example, if he had the "Minimal Dark" theme preset on 3.6, when loading settings to 4.0 he would get blue "edge_select" and orange "edge_mode_selection", blue "face_select" and orange "face_mode_selection". So how it is now it is better for who has the dark/light themes and less disrupting for who has a very different theme, and they can be invited to edit their theme again with the new settings.
First-time contributor

also changed the face selection color to be less red as asked by @1D_Inc

Red (grapefruit) orange color has less energy than orange orange, for example, I've been struggling with detecting the selection in that color for a long time. Lemon orange has more brightness energy, but it starts conflicts with white face/backround color.
However, I can agree that red makes hue shift effect stronger.

the hue shift was stronger but Julien asked me to make it weaker.

When I tried that build I also felt that hue shift is too strong and style conflicting, but didnt succeed to provide an exact default value for it, since the change was supposed to be subtle. Then I tried the next build and liked both the style and hue shift value readability even without facedots.

I think it better be left as is - at lower value - to maintain style integrity, or not be pushed too hard.
The goal is to depict the idea of a provided customization abilities, so if someone will face the necessity to make the submodes difference harder they can do it manually, according to their monitor calibration/settings and color perception abilities.

I think that hue shift works better than faces alpha at the concept level - in faces alpha you can tell the difference only when you switch the mode, without switching you cant really tell if you see faces better or is it just shading of your model from a different angle makes them brighter or weaker (aw, I cant detect the face selection to operate with it properly, or to define if the selection is complete so probably I am in edge mode), so you have to constantly switch between submodes in order to figure that out.
Hue shift tells the difference directly without such kind of switching.

> also changed the face selection color to be less red as asked by @1D_Inc Red (grapefruit) orange color has less energy than orange orange, for example, I've been struggling with detecting the selection in that color for a long time. Lemon orange has more brightness energy, but it starts conflicts with white face/backround color. However, I can agree that red makes hue shift effect stronger. > the hue shift was stronger but Julien asked me to make it weaker. When I tried that build I also felt that hue shift is too strong and style conflicting, but didnt succeed to provide an exact default value for it, since the change was supposed to be subtle. Then I tried the next build and liked both the style and hue shift value readability even without facedots. I think it better be left as is - at lower value - to maintain style integrity, or not be pushed too hard. The goal is to depict the idea of a provided customization abilities, so if someone will face the necessity to make the submodes difference harder they can do it manually, according to their monitor calibration/settings and color perception abilities. I think that hue shift works better than faces alpha at the concept level - in faces alpha you can tell the difference only when you switch the mode, without switching you cant really tell if you see faces better or is it just shading of your model from a different angle makes them brighter or weaker (aw, I cant detect the face selection to operate with it properly, or to define if the selection is complete so probably I am in edge mode), so you have to constantly switch between submodes in order to figure that out. Hue shift tells the difference directly without such kind of switching.
First-time contributor

Here is the comparison I made to make sure we discuss the same thing.

Here is the comparison I made to make sure we discuss the same thing.
Author
Contributor

@ideasman42 how should we proceed?

@ideasman42 how should we proceed?
Member

If this is good to go on a technical implementation maybe we should merge it.
@pablovazquez wanted to have a look at the selection theme colors again for 4.1 anyway, so we can have the discussion on changing/tweaking the colors afterwards?

If this is good to go on a technical implementation maybe we should merge it. @pablovazquez wanted to have a look at the selection theme colors again for 4.1 anyway, so we can have the discussion on changing/tweaking the colors afterwards?
Campbell Barton reviewed 2023-10-10 11:29:39 +02:00
@ -318,3 +318,3 @@
.vertex_bevel = RGBA(0x00a5ffff),
.edge = RGBA(0x000000ff),
.edge_select = RGBA(0xffa000ff),
.edge_selection = RGBA(0xff9900ff),

Please don't rename these struct members, there doesn't seem any benefit in doing this and adds noise to the diff.

Please don't rename these struct members, there doesn't seem any benefit in doing this and adds noise to the diff.

Other renames remaining, TH_FACE_SELECTION... colorEdgeSelect

Other renames remaining, `TH_FACE_SELECTION`... colorEdgeSelect
Gilberto.R marked this conversation as resolved
Campbell Barton reviewed 2023-10-10 11:29:40 +02:00
Gilberto Rodrigues added 1 commit 2023-10-12 22:54:46 +02:00
Gilberto Rodrigues added 1 commit 2023-10-14 14:53:55 +02:00
Gilberto Rodrigues added 1 commit 2023-10-14 15:17:43 +02:00
Gilberto Rodrigues requested review from Campbell Barton 2023-10-18 00:50:19 +02:00
Campbell Barton requested changes 2023-10-18 06:20:13 +02:00
Campbell Barton left a comment
Owner

There are still some inconsistencies and renaming that doesn't seem to serve any purpose.

There are still some inconsistencies and renaming that doesn't seem to serve any purpose.
@ -326,2 +327,3 @@
.face = RGBA(0xffffff02),
.face_select = RGBA(0xffa5522e),
.face_select = RGBA(0xffa30033),
.face_mode_selection = RGBA(0xffb70033),

Please use term select, matching other names, e.g. ( face_mode_select), same with other uses in this patch.

Please use term `select`, matching other names, e.g. ( `face_mode_select`), same with other uses in this patch.
Gilberto.R marked this conversation as resolved
@ -192,3 +185,3 @@
DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity);
DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex);
DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges || select_edge);
DRW_shgroup_uniform_bool_copy(grp, "selectEdge", select_edge);

Is this rename intentional?

Is this rename intentional?
Author
Contributor

yes, I renamed 'selectEdges' to 'selectEdge', to match 'select_edge' there on the same line, and renamed 'selectFaces' to 'selectFace' to match 'select_face'.

yes, I renamed 'selectEdges' to 'selectEdge', to match 'select_edge' there on the same line, and renamed 'selectFaces' to 'selectFace' to match 'select_face'.
Gilberto.R marked this conversation as resolved
Gilberto Rodrigues added 1 commit 2023-10-19 06:15:58 +02:00
Gilberto Rodrigues requested review from Campbell Barton 2023-10-19 06:38:35 +02:00
Author
Contributor
@ideasman42 poke
First-time contributor

I like this update. Makes edit mode more crisp, and bring back full contrast!
What happened with it? Looks frozen.
Poke!

I like this update. Makes edit mode more crisp, and bring back full contrast! What happened with it? Looks frozen. Poke!
Gilberto Rodrigues added 1 commit 2023-11-02 07:32:05 +01:00
Gilberto Rodrigues added 1 commit 2023-11-02 07:50:07 +01:00
Campbell Barton manually merged commit dfd1b63cc7 into main 2023-11-02 12:10:12 +01:00
Gilberto Rodrigues deleted branch temp-edgehighlight 2023-11-03 02:23:28 +01:00
First-time contributor

Yes, there is indeed a huge problem. Thank you for solving this huge problem.

Yes, there is indeed a huge problem. Thank you for solving this huge problem.
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
11 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#111431
No description provided.