[Bf-blender-cvs] [51e90a0adad] sculpt-dev: Sculpt Expand: Fix normals falloff
Pablo Dobarro
noreply at git.blender.org
Wed Feb 17 16:50:59 CET 2021
Commit: 51e90a0adad7e71870367572501f285f4fd3b10d
Author: Pablo Dobarro
Date: Wed Feb 17 16:50:41 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB51e90a0adad7e71870367572501f285f4fd3b10d
Sculpt Expand: Fix normals falloff
===================================================================
M source/blender/editors/sculpt_paint/sculpt_expand.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 4d8aa3b3189..fa1c52c0568 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -110,6 +110,11 @@
* loop, which is undesired. */
#define SCULPT_EXPAND_LOOP_THRESHOLD 0.00001f
+/* Defines how much changes in curvature in the mesh affect the falloff shape when using normal
+ * falloff. This default was found experimentally and it works well in most cases, but can be
+ * exposed for tweaking if needed. */
+#define SCULPT_EXPAND_NORMALS_FALLOFF_EDGE_SENSITIVITY 300
+
/* Expand Modal Keymap. */
enum {
SCULPT_EXPAND_MODAL_CONFIRM = 1,
@@ -435,7 +440,9 @@ static float *sculpt_expand_topology_falloff_create(Sculpt *sd, Object *ob, cons
return dists;
}
-/* Normals: */
+/* Normals: Floodfills the mesh and reduces the falloff depending on the normal difference between
+ * each vertex and the previous one. This creates falloff pattens that follow and snap to the hard
+ * edges of the object. */
static bool mask_expand_normal_floodfill_cb(
SculptSession *ss, int from_v, int to_v, bool is_duplicate, void *userdata)
@@ -462,7 +469,7 @@ static bool mask_expand_normal_floodfill_cb(
static float *sculpt_expand_normal_falloff_create(Sculpt *sd,
Object *ob,
- const int vertex,
+ const int v,
const float edge_sensitivity)
{
SculptSession *ss = ob->sculpt;
@@ -475,21 +482,17 @@ static float *sculpt_expand_normal_falloff_create(Sculpt *sd,
SculptFloodFill flood;
SCULPT_floodfill_init(ss, &flood);
- SCULPT_floodfill_add_initial_with_symmetry(sd, ob, ss, &flood, vertex, FLT_MAX);
+ SCULPT_floodfill_add_initial_with_symmetry(sd, ob, ss, &flood, v, FLT_MAX);
ExpandFloodFillData fdata;
fdata.dists = dists;
fdata.edge_factor = edge_factor;
fdata.edge_sensitivity = edge_sensitivity;
- SCULPT_vertex_normal_get(ss, vertex, fdata.original_normal);
+ SCULPT_vertex_normal_get(ss, v, fdata.original_normal);
SCULPT_floodfill_execute(ss, &flood, mask_expand_normal_floodfill_cb, &fdata);
SCULPT_floodfill_free(&flood);
- for (int i = 0; i < totvert; i++) {
- dists[i] = FLT_MAX;
- }
-
for (int repeat = 0; repeat < 2; repeat++) {
for (int i = 0; i < totvert; i++) {
float avg = 0.0f;
@@ -962,7 +965,8 @@ static void sculpt_expand_falloff_factors_from_vertex_and_symm_create(
sculpt_expand_topology_falloff_create(sd, ob, v);
break;
case SCULPT_EXPAND_FALLOFF_NORMALS:
- expand_cache->falloff = sculpt_expand_normal_falloff_create(sd, ob, v, 300.0f);
+ expand_cache->falloff = sculpt_expand_normal_falloff_create(
+ sd, ob, v, SCULPT_EXPAND_NORMALS_FALLOFF_EDGE_SENSITIVITY);
break;
case SCULPT_EXPAND_FALLOFF_SPHERICAL:
expand_cache->falloff = sculpt_expand_spherical_falloff_create(sd, ob, v);
@@ -1939,7 +1943,6 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even
falloff_type = SCULPT_EXPAND_FALLOFF_BOUNDARY_TOPOLOGY;
}
- falloff_type = SCULPT_EXPAND_FALLOFF_NORMALS;
sculpt_expand_falloff_factors_from_vertex_and_symm_create(
ss->expand_cache, sd, ob, ss->expand_cache->initial_active_vertex, falloff_type);
More information about the Bf-blender-cvs
mailing list