[Bf-blender-cvs] [527ad665afe] temp-sculpt-cavity-mask: temp-sculpt-cavity-mask: Add custom curve support

Joseph Eagar noreply at git.blender.org
Wed Jun 8 12:10:48 CEST 2022


Commit: 527ad665afecdfe576839166f41c9a52662d1ef7
Author: Joseph Eagar
Date:   Wed Jun 8 03:08:15 2022 -0700
Branches: temp-sculpt-cavity-mask
https://developer.blender.org/rB527ad665afecdfe576839166f41c9a52662d1ef7

temp-sculpt-cavity-mask: Add custom curve support

You can now use a custom curve for cavity masking.

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	release/scripts/startup/bl_ui/properties_paint_common.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/intern/brush.c
M	source/blender/editors/sculpt_paint/sculpt_automasking.cc
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/makesdna/DNA_brush_enums.h
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesrna/intern/rna_brush.c
M	source/blender/makesrna/intern/rna_sculpt_paint.c

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 71e0f87dd1b..915744ad8e2 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 71e0f87dd1ba4e0ed5f619b031045a428e534230
+Subproject commit 915744ad8e255d1723d77671a6c6b074773c2199
diff --git a/release/scripts/addons b/release/scripts/addons
index 6a318b22d14..d990559d7b1 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 6a318b22d143f675ad489171a2b9aa56d9a6c1b6
+Subproject commit d990559d7b19593cbaff17ba59b8dd9d0d60e615
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 9406de5f312..95107484d07 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 9406de5f31254c0c608ba8785fd3dcad12dcd7c4
+Subproject commit 95107484d076bc965239942e857c83433bfa86d7
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index 2ed0f33753b..437bcca63bd 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -952,6 +952,10 @@ def brush_settings_advanced(layout, context, brush, popover=False):
             col.prop(brush, "invert_automasking_cavity", text="Invert Cavity")
             col.prop(brush, "automasking_cavity_factor", text="Cavity Factor")
             col.prop(brush, "automasking_cavity_blur_steps", text="Cavity Blur")
+            col.prop(brush, "use_automasking_custom_cavity_curve", text="Use Curve")
+
+            if brush.use_automasking_custom_cavity_curve:
+                col.template_curve_mapping(brush, "automasking_cavity_curve")
 
         col.prop(brush, "automasking_boundary_edges_propagation_steps")
 
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index c3c7685cd7a..1473fa57ad8 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -978,6 +978,11 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
         if sculpt.use_automasking_cavity:
             col.prop(sculpt, "invert_automasking_cavity", text="Invert Cavity")
             col.prop(sculpt.brush, "automasking_cavity_factor", text="Cavity Factor")
+            col.prop(sculpt.brush, "automasking_cavity_blur_steps", text="Cavity Blur")
+            col.prop(sculpt.brush, "use_automasking_custom_cavity_curve", text="Use Curve")
+
+            if sculpt.brush.use_automasking_custom_cavity_curve:
+                col.template_curve_mapping(sculpt.brush, "automasking_cavity_curve")
 
         col.prop(sculpt.brush, "automasking_boundary_edges_propagation_steps")
 
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index a514646b1f3..ee29eaf6dec 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -42,6 +42,19 @@
 
 #include "BLO_read_write.h"
 
+static void brush_sculpt_add_cavity_curve(Brush *br)
+
+{
+  CurveMapping *cumap = br->automasking_cavity_curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
+
+  cumap->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
+  cumap->preset = CURVE_PRESET_LINE;
+
+  BKE_curvemap_reset(cumap->cm, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
+  BKE_curvemapping_changed(cumap, false);
+  BKE_curvemapping_init(br->automasking_cavity_curve);
+}
+
 static void brush_init_data(ID *id)
 {
   Brush *brush = (Brush *)id;
@@ -72,6 +85,12 @@ static void brush_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, c
   }
 
   brush_dst->curve = BKE_curvemapping_copy(brush_src->curve);
+
+  if (brush_src->automasking_cavity_curve) {
+    brush_dst->automasking_cavity_curve = BKE_curvemapping_copy(
+        brush_src->automasking_cavity_curve);
+  }
+
   if (brush_src->gpencil_settings != NULL) {
     brush_dst->gpencil_settings = MEM_dupallocN(brush_src->gpencil_settings);
     brush_dst->gpencil_settings->curve_sensitivity = BKE_curvemapping_copy(
@@ -110,6 +129,10 @@ static void brush_free_data(ID *id)
   }
   BKE_curvemapping_free(brush->curve);
 
+  if (brush->automasking_cavity_curve) {
+    BKE_curvemapping_free(brush->curve);
+  }
+
   if (brush->gpencil_settings != NULL) {
     BKE_curvemapping_free(brush->gpencil_settings->curve_sensitivity);
     BKE_curvemapping_free(brush->gpencil_settings->curve_strength);
@@ -211,6 +234,10 @@ static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_addres
     BKE_curvemapping_blend_write(writer, brush->curve);
   }
 
+  if (brush->automasking_cavity_curve) {
+    BKE_curvemapping_blend_write(writer, brush->automasking_cavity_curve);
+  }
+
   if (brush->gpencil_settings) {
     BLO_write_struct(writer, BrushGpencilSettings, brush->gpencil_settings);
 
@@ -321,6 +348,16 @@ static void brush_blend_read_data(BlendDataReader *reader, ID *id)
 
   brush->preview = NULL;
   brush->icon_imbuf = NULL;
+
+  BLO_read_data_address(reader, &brush->automasking_cavity_curve);
+
+  if (brush->automasking_cavity_curve) {
+    BKE_curvemapping_blend_read(reader, brush->automasking_cavity_curve);
+    BKE_curvemapping_init(brush->automasking_cavity_curve);
+  }
+  else if (brush->sculpt_tool) {
+    brush_sculpt_add_cavity_curve(brush);
+  }
 }
 
 static void brush_blend_read_lib(BlendLibReader *reader, ID *id)
@@ -1941,6 +1978,12 @@ void BKE_brush_sculpt_reset(Brush *br)
     default:
       break;
   }
+
+  if (br->automasking_cavity_curve) {
+    BKE_curvemapping_free(br->automasking_cavity_curve);
+  }
+
+  brush_sculpt_add_cavity_curve(br);
 }
 
 void BKE_brush_curve_preset(Brush *b, eCurveMappingPreset preset)
