Commit: 0a9520ce846d29742dbb1afa79a97a56cab0abeb Author: Joseph Eagar Date: Tue Jan 31 10:01:18 2023 -0800 Branches: master https://developer.blender.org/rB0a9520ce846d29742dbb1afa79a97a56cab0abeb
Sculpt: Un-invert expand normal falloff Normals falloff mask is created inverted compared to how other falloffs work. It's now un-inverted in a final step at the end. Also exposed the normals falloff smooth steps as an RNA property. =================================================================== M source/blender/editors/sculpt_paint/sculpt_expand.cc M source/blender/editors/sculpt_paint/sculpt_intern.h =================================================================== diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.cc b/source/blender/editors/sculpt_paint/sculpt_expand.cc index b6a71a69287..64b71ba26f1 100644 --- a/source/blender/editors/sculpt_paint/sculpt_expand.cc +++ b/source/blender/editors/sculpt_paint/sculpt_expand.cc @@ -517,11 +517,12 @@ static bool mask_expand_normal_floodfill_cb( static float *sculpt_expand_normal_falloff_create(Sculpt *sd, Object *ob, const PBVHVertRef v, - const float edge_sensitivity) + const float edge_sensitivity, + const int blur_steps) { SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = static_cast<float *>(MEM_malloc_arrayN(totvert, sizeof(float), __func__)); + float *dists = static_cast<float *>(MEM_calloc_arrayN(totvert, sizeof(float), __func__)); float *edge_factor = static_cast<float *>(MEM_callocN(sizeof(float) * totvert, __func__)); for (int i = 0; i < totvert; i++) { edge_factor[i] = 1.0f; @@ -540,7 +541,7 @@ static float *sculpt_expand_normal_falloff_create(Sculpt *sd, SCULPT_floodfill_execute(ss, &flood, mask_expand_normal_floodfill_cb, &fdata); SCULPT_floodfill_free(&flood); - for (int repeat = 0; repeat < 2; repeat++) { + for (int repeat = 0; repeat < blur_steps; repeat++) { for (int i = 0; i < totvert; i++) { PBVHVertRef vertex = BKE_pbvh_index_to_vertex(ss->pbvh, i); @@ -550,10 +551,17 @@ static float *sculpt_expand_normal_falloff_create(Sculpt *sd, avg += dists[ni.index]; } SCULPT_VERTEX_NEIGHBORS_ITER_END(ni); - dists[i] = avg / ni.size; + + if (ni.size > 0.0f) { + dists[i] = avg / ni.size; + } } } + for (int i = 0; i < totvert; i++) { + dists[i] = 1.0 - dists[i]; + } + MEM_SAFE_FREE(edge_factor); return dists; @@ -1049,7 +1057,11 @@ static void sculpt_expand_falloff_factors_from_vertex_and_symm_create( break; case SCULPT_EXPAND_FALLOFF_NORMALS: expand_cache->vert_falloff = sculpt_expand_normal_falloff_create( - sd, ob, v, SCULPT_EXPAND_NORMALS_FALLOFF_EDGE_SENSITIVITY); + sd, + ob, + v, + SCULPT_EXPAND_NORMALS_FALLOFF_EDGE_SENSITIVITY, + expand_cache->normal_falloff_blur_steps); break; case SCULPT_EXPAND_FALLOFF_SPHERICAL: expand_cache->vert_falloff = sculpt_expand_spherical_falloff_create(ob, v); @@ -2066,6 +2078,7 @@ static void sculpt_expand_cache_initial_config_set(bContext *C, ExpandCache *expand_cache) { /* RNA properties. */ + expand_cache->normal_falloff_blur_steps = RNA_int_get(op->ptr, "normal_falloff_smooth"); expand_cache->invert = RNA_boolean_get(op->ptr, "invert"); expand_cache->preserve = RNA_boolean_get(op->ptr, "use_mask_preserve"); expand_cache->auto_mask = RNA_boolean_get(op->ptr, "use_auto_mask"); @@ -2415,4 +2428,13 @@ void SCULPT_OT_expand(wmOperatorType *ot) false, "Auto Create", "Fill in mask if nothing is already masked"); + ot->prop = RNA_def_int(ot->srna, + "normal_falloff_smooth", + 2, + 0, + 10, + "Normal Smooth", + "Blurring steps for normal falloff", + 0, + 10); } diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h index 64529525099..154e9a7decc 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.h +++ b/source/blender/editors/sculpt_paint/sculpt_intern.h @@ -822,6 +822,7 @@ typedef struct ExpandCache { float (*original_colors)[4]; bool check_islands; + int normal_falloff_blur_steps; } ExpandCache; /** \} */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs