Sculpt mode UI/UX design #65209
Labels
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
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#65209
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The purpose of this task is to discuss the UI/UX design of the features included in the sculpt-mode-features branch.
Cursor, normal radius and brush parameters
brush_parameters.mp4
Open questions:
Remeshers
remesh.mp4
Blender should include several remeshers, designed both for blocking and for automatic retopology to use the sculpt with the multires modifier. They should have the following properties:
The remeshers configuration should be stored per mesh. This includes the desired algorithm with its parameters and the reprojection options (mask, vertex, weights). This is especially important for the voxel remesher, which needs to be run several times when blocking a sculpt without interrupting the workflow.
The remesher options will be displayed in the top bar, next to dyntopo. The configuration is stored in the mesh datablock, so maybe it should also be displayed in the mesh datablock panel.
The remesh modifier could read these options from the datablock when added and apply them. This should be useful when working with OpenVDB booleans from sculpt mode.
Open questions:
Sculpt Vertex Colors
sculpt_vertex_colors.mp4
The sculpt vertex color data is not compatible with the current vertex color data. In order to keep supporting the functionality of the current vertex colors, we could do the following:
Open questions:
Mesh, mask and color filters
mesh_filters.mp4
These tools implement several operations which affect the mesh as a whole. The user can select the desired filter from the toolbar and apply it by dragging the cursor on the viewport.
Open questions:
Transform tool
transform_tool.mp4
The transform tool uses the same gizmos, snapping and constraints as any other transform operator in Blender. This tool is often used for posing, so it includes several operators to position the pivot point automatically, as well as the mask expand operator, specially designed for posing characters.
Open questions:
Masking tools and automasking stack
This experimental operator lets you select faces in hard surface sculpts by generating a mask. I also added additional mask operators like grow, shrin.mp4
The automasking stack should allow the user to use several automasking operations at the same time. For example, it should be possible to grab only the vertex connected topologically, ignoring edge borders, and affecting creases with a 50% strength. The UI for this could be quite complex. So, in the first version, supporting only topological masking with a checkbox should be enough.
Open questions:
Added subscriber: @PabloDobarro
Added subscribers: @WilliamReynish, @pablovazquez
Added subscriber: @brecht
Not sure I understand the question. If some mode does not use normal projection, it can display a cursor but without taking into account the normal?
If it's exactly 0.0 that does not produce any deformation, then we should not allow it to be set to that? If it's any small radius that is smaller than faces, then can't we have some fallback if not enough geometry is detected under the brush?
If it should be at the top level or not I guess depends if it's an option that you need to tweak often, ideally only for artistic control if it can be made to work well enough on different geometry.
What do you mean by "crease an edge while collapsing it"?
I can imagine that if the normal is based on few faces with a small normal radius, and dyntopo is changing these faces, that the normal can be quite unstable. And with small normal radius this would be worse than full normal radius. But maybe you are referring to something else.
Is this about saving memory in the undo stack, or is there some limitation in the undo code that makes this not work?
This is like baking or rendering. This can be a modal operator that has a progress bar and keeps the UI responsive, but blocks most user interaction that could disrupt the remeshing. If there's some interactive progress to display that would be best, but for remeshing it may be hard to show much useful info besides a progress bar.
One approach would be to define the parameter relative to bounding box size or surface area. Displaying an estimated number of polygons based on surface area could also give users a hint about voxel size being set too low or high.
In general it's good to make the code robust to failed memory allocations, catching any exceptions or NULL returns from malloc as needed. This works to an extent, though the computer can still become very slow due to swapping. Ensuring the re-meshing takes up no more than e.g. half of RAM could guard against swapping, though may not be practical to implement.
It seems worth trying Quadriflow. Implementing our own is hard, and if we do want to do this it may be better incrementally improve an existing implementation rather than doing it from scratch.
In texture paint mode there is a Texture for color and a Texture Mask, the latter more similar to the texture for sculpting and that's the one that would be shared between painting and sculpting. I imagine that you'd want to be able to specify both types of textures.
I guess this goes to the question of having all paint tools available along with sculpting, or if they should remain in separate modes. If underlying data structures are shared then switching modes should be fast at least, but from a UI perspective I'm not sure what's best.
We could, but I'm not sure it's that useful to have an attribute paint mode for face corner painting.
I think this is preferable.
Why would this take a lot of memory? Is it because this it would be doing an undo push for every iteration? If so, successive smoothing operations could be combined into one step, similar to how we handle frame changes with
OPTYPE_UNDO_GROUPED
.What is it about interactive preview that takes more resources than non-interactive operation?
Some users told me that they prefer the new cursor in texture paint mode, even if it does not match the projection. I personally think that we should wait to have proper support in those modes before making the cursor compatible.
The UI allows setting the strength to 0, which has the same effect. Setting the normal radius to 0 could be also considered an optimization, as it avoids doing any sampling and returns the normal of the face directly. I don't think normal radius is an option you want to change that often
Some users reported that the scrape brush with a low normal radius produces artifacts near the hard surface edges when you are doing something like in the video. To achive that effect, you need a very evenly distributed topology, and if you are using dyntopo, you are breaking the edges of the model constantly due to the triangulation. I don't think that this is that important, but maybe we should not generate new geometry when using this brush from dyntopo.
Both. The remeshing undo step is implemented in a similar way to the undo step that is done before entering dyntopo (it copies everything). For supporting redo, we would also need to copy the resulting mesh plus all the sculpting operations that were done on top of it. When working with high resolution meshes, this could take a lot of memory.
Estimating the number of polygons based on the surface area is a nice idea, I'm going to try that.
The only drawback that Quadriwflow has is that it does not take the mesh open edges into account, so it fails when remeshing planes or cloth. If we are able to solve that, the quad extractor remesher could be very decent.
I also think this is the best option. I personally never used per-face colors or sculpting and painting at the same time. If we can replace the whole system internally, making it fully compatible with the render engines while keeping the UI mostly as it is now, it would be ideal. We can add an option for sculpting and painting at the same time only for the sculpt draw brush, just in case. That will also avoid adding painting code to all the sculpt brushes. If someone is working with vertex colors on a low poly mesh, he/she can always split the vertices.
Because I need to store the result of all intermediate iterations to avoid recalculating everything from the first to the last iteration while previewing the filter (the user may be adjusting the smooth filter between the 10th and the 11th iteration). I don't know if there is a better way to do this
Updating and redrawing the whole mesh constantly. I implemented a way to filter the fully masked nodes before starting the filter to avoid updating and redrawing them, so it is possible to apply interactively a mesh filter operation in a small area of a high poly sculpt. This does not make sense with mask filters, so I need to redraw everything. Smoothing a whole sculpt or using the transform tool without masks are also common operations, and they are also extremely slow when used interactively.
Added subscriber: @xrg
Added subscriber: @KINjO
Added subscriber: @TheRedWaxPolice
@PabloDobarro
Cursors:
We should handle cursors consistently in all paint & sculpt modes. In the paint modes, it would also be good to remove the arrow cursor by default and use something more appropriate like a crosshair or dot, with a cirfumference circle to communicate the brush size.
Remesh:
As we talked about, Blender already has some Remesh controls here:
These don't allow redo, which is fine - your remeshing could be added here and work similarly.
This is nicer, and less arbitrary than having a specific panel in obData just for this.
Sculpt Vertex colors:
As we discussed, I think we should keep Vertex Paint mode separate, but we could add an option in Sculpt mode for certain tools where it makes sense to also affect vertex colors.
I expect vertex colors would be most useful with Draw, Layer, Blob tools, but could also be added to Clay, Inflate and some others.
Transform pivots:
This could be a tool option, to only affect the pivot. As you say, it would work best if the gizmo would stay visible during transform, but that is wanted/needed in Blender in general anyway - best to solve this generically and not for this specific case.
Automasking:
I think yes, we should add masking tools for those things. There could also be a more obscure shortcut for people who want to works faster, but there should also be a more easily discoverable way to do this.
Added subscriber: @Jaydead
Added subscriber: @Regnas
The voxel remesher also works in object mode, hence it's placement in the object data panel.
This is not exclusive to sculpt mode like dyntopo, so putting it under the dyntopo panel doesn't make much sense.
So yeah, ideally it should be on both places like the author said, a panel next to dyntopo and in the obect data panel as well.
Added subscriber: @pancake_hunter
Added subscriber: @ThinkingPolygons
How about all of them? Just like zbrush. ?
Yes please.
Added subscriber: @Ko
This comment was removed by @Ko
Changed status from 'Confirmed' to: 'Resolved'