Regression: Smooth operators destroy manual sharp seams. #114244

Closed
opened 2023-10-29 09:32:31 +01:00 by Vyacheslav Kobozev · 9 comments

System Information
Operating system: Windows-10-10.0.17763-SP0 64 Bits
Graphics card: NVIDIA GeForce RTX 3060/PCIe/SSE2 NVIDIA Corporation 4.6.0 NVIDIA 537.42

Blender Version
Broken: version: 4.1.0 Alpha, branch: main, commit date: 2023-10-27 20:25, hash: 01a2bd03695f
Worked: 4.0.0 Beta, b0a032e2eb0a, 2023-10-27 13:13

Short description of error
When i try to apply smooth/autosmooth, it destroys all sharp seams, that i marked before, and draw new sharps over!

Exact steps for others to reproduce the error
Add Suzanne, Edit mode, mark few edges as sharp, go to object, make smooth shading, check edit mode

**System Information** Operating system: Windows-10-10.0.17763-SP0 64 Bits Graphics card: NVIDIA GeForce RTX 3060/PCIe/SSE2 NVIDIA Corporation 4.6.0 NVIDIA 537.42 **Blender Version** Broken: version: 4.1.0 Alpha, branch: main, commit date: 2023-10-27 20:25, hash: `01a2bd03695f` Worked: 4.0.0 Beta, `b0a032e2eb0a`, 2023-10-27 13:13 **Short description of error** When i try to apply smooth/autosmooth, it destroys all sharp seams, that i marked before, and draw new sharps over! <video src="/attachments/f9465108-4acd-4891-82d3-f4e1e3badfca" controls></video> **Exact steps for others to reproduce the error** Add Suzanne, Edit mode, mark few edges as sharp, go to object, make smooth shading, check edit mode
Vyacheslav Kobozev added the
Priority
Normal
Status
Needs Triage
Type
Report
labels 2023-10-29 09:32:32 +01:00

Thanks for the report, @Vyach.

