[Bf-blender-cvs] [094ffcf669d] sculpt-dev: Sculpt IPMask: Implement some other filterts (hard/soft)
Pablo Dobarro
noreply at git.blender.org
Fri Feb 26 14:59:02 CET 2021
Commit: 094ffcf669d6bace2d396623c1520734e5192029
Author: Pablo Dobarro
Date: Fri Feb 26 02:47:49 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB094ffcf669d6bace2d396623c1520734e5192029
Sculpt IPMask: Implement some other filterts (hard/soft)
===================================================================
M source/blender/editors/sculpt_paint/sculpt_filter_mask.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
index cb0fcf40e99..40f5e4e6cec 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
@@ -321,14 +321,15 @@ void SCULPT_OT_mask_filter(struct wmOperatorType *ot)
/* Interactive Preview Mask Filter */
#define SCULPT_IPMASK_FILTER_MIN_MULTITHREAD 1000
-#define SCULPT_IPMASK_FILTER_GRANULARITY 1000
+#define SCULPT_IPMASK_FILTER_GRANULARITY 100
typedef enum eSculptIPMaskFilterType {
IPMASK_FILTER_SMOOTH_SHARPEN,
IPMASK_FILTER_GROW_SHRINK,
- IPMASK_FILTER_CONTRAST_INCREASE_DECREASE,
- IPMASK_FILTER_INTENSITY_INCREASE_DECREASE,
- IPMASK_FILTER_LINEAR_INTENSITY_INCREASE_DECREASE,
+ IPMASK_FILTER_HARDER_SOFTER,
+ IPMASK_FILTER_CONTRAST,
+ IPMASK_FILTER_ADD_SUBSTRACT,
+ IPMASK_FILTER_INVERT,
} eSculptIPMaskFilterType;
static EnumPropertyItem prop_ipmask_filter_types[] = {
@@ -338,6 +339,10 @@ static EnumPropertyItem prop_ipmask_filter_types[] = {
"Smooth/Sharpen",
"Smooth and sharpen the mask"},
{IPMASK_FILTER_GROW_SHRINK, "GROW_SHRINK", 0, "Grow/Shrink", "Grow and shirnk the mask"},
+ {IPMASK_FILTER_HARDER_SOFTER, "HARDER_SOFTER", 0, "Harder/Softer", "Makes the entire mask harder or softer"},
+ {IPMASK_FILTER_ADD_SUBSTRACT, "ADD_SUBSTRACT", 0, "Add/Substract", "Adds or substract a value to the mask"},
+ {IPMASK_FILTER_CONTRAST, "CONTRAST", 0, "Contrast", "Increases or decreases the contrast of the mask"},
+ {IPMASK_FILTER_INVERT, "INVERT", 0, "Invert", "Inverts the mask"},
{0, NULL, 0, NULL, NULL},
};
@@ -420,6 +425,20 @@ static float sculpt_ipmask_vertex_sharpen_cb(SculptSession *ss,
return clamp_f(new_mask, 0.0f, 1.0f);
}
+/* Harder/Softer callbacks. */
+#define SCULPT_IPMASK_FILTER_HARDER_SOFTER_STEP 0.01f
+static float sculpt_ipmask_vertex_harder_cb(SculptSession *UNUSED(ss), const int vertex, float *current_mask)
+{
+ return clamp_f(current_mask[vertex] += current_mask[vertex] * SCULPT_IPMASK_FILTER_HARDER_SOFTER_STEP, 0.0f, 1.0f);
+}
+
+static float sculpt_ipmask_vertex_softer_cb(SculptSession *UNUSED(ss),
+ const int vertex,
+ float *current_mask)
+{
+ return clamp_f(current_mask[vertex] -= current_mask[vertex] * SCULPT_IPMASK_FILTER_HARDER_SOFTER_STEP, 0.0f, 1.0f);
+}
+
static MaskFilterDeltaStep *sculpt_ipmask_filter_delta_create(const float *current_mask,
const float *next_mask,
const int totvert)
@@ -489,6 +508,7 @@ static float *sculpt_ipmask_step_compute(SculptSession *ss,
TaskParallelSettings settings;
memset(&settings, 0, sizeof(TaskParallelSettings));
settings.use_threading = totvert > SCULPT_IPMASK_FILTER_MIN_MULTITHREAD;
+ settings.min_iter_per_thread = SCULPT_IPMASK_FILTER_GRANULARITY;
BLI_task_parallel_range(0, totvert, &data, ipmask_filter_compute_step_task_cb, &settings);
return next_mask;
@@ -725,6 +745,10 @@ static int sculpt_ipmask_filter_invoke(bContext *C, wmOperator *op, const wmEven
filter_cache->mask_filter_step_forward = sculpt_ipmask_vertex_grow_cb;
filter_cache->mask_filter_step_backward = sculpt_ipmask_vertex_shrink_cb;
break;
+ case IPMASK_FILTER_HARDER_SOFTER:
+ filter_cache->mask_filter_step_forward = sculpt_ipmask_vertex_harder_cb;
+ filter_cache->mask_filter_step_backward = sculpt_ipmask_vertex_softer_cb;
+ break;
}
WM_event_add_modal_handler(C, op);
More information about the Bf-blender-cvs
mailing list