Cloth UI redesign #49145

Closed
opened 2016-08-23 09:07:05 +02:00 by Luca Rood · 13 comments
Member

Currently the cloth settings UI suffers from great inconsistencies and design flaws, caused mainly by the great amount of independently developed features added over time, causing the UI to be "patched together" in an unorderly fashion.

I think we are now at a point in time where we have a good view of what is required for the cloth UI to work properly. We can now make a new design, considering all the features that already exist, and organizing things with a mind on what is yet to come. This would not only benefit users, allowing them to find features more easily, but also developers who want to add new features to the cloth simulator, and currently don't have even a remotely logical place to put them in the UI in most cases.

Here is what I have found wrong with the current UI (this includes both objective issues and somewhat personal opinions):

  • Settings are not categorized properly (related settings are spread across panels, and panels contain unrelated settings, we even have entire panels dedicated to a single feature):

  • The panel actually called "Cloth" contains all the physical properties (mass, stiffness, damping...), but also a few settings that control vertex positions and shape (pinning, rest shape key, and the recent dynamic mesh feature).

  • Other shape related settings (shrinking and sewing springs), are located in another panel, entitled "Cloth Sewing Springs", which is misleading seeing as shrinking isn't really related to sewing springs per se.

  • Redundant check-boxes and check-boxes that control unrelated features (this is somewhat subjective):

  • Check-boxes for pinning and for stiffness scaling are unnecessary, as simply not specifying a vertex group is enough to disable these features.

  • Shrinking shouldn't depend on having sewing springs checked.

  • It should be possible to have self-collision active without having object collision active, as those are not mutually dependant (this is probably the most debatable thing I am proposing).

  • Inconsistent UI design for things that have the same behaviour:

  • It is possible to "modulate" structural and bending stiffnesses with a vertex group, by means of the stiffness scaling feature (located in a separate panel from the modulated settings)

  • Similarly, it is also possible to modulate shrinking with a vertex group, however the UI design for that is totally different, having min and max shrink values right next to each other, beside a vertex group field.

I have fixed all the mentioned issues by reorganizing the UI, and making some actual behaviour changes to the cloth logic code. Here I'll show my proposed design (patch of the implementation, for actual testing, is attached at the end), and of course I would appreciate it if all of you would chip in with your opinions on what is good about it and what you think should be changed.

Here is an image showing all the changes with my cloth UI proposal:

Comparison.png

Finally, here is the diff you can apply onto master to test the new UI (I, of course, have all the changes neatly separated into individual commits, so if anything is to be merged, I can supply a separate diff for a specific change):
cloth-ui-redesign.diff

Currently the cloth settings UI suffers from great inconsistencies and design flaws, caused mainly by the great amount of independently developed features added over time, causing the UI to be "patched together" in an unorderly fashion. I think we are now at a point in time where we have a good view of what is required for the cloth UI to work properly. We can now make a new design, considering all the features that already exist, and organizing things with a mind on what is yet to come. This would not only benefit users, allowing them to find features more easily, but also developers who want to add new features to the cloth simulator, and currently don't have even a remotely logical place to put them in the UI in most cases. Here is what I have found wrong with the current UI (this includes both objective issues and somewhat personal opinions): - Settings are not categorized properly (related settings are spread across panels, and panels contain unrelated settings, we even have entire panels dedicated to a single feature): - The panel actually called "Cloth" contains all the physical properties (mass, stiffness, damping...), but also a few settings that control vertex positions and shape (pinning, rest shape key, and the recent dynamic mesh feature). - Other shape related settings (shrinking and sewing springs), are located in another panel, entitled "Cloth Sewing Springs", which is misleading seeing as shrinking isn't really related to sewing springs per se. - Redundant check-boxes and check-boxes that control unrelated features (this is somewhat subjective): - Check-boxes for pinning and for stiffness scaling are unnecessary, as simply not specifying a vertex group is enough to disable these features. - Shrinking shouldn't depend on having sewing springs checked. - It should be possible to have self-collision active without having object collision active, as those are not mutually dependant (this is probably the most debatable thing I am proposing). - Inconsistent UI design for things that have the same behaviour: - It is possible to "modulate" structural and bending stiffnesses with a vertex group, by means of the stiffness scaling feature (located in a separate panel from the modulated settings) - Similarly, it is also possible to modulate shrinking with a vertex group, however the UI design for that is totally different, having min and max shrink values right next to each other, beside a vertex group field. I have fixed all the mentioned issues by reorganizing the UI, and making some actual behaviour changes to the cloth logic code. Here I'll show my proposed design (patch of the implementation, for actual testing, is attached at the end), and of course I would appreciate it if all of you would chip in with your opinions on what is good about it and what you think should be changed. Here is an image showing all the changes with my cloth UI proposal: ![Comparison.png](https://archive.blender.org/developer/F341569/Comparison.png) Finally, here is the diff you can apply onto master to test the new UI (I, of course, have all the changes neatly separated into individual commits, so if anything is to be merged, I can supply a separate diff for a specific change): [cloth-ui-redesign.diff](https://archive.blender.org/developer/F341573/cloth-ui-redesign.diff)
Author
Member

Changed status to: 'Open'

Changed status to: 'Open'
Author
Member

Added subscriber: @LucaRood-3

Added subscriber: @LucaRood-3
Member

Added subscribers: @JulianEisel, @PawelLyczkowski-1

Added subscribers: @JulianEisel, @PawelLyczkowski-1

Added subscriber: @brecht

Added subscriber: @brecht

Perhaps it's better to submit this as a differential for easier code review?

I agree with most of the points, but some comments:

  • This seems to be breaking backwards compatibility in some ways, if it's removing options or changing how they work. Ideally the patch would include versioning to keep compatibility.
  • For the collision panel, it is against UI conventions to use such boxes for organizing options. Some object collision options also seem to be shared with self collision, like repel distance. I also noticed there exists a self_friction property that is not used in the UI or simulation code.
  • I agree it can be useful to have self collision without object collision, for example a flag blowing in the wind. Perhaps there could be two columns, one for object and one for self collision, and then the shared properties below that?
  • Cloth shape panel looks a bit disorganized, I would try to organize it into columns more.
Perhaps it's better to submit this as a differential for easier code review? I agree with most of the points, but some comments: * This seems to be breaking backwards compatibility in some ways, if it's removing options or changing how they work. Ideally the patch would include versioning to keep compatibility. * For the collision panel, it is against UI conventions to use such boxes for organizing options. Some object collision options also seem to be shared with self collision, like repel distance. I also noticed there exists a `self_friction` property that is not used in the UI or simulation code. * I agree it can be useful to have self collision without object collision, for example a flag blowing in the wind. Perhaps there could be two columns, one for object and one for self collision, and then the shared properties below that? * Cloth shape panel looks a bit disorganized, I would try to organize it into columns more.
Author
Member

Sorry for my late reply, for some reason my email app didn't notify me.

I posted it here, as it is more of a proposal, and I thought that it would allow for better discussion. Once everything is agreed upon, I'll submit a diff.

  • Backwards compatibility: The lack of versioning has been a deliberate choice, as in this case we have to weigh the pros and cons. As far as I can see, the only thing that breaks compatibility here, is the case where one has a file wherein one of the removed flags is disabled, but a vertex group is specified in the corresponding field, in which case the previously disabled option will become enabled in the new version of Blender. Versioning in this case would mean emptying all the vertex group fields whose corresponding checkboxes are unchecked, which could be undesirable if the person temporarily disabled the checkbox, and has many vertex groups while not necessarily remembering which one should be there. So it is a case of deciding between data integrity (keeping the vertex groups) or complete behavioural consistency (removing vertex groups of unchecked features).

  • Collision panel: I didn't know about that convention, I'll remove the boxes then (why do they even exist?). As far as I can tell, no options are shared between the collision and self collision, I could be wrong though. Regarding the self_friction property, I don't know anything about that, probably something someone was going to implement later, should I remove it then?

  • Cloth Shape panel: I do indeed agree that it looks disorganized, I almost pointed that out in my proposal. I have tried multiple layouts for this panel, but never got to a satisfactory result. The main issue being that if I organize it neatly in columns, the "Sewing" and "Dynamic Mesh" checkboxes look too similar, and might confuse the user into thinking "Dynamic Mesh" is related to "Shrinking", in the same way "Sewing" is to "Sewing Force", despite the colon and the graying out behaviour existent in sewing. What do you think?

Sorry for my late reply, for some reason my email app didn't notify me. I posted it here, as it is more of a proposal, and I thought that it would allow for better discussion. Once everything is agreed upon, I'll submit a diff. * **Backwards compatibility:** The lack of versioning has been a deliberate choice, as in this case we have to weigh the pros and cons. As far as I can see, the only thing that breaks compatibility here, is the case where one has a file wherein one of the removed flags is disabled, but a vertex group is specified in the corresponding field, in which case the previously disabled option will become enabled in the new version of Blender. Versioning in this case would mean emptying all the vertex group fields whose corresponding checkboxes are unchecked, which could be undesirable if the person temporarily disabled the checkbox, and has many vertex groups while not necessarily remembering which one should be there. So it is a case of deciding between data integrity (keeping the vertex groups) or complete behavioural consistency (removing vertex groups of unchecked features). * **Collision panel:** I didn't know about that convention, I'll remove the boxes then (why do they even exist?). As far as I can tell, no options are shared between the collision and self collision, I could be wrong though. Regarding the `self_friction` property, I don't know anything about that, probably something someone was going to implement later, should I remove it then? * **Cloth Shape panel:** I do indeed agree that it looks disorganized, I almost pointed that out in my proposal. I have tried multiple layouts for this panel, but never got to a satisfactory result. The main issue being that if I organize it neatly in columns, the "Sewing" and "Dynamic Mesh" checkboxes look too similar, and might confuse the user into thinking "Dynamic Mesh" is related to "Shrinking", in the same way "Sewing" is to "Sewing Force", despite the colon and the graying out behaviour existent in sewing. What do you think?

In #49145#393015, @LucaRood-3 wrote:

  • Backwards compatibility: The lack of versioning has been a deliberate choice, as in this case we have to weigh the pros and cons. As far as I can see, the only thing that breaks compatibility here, is the case where one has a file wherein one of the removed flags is disabled, but a vertex group is specified in the corresponding field, in which case the previously disabled option will become enabled in the new version of Blender. Versioning in this case would mean emptying all the vertex group fields whose corresponding checkboxes are unchecked, which could be undesirable if the person temporarily disabled the checkbox, and has many vertex groups while not necessarily remembering which one should be there. So it is a case of deciding between data integrity (keeping the vertex groups) or complete behavioural consistency (removing vertex groups of unchecked features).

If this goes into 2.8 it's not really an issue, otherwise would suggest to empty the vertex groups anyway.

  • Collision panel: I didn't know about that convention, I'll remove the boxes then (why do they even exist?). As far as I can tell, no options are shared between the collision and self collision, I could be wrong though. Regarding the self_friction property, I don't know anything about that, probably something someone was going to implement later, should I remove it then?

The boxes exist for modifiers, constraints, vertex groups, etc.

You're right, I don't think anything is shared. I didn't see there was both a bvhtree and bvhselftree that have different settings. The unused self_friction is just something I noticed while looking at the code, you can remove it if you want.

  • Cloth Shape panel: I do indeed agree that it looks disorganized, I almost pointed that out in my proposal. I have tried multiple layouts for this panel, but never got to a satisfactory result. The main issue being that if I organize it neatly in columns, the "Sewing" and "Dynamic Mesh" checkboxes look too similar, and might confuse the user into thinking "Dynamic Mesh" is related to "Shrinking", in the same way "Sewing" is to "Sewing Force", despite the colon and the graying out behaviour existent in sewing. What do you think?

Normally you'd jus add an extra separator() so there's some extra spacing between the buttons. If that's not clear enough perhaps you can add a "Shrinking:" label and have a "Shrinking Force: " button below?

> In #49145#393015, @LucaRood-3 wrote: > * **Backwards compatibility:** The lack of versioning has been a deliberate choice, as in this case we have to weigh the pros and cons. As far as I can see, the only thing that breaks compatibility here, is the case where one has a file wherein one of the removed flags is disabled, but a vertex group is specified in the corresponding field, in which case the previously disabled option will become enabled in the new version of Blender. Versioning in this case would mean emptying all the vertex group fields whose corresponding checkboxes are unchecked, which could be undesirable if the person temporarily disabled the checkbox, and has many vertex groups while not necessarily remembering which one should be there. So it is a case of deciding between data integrity (keeping the vertex groups) or complete behavioural consistency (removing vertex groups of unchecked features). If this goes into 2.8 it's not really an issue, otherwise would suggest to empty the vertex groups anyway. > * **Collision panel:** I didn't know about that convention, I'll remove the boxes then (why do they even exist?). As far as I can tell, no options are shared between the collision and self collision, I could be wrong though. Regarding the `self_friction` property, I don't know anything about that, probably something someone was going to implement later, should I remove it then? The boxes exist for modifiers, constraints, vertex groups, etc. You're right, I don't think anything is shared. I didn't see there was both a `bvhtree` and `bvhselftree` that have different settings. The unused `self_friction` is just something I noticed while looking at the code, you can remove it if you want. > * **Cloth Shape panel:** I do indeed agree that it looks disorganized, I almost pointed that out in my proposal. I have tried multiple layouts for this panel, but never got to a satisfactory result. The main issue being that if I organize it neatly in columns, the "Sewing" and "Dynamic Mesh" checkboxes look too similar, and might confuse the user into thinking "Dynamic Mesh" is related to "Shrinking", in the same way "Sewing" is to "Sewing Force", despite the colon and the graying out behaviour existent in sewing. What do you think? Normally you'd jus add an extra `separator()` so there's some extra spacing between the buttons. If that's not clear enough perhaps you can add a "Shrinking:" label and have a "Shrinking Force: " button below?
Author
Member

So I'll empty the vertex groups (regardless of 2.79 or 2.8 I guess...).

Thanks for the clarification on the boxes, I had forgotten about those cases. I'll remove those, and perhaps separate the collision options with a separator(), or should I create individual panels for "object collision" and "self collision"?

And lastly, I'll try to better organize the "Cloth Shape" panel.

Then I'll create a differential for final review.

So I'll empty the vertex groups (regardless of 2.79 or 2.8 I guess...). Thanks for the clarification on the boxes, I had forgotten about those cases. I'll remove those, and perhaps separate the collision options with a `separator()`, or should I create individual panels for "object collision" and "self collision"? And lastly, I'll try to better organize the "Cloth Shape" panel. Then I'll create a differential for final review.
Member

Added subscriber: @jta

Added subscriber: @jta

Added subscriber: @RainerTrummer

Added subscriber: @RainerTrummer
Member

Added subscriber: @Blendify

Added subscriber: @Blendify
Member

Committed c4ef2e2f2e

Committed c4ef2e2f2e
Member

Changed status from 'Open' to: 'Resolved'

Changed status from 'Open' to: 'Resolved'
Aaron Carlisle self-assigned this 2018-09-30 02:38:57 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
5 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#49145
No description provided.