[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