The full name was "Topology Slide/Relax", but it didn't fit in the
toolbar UI. This was causing some problems:
- The mesh filter that does the same thing is called "Relax"
- We may want to add a "Topology Brush" tool in the future that is more
oriented to retopology task (like creating strips of quads), so by doing
this we avoid having two tools with the same name in the UI.
Reviewed By: billreynish
Differential Revision: https://developer.blender.org/D6590
We can't use the fast path when the mesh is used by mulitple objects and so
slower sculpting is expected then. But fake users should not affect this. This
also fixes the same type of error in a few other areas.
This brush should be added to the set of brushes where we know which
vertices are going to be affected by the brush when starting the stroke.
This way we can limit the automasking only to those vertices instead of
flood filling the whole mesh from the active vertex.
All brushes that are not in this set will automask by flood filling the
mesh when starting the stroke. To improve this and make it work as most
users expect, we need a fast way to calculate topological distances on
high poly meshes.
Reviewed By: jbakker
Maniphest Tasks: T72251
Differential Revision: https://developer.blender.org/D6376
Before this it was possible to use the operator with Dyntopo sample mode
with a PBVH type GRIDS or FACES, causing a crash. Now we check first if
the PBVH type is correct before calling the sampling function.
We also check if the PBVH exists, which may also cause a crash.
Reviewed By: jbakker
Maniphest Tasks: T72647
Differential Revision: https://developer.blender.org/D6475
This commits introduces the pose_ik_segments brush property in the Pose Brush. When increasing the IK segments count, the brush generates more segments and weights associations following the topology of the mesh. When moving the brush, these segments are transformed using an IK solver and they are used to deform the mesh.
When pressing Ctrl, the brush controls the segments' roll rotation instead of using the IK solver. The brush falloff controls how much rotation is propagated from the first to the last segment in the chain.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6389
Partial updates are not currently supported in the Workbench engine, so
we can skip the rect calculation during the stroke.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6444
Viewport: Disable Clipping For EEVEE and External Renderers
Currently it is possible that, when using viewport clipping, the display and tools communicate
different information to the user then the renderer does. The reason is
that the renderer does not support viewport clipping. Both EEVEE and
Cycles do not support it.
This patch will disable the clipping in all the tools and drawing code
when the viewport drawing mode is `Material Preview` or `Rendered`.
This patch introduces a `RV3D_CLIPPING_ENABLED` util that checks if
clipping is enabled for the given `rv3d` and `v3d`. Also in places where
it was needed we added the `ViewContext` as a carrier for the `View3D`
and `RegionView3D`.
There are a few areas in the tooling (select, projection painting) that
still needs to be tackled after this patch.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D6047
When size pressure is enabled, the radius may not be enough to sample
any vertices to calculate the area normal. This lead to a vector 0 plane
and a division by 0 when calculating the signed distance to the plane,
which produces a NaN that was being written to the vertex coordinates.
Reviewed By: brecht
Maniphest Tasks: T72006
Differential Revision: https://developer.blender.org/D6326
This commit fixes 3 bugs:
- Fix the crash reported in T72054. The BMesh elem table and the vd.no was null, so we now ensure that the table exists before running any sculpt tool in dyntopo. The relax function also uses vd.fno in case that vd.no is not available.
- Fix missing updates of the bounding boxes when running the mesh filter. This can be optimized by running the updates only when the filter finishes. Without this, it is impossible to sculpt the user modifies the mesh too much with the filter.
- Fix incorrect solution of relax vertex when using EEVEE. Relaxing the mesh requires the updated normals after each iteration. This was done by the PBVH rendering code, but when running EEVEE it was using incorrect normals. Now normals are updated after each iteration.
Reviewed By: brecht
Maniphest Tasks: T72054
Differential Revision: https://developer.blender.org/D6333
Some other areas in the brush code outside sculpt mode assume that
pressure is multiplied directly on top of the initial size. This patch
calculates the pixel radius correctly using the brush size from sculpt
mode to get the dyntopo detail size.
When the new brush input system is in place, all these values will come
directly from the brush input code with all the custom curves applied
per brush, so all paint modes will have a correct brush behavior and all
this sculpt mode specific code won't be necessary.
Reviewed By: jbakker
Maniphest Tasks: T72092
Differential Revision: https://developer.blender.org/D6339
The old mask brush implementation was adding the brush value to the
previous vertex mask value and clamping the result. This leads to
visible artifacts in the mask gradient as the value approaches 0 or 1,
so it was not possible to paint a smooth mask with this brush.
Now we are also multiplying by the previous mask value before clamping,
fixing all those gradient artifacts.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6341
This adds support to the current sculpt sample detail operator to sample
a voxel size for the voxel remesher when sculpting on regular meshes.
It provides an approximation of a voxel size that is going to preserve
the sampled sculpt details after remeshing. It is not going to be 100%
accurate in all cases as it relies on having consistent edge length in
the whole sculpt, but it saves a lot of time and avoids guessing the
voxel size by trying different values.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6251
The relation between the pressure/size and the pressure/alpha is a
fundamental property that defines the behavior of a brush, so it does
not make sense to have it unified across all brushes. This applies both
for sculpting and painting.
Some of the new 2.82 brushes need pressure/size or pressure/alpha to be
enabled to work propely, while others don't. Users should not be
switching on and off this property manually when changing brushes if they
want to use unified size. This is also causing that some users are using
the brushes with an incorrect configuration.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6291
After this commit it should be possible to share the same deformation
formulas that are used in the Elastic Deform brush with other areas of
Blender such as Grease Pencil or proportional editing.
This also removes a lot of code from sculpt.c that is not direclty
related to sculpting.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6281
This removes all multires code from the smooth brush and replaces it
with a new implementation that uses the sculpt mesh API. This makes the
code much easier to understand and maintain.
We could unify all the smooth brushes into a single implementation, but
mesh smoothing has code to deal with open boundaries that I don't want
to remove yet.
Most bugs and artifacts related to access neighbor grids should be fixed
(like T71667). This also fixes performance bugs such as T70689, that were
related to grid stitching after applying the brush.
Reviewed By: jbakker
Maniphest Tasks: T71667
Differential Revision: https://developer.blender.org/D6277
We are now modifying the relation between pressure and radius using
custom functions to improve the brushes, but dyntopo was not prepared
for this. This fix sends the unmodified radius to dyntopo so it modifies
the geometry correctly.
Reviewed By: jbakker
Maniphest Tasks: T71868
Differential Revision: https://developer.blender.org/D6299
After adding normal radius, the main use of the Scrape brush is to create flat surfaces with sharp edges. In that case, it does not make sense to have our current "Peaks" version of the brush as its inverted version.
The correct inverted version of Scrape for this use case is the Fill brush. This way you can use this tool to crease both concave and convex sharp edges and to fix the artifacts one version produces with its inverted version.
I think we should merge these two tools into one, but for now, this solution keeps compatibility with the old behavior.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6022
This commit implements the Topology Slide/Relax brush and the Relax mesh filter.
These tools are designed to move the topology on top of the mesh without affecting the volume.
The Topology Slide/Relax brush slides the topology of the mesh in the direction of the stroke. When pressing shift, it has an alternative smooth mode similar to the Relax Brush in the sculpt branch. It should be way more stable and produce fewer artifacts.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6059
The smooth iterations of the pose factor were hardcoded to 4. This works fine in most situations when you are posing a low poly mesh, which is the main use case of this tool. I added the smooth iterations as a brush property in case you need to pose a high poly mesh directly without producing artifacts.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6157
The Multiplane Scrape brush creates sharp edges with a given fixed angle by trimming the mesh with two planes in local space at the same time. When working with stylized or hard surface models, this brush produces way better results and is more predictable than any other crease/flatten brush based on curves and alphas.
It is also the first brush we have than can produce hard surface concave creases.
The Multiplane Scrape Brush also has a dynamic mode where it samples the surface to fit the angle and scrape planes during a stroke. With this mode enabled you can sculpt multiple times over the same edge without creating artifacts.
It can also create creases that change between concave and convex during the same stroke.
The behavior of this brush will improve after merging patches like D5993 and its behavior in concave creases can still be improved, so I will keep tweaking its parameters and default values once we have all brush properties available.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6174
After refactoring the mirror modifier and supporting geometry modifications with PBVH_FACES this operator can be easily implemented without Dyntopo.
i
The symmetrize button and options are still in the Dyntopo pannel. There are patches like doing multiple modifications in the Sculpt mode UI, so we need to find a way to organize this better.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6180
The previous Clay brush was similar to flatten. Now it has a different plane calculation and falloff, based on the position of the vertices before deforming them, so it feels more like adding clay to the model.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6228
By squaring the pen pressure and disabling BRUSH_SPACE_ATTEN the brush
feels like it has a bigger strength range, wich makes it easier to
control when applying less pressure in order to smooth sculpted
surfaces.
Each brush should have a custom input pressure curve by default to get
an optimal behaviour and make all brushes consistent, but that is going
to take some time to get it right.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6214
This fixes the crash, but it does not fix the core issue. The PBVH should
always be available when an object is in sculpt mode and tools should
not need to check for that.
Reviewed By: jbakker
Maniphest Tasks: T70790
Differential Revision: https://developer.blender.org/D6063
This solves performance issues on some computers where there is significant
threading overhead. Rather than doing the complicated work of optimizing our
own task scheduler, use TBB which appears to work well. The downside is that
we have another thread pool, but it is already there when using OpenVDB voxel
remesh.
For future releases we can switch to using TBB to replace our task scheduler
implementation entirely, and use the same thread pool for BLI_task, Cycles,
Mantaflow, etc.
Differential Revision: https://developer.blender.org/D6030
This commit also fixes the same issue in elastic deform
Reviewed By: jbakker
Maniphest Tasks: T70554
Differential Revision: https://developer.blender.org/D6014
- Fix accumulate by allowing normal radius greater than one. Now it works as it should and it should be enabled by default
- Make the square test sharper. This gives a lot more definition to the brush, even when working with fewer polygons
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5984