My guess is that it was caused by 89e3ba4e25. (I didn't check)
Looking at the code, the removal of sharp edges is intentional.
But looking at the description in the commit, this new behavior does not seem to have been intentional.

So confirming as regression.

@HooglyBoogly ^

Thanks for the report, @Vyach. My guess is that it was caused by 89e3ba4e25. (I didn't check) Looking at the code, the removal of sharp edges is intentional. But looking at the description in the commit, this new behavior does not seem to have been intentional. So confirming as regression. @HooglyBoogly ^
Member

Thanks for the report. But yes, it is intentional that the "Shade Smooth" operator clears sharp edges. Otherwise the mesh wouldn't actually be smooth afterwards. Edge and face sharpness both influence viewport display and renders.

Thanks for the report. But yes, it is intentional that the "Shade Smooth" operator clears sharp edges. Otherwise the mesh wouldn't actually be smooth afterwards. Edge and face sharpness both influence viewport display and renders.

Thanks for the report. But yes, it is intentional that the "Shade Smooth" operator clears sharp edges. Otherwise the mesh wouldn't actually be smooth afterwards. Edge and face sharpness both influence viewport display and renders.

In 3.6 mesh is visually smooth, and it is smooth on renders too.

Yes I can understand tha idea of full consistency between sharpness and visually marked seams, also usability of it for geonodes. But, as you can see, it can easily ruin manual work, and ruin it hidden. On the other hand if I want full consistency i already have such ability to bake sharps.

Yes, it is logical, when smooth make it totally smooth. But this operator may exist only inside edit mode. Operator from object mode should not change mesh such irrevertable way. Old smooth/autosmooth respected this rule and boundary between modes.

So I suggest to develop new workflow with new paradigm and test it well, before you destroy good old one.

You may keep old methodm that will not ruin manual marks.
Or, for example it may be «keep sharps» as default option for «smooth by angle» and off by default for «smooth».
Also we need something to keep «compare» mode to click back and forth and compare smoothing.

Also mesh can have custom normals, that can`t be restored so easily from previous selection.

> Thanks for the report. But yes, it is intentional that the "Shade Smooth" operator clears sharp edges. Otherwise the mesh wouldn't actually be smooth afterwards. Edge and face sharpness both influence viewport display and renders. In 3.6 mesh is visually smooth, and it is smooth on renders too. Yes I can understand tha idea of full consistency between sharpness and visually marked seams, also usability of it for geonodes. But, as you can see, it can easily ruin manual work, and ruin it hidden. On the other hand if I want full consistency i already have such ability to bake sharps. Yes, it is logical, when smooth make it totally smooth. But this operator may exist only inside edit mode. Operator from object mode should not change mesh such irrevertable way. Old smooth/autosmooth respected this rule and boundary between modes. So I suggest to develop new workflow with new paradigm and test it well, before you destroy good old one. You may keep old methodm that will not ruin manual marks. Or, for example it may be «keep sharps» as default option for «smooth by angle» and off by default for «smooth». Also we need something to keep «compare» mode to click back and forth and compare smoothing. Also mesh can have custom normals, that can`t be restored so easily from previous selection.
Brecht Van Lommel added this to the 4.1 milestone 2023-10-31 13:54:33 +01:00
Member

Maybe a "Affect Edges" option, on by default" would work well enough here. I think it's important that by default, the "Shade Smooth" operator actually makes the mesh smooth, regardless of whether the sharpness was stored on faces or edges.

Maybe a "Affect Edges" option, on by default" would work well enough here. I think it's important that by default, the "Shade Smooth" operator actually makes the mesh smooth, regardless of whether the sharpness was stored on faces or edges.

Maybe a "Affect Edges" option, on by default" would work well enough here. I think it's important that by default, the "Shade Smooth" operator actually makes the mesh smooth, regardless of whether the sharpness was stored on faces or edges.

Yes, it is true, but shading means «how to read and interprete mesh data», not «how to write it».

So i do not argue the new idea if it will bring something good. May be it will bring some clarity. But i want to preserve my work.
Also I still do not see good reason to make mesh edit with object mode operator.

Also i would not keep «Affect edges» as default on without very good reason. Just to keep workflow of million ppl.
Destroying the data, that was kept before should be an option.

There are rare exсeptions, like autodelete unused data in Blender. It is necessary to keep project cleaner, but remember how much buttflame it causes for new users. I remember myself in that situation. I was annoyed.
But I agreed with idea, because a) it keep my data cleaner b) I have fake user (option) to save what i need. c) I have outlined and i can set fake user for all at once if I wish.

> Maybe a "Affect Edges" option, on by default" would work well enough here. I think it's important that by default, the "Shade Smooth" operator actually makes the mesh smooth, regardless of whether the sharpness was stored on faces or edges. Yes, it is true, but shading means «how to read and interprete mesh data», not «how to write it». So i do not argue the new idea if it will bring something good. May be it will bring some clarity. But i want to preserve my work. Also I still do not see good reason to make mesh edit with object mode operator. Also i would not keep «Affect edges» as default on without very good reason. Just to keep workflow of million ppl. Destroying the data, that was kept before should be an option. There are rare exсeptions, like autodelete unused data in Blender. It is necessary to keep project cleaner, but remember how much buttflame it causes for new users. I remember myself in that situation. I was annoyed. But I agreed with idea, because a) it keep my data cleaner b) I have fake user (option) to save what i need. c) I have outlined and i can set fake user for all at once if I wish.
Member

Making "Shade Smooth" not make the mesh look smooth by clearing both face and edge sharpness just doesn't seem like a good option to me. Operators should do what their name says wherever possible.

Maybe replacing the old "Shade Smooth" operator with a "Shade Faces Smooth" and add a new "Shade Smooth" operator that clears both attributes could be a solution. Though I still find myself skeptical of that in the long term. Storing arbitrary data in the edge sharpness attribute was a workaround that shouldn't be necessary anymore. I realize it's a workflow change, but it feels like it could be for the better.

