[Bf-blender-cvs] [930a9edc1ea] sculpt-dev: Sculpt IPMask: First version of contrast filter
Pablo Dobarro
noreply at git.blender.org
Mon Mar 1 18:01:52 CET 2021
Commit: 930a9edc1eafe934a1ff4950d92a9e643a7a2b7a
Author: Pablo Dobarro
Date: Fri Feb 26 22:03:48 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB930a9edc1eafe934a1ff4950d92a9e643a7a2b7a
Sculpt IPMask: First version of contrast filter
===================================================================
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 338daa341ea..c61e1e65b22 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
@@ -439,6 +439,33 @@ static float sculpt_ipmask_vertex_softer_cb(SculptSession *UNUSED(ss),
return clamp_f(current_mask[vertex] -= current_mask[vertex] * SCULPT_IPMASK_FILTER_HARDER_SOFTER_STEP, 0.0f, 1.0f);
}
+/* Contrast Increase/Decrease callbacks. */
+
+#define SCULPT_IPMASK_FILTER_CONTRAST_STEP 0.01f
+static float sculpt_ipmask_filter_contrast(const float mask, const float contrast) {
+ float offset;
+ float delta = contrast / 2.0f;
+ float gain = 1.0f - delta * 2.0f;
+ if (contrast > 0.0f) {
+ gain = 1.0f / ((gain != 0.0f) ? gain : FLT_EPSILON);
+ offset = gain * (-delta);
+ }
+ else {
+ delta *= -1.0f;
+ offset = gain * (delta);
+ }
+ return clamp_f(gain * mask + offset, 0.0f, 1.0f);
+}
+
+static float sculpt_ipmask_vertex_contrast_increase_cb(SculptSession *UNUSED(ss), const int vertex, float *current_mask) {
+ return sculpt_ipmask_filter_contrast(current_mask[vertex], SCULPT_IPMASK_FILTER_CONTRAST_STEP);
+}
+
+static float sculpt_ipmask_vertex_contrast_decrease_cb(SculptSession *UNUSED(ss), const int vertex, float *current_mask) {
+ return sculpt_ipmask_filter_contrast(current_mask[vertex], -1.0f * SCULPT_IPMASK_FILTER_CONTRAST_STEP);
+}
+
+
static MaskFilterDeltaStep *sculpt_ipmask_filter_delta_create(const float *current_mask,
const float *next_mask,
const int totvert)
@@ -748,6 +775,10 @@ static int sculpt_ipmask_filter_invoke(bContext *C, wmOperator *op, const wmEven
filter_cache->mask_filter_step_forward = sculpt_ipmask_vertex_harder_cb;
filter_cache->mask_filter_step_backward = sculpt_ipmask_vertex_softer_cb;
break;
+ case IPMASK_FILTER_CONTRAST:
+ filter_cache->mask_filter_step_forward = sculpt_ipmask_vertex_contrast_increase_cb;
+ filter_cache->mask_filter_step_backward = sculpt_ipmask_vertex_contrast_decrease_cb;
+ break;
}
WM_event_add_modal_handler(C, op);
More information about the Bf-blender-cvs
mailing list