diff --git a/source/blender/editors/sculpt_paint/sculpt_automasking.cc b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
index 28ba6bc9ca5..7e9cc7897dc 100644
--- a/source/blender/editors/sculpt_paint/sculpt_automasking.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
@@ -21,6 +21,7 @@
 #include "DNA_meshdata_types.h"
 
 #include "BKE_brush.h"
+#include "BKE_colortools.h"
 #include "BKE_context.h"
 #include "BKE_mesh.h"
 #include "BKE_mesh_mapping.h"
@@ -303,7 +304,13 @@ ATTR_NO_OPT static float sculpt_automasking_cavity_factor(AutomaskingCache *auto
     sculpt_calc_blurred_cavity(ss, automasking, automasking->settings.cavity_blur_steps, vertex);
   }
 
-  return ss->cavity_factor[vertex];
+  float factor = ss->cavity_factor[vertex];
+
+  if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_USE_CURVE) {
+    factor = BKE_curvemapping_evaluateF(automasking->settings.cavity_curve, 0, factor);
+  }
+
+  return factor;
 }
 
 float SCULPT_automasking_factor_get(AutomaskingCache *automasking, SculptSession *ss, int vert)
@@ -597,6 +604,7 @@ static void SCULPT_automasking_cache_settings_update(AutomaskingCache *automaski
   automasking->settings.initial_face_set = SCULPT_active_face_set_get(ss);
   automasking->settings.cavity_factor = brush->automasking_cavity_factor;
   automasking->settings.cavity_blur_steps = brush->automasking_cavity_blur_steps;
+  automasking->settings.cavity_curve = brush->automasking_cavity_curve;
 }
 
 AutomaskingCache *SCULPT_automasking_cache_init(Sculpt *sd, Brush *brush, Object *ob)
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index 9268ad1366f..1d65c880115 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -396,6 +396,7 @@ typedef struct AutomaskingSettings {
   int initial_face_set;
   float cavity_factor;
   int cavity_blur_steps;
+  struct CurveMapping *cavity_curve;
 } AutomaskingSettings;
 
 typedef struct AutomaskingCache {
diff --git a/source/blender/makesdna/DNA_brush_enums.h b/source/blender/makesdna/DNA_brush_enums.h
index 0132c9b5064..186d086ed6c 100644
--- a/source/blender/makesdna/DNA_brush_enums.h
+++ b/source/blender/makesdna/DNA_brush_enums.h
@@ -320,6 +320,7 @@ typedef enum eAutomasking_flag {
   BRUSH_AUTOMASKING_BOUNDARY_FACE_SETS = (1 << 3),
   BRUSH_AUTOMASKING_CAVITY = (1 << 4),
   BRUSH_AUTOMASKING_CAVITY_INVERT = (1 << 5),
+  BRUSH_AUTOMASKING_CAVITY_USE_CURVE = (1 << 6),
   /* Reserved for future use
   BRUSH_AUTOMASKING_BRUSH_NORMAL = (1 << 6),
   BRUSH_AUTOMASKING_VIEW_NORMAL = (1 << 7),
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 1537bb1c1c5..30991404e92 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -301,6 +301,7 @@ typedef struct Brush {
   /* automasking */
   int automasking_flags;
   int automasking_boundary_edges_propagation_steps;
+  struct CurveMapping *automasking_cavity_curve;
   int automasking_cavity_blur_steps;
 
   float automasking_cavity_factor;
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index f2be6a77beb..9212814e9e1 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -3135,6 +3135,12 @@ static void rna_def_brush(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Invert Cavity Mask", "Invert cavity masking.");
   RNA_def_property_update(prop, 0, "rna_Brush_update");
 
+  prop = RNA_def_property(srna, "use_automasking_custom_cavity_curve", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(
+      prop, NULL, "automasking_flags", BRUSH_AUTOMASKING_CAVITY_USE_CURVE);
+  RNA_def_property_ui_text(prop, "Custom Cavity Curve", "Use custom curve.");
+  RNA_def_property_update(prop, 0, "rna_Brush_update");
+
   prop = RNA_def_property(srna, "automasking_cavity_factor", PROP_FLOAT, PROP_NONE);
   RNA_def_property_float_sdna(prop, NULL, "automasking_cavity_factor");
   RNA_def_property_ui_text(prop, "Cavity Factor", "Cavity mask factor");
@@ -3148,6 +3154,13 @@ static void rna_def_brush(BlenderRNA *brna)
   RNA_def_property_range(prop, 0.0f, 25.0f);
   RNA_def_property_update(prop, 0, "rna_Brush_update");
 
+  prop = RNA_def_property(srna, "automasking_cavity_curve", PROP_POINTER, PROP_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list