Making "Shade Smooth" not make the mesh look smooth by clearing both face and edge sharpness just doesn't seem like a good option to me. Operators should do what their name says wherever possible. Maybe replacing the old "Shade Smooth" operator with a "Shade Faces Smooth" and add a new "Shade Smooth" operator that clears both attributes could be a solution. Though I still find myself skeptical of that in the long term. Storing arbitrary data in the edge sharpness attribute was a workaround that shouldn't be necessary anymore. I realize it's a workflow change, but it feels like it could be for the better.

@HooglyBoogly as you say an "Affect Edges" can support the existing workflow.
While a logical argument can be made for clearing both, I'd like to hear from other users on this, CC'ing @JulienKaspar, @zanqdo.

@HooglyBoogly as you say an "Affect Edges" can support the existing workflow. While a logical argument can be made for clearing both, I'd like to hear from other users on this, CC'ing @JulienKaspar, @zanqdo.
Member

I've been torn on this for a while.

I think an option to "Affect Edges" or rather "Clear Sharp Edges" is a minimum needed feature.
Same for the Shade Flat operator, which also clears sharp edges atm.
I'd even advocate for having it disabled by default to avoid frequent data loss. Especially for cases where toggling smooth/flat shading is necessary and frequent.

If we don't want that, then I'd suggest that there needs to instead be some object-data property to use or ignore sharp edges (similar to how it worked before).

Afaiks object mode operators typically don't result in data loss of intentionally created attributes unless it's something drastic like converting the object type.
The modifier "Split Edges" also still uses Sharp Edges, so it's not great to so easily clear them.


Another side node:
I also find the operator names, or at least the tooltips confusing. It's easy to misunderstand how smooth shading is stored. Since it's object mode operators it's logical to think that it toggles an object property and not properties of individual faces and edges in the object-data.
It would be nice to be a bit more explicit in the tooltips: These operators set each face to smooth/flat shading (+ optionally clear marked sharp edges).

I've been torn on this for a while. I think an option to "Affect Edges" or rather "Clear Sharp Edges" is a minimum needed feature. Same for the Shade Flat operator, which also clears sharp edges atm. I'd even advocate for having it disabled by default to avoid frequent data loss. Especially for cases where toggling smooth/flat shading is necessary and frequent. If we don't want that, then I'd suggest that there needs to instead be some object-data property to use or ignore sharp edges (similar to how it worked before). Afaiks object mode operators typically don't result in data loss of intentionally created attributes unless it's something drastic like converting the object type. The modifier "Split Edges" also still uses Sharp Edges, so it's not great to so easily clear them. --- Another side node: I also find the operator names, or at least the tooltips confusing. It's easy to misunderstand how smooth shading is stored. Since it's object mode operators it's logical to think that it toggles an object property and not properties of individual faces and edges in the object-data. It would be nice to be a bit more explicit in the tooltips: These operators set each face to smooth/flat shading (+ optionally clear marked sharp edges).
Hans Goudey added
Type
Bug
and removed
Type
Report
labels 2024-01-12 17:07:04 +01:00
Hans Goudey self-assigned this 2024-01-12 17:07:08 +01:00

Gamedev modeling is a nice example of a workflow where switching between smooth and flat shading is needed very often for different temporal purposes (viewing - checking visual appearance and structure, editing or baking setup), so having smooth shading control separated from sharp edges marks control and keeping custom edge marks setup are workflow requirements.

And, therefore, this issue is not related to motorics, muscle memory and so one.
Motorics can be retrained, but workflow requirement cannot be solved by retraining motorics.

Gamedev modeling is a nice example of a workflow where switching between smooth and flat shading is needed very often for different temporal purposes (viewing - checking visual appearance and structure, editing or baking setup), so having smooth shading control separated from sharp edges marks control and keeping custom edge marks setup are workflow requirements. And, therefore, this issue is not related to motorics, muscle memory and so one. Motorics can be retrained, but workflow requirement cannot be solved by retraining motorics.
Blender Bot added
Status
Resolved
and removed
Status
Confirmed
labels 2024-01-15 14:05:38 +01:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
6 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#114244
No description provided.