[Bf-blender-cvs] [c0b0e4cd16e] sculpt-dev: Sculpt: Clay brush speedups

Joseph Eagar noreply at git.blender.org
Wed Sep 29 10:14:51 CEST 2021


Commit: c0b0e4cd16ed41c4fd6aa356befe14e0e80bfc9d
Author: Joseph Eagar
Date:   Wed Sep 29 00:15:21 2021 -0700
Branches: sculpt-dev
https://developer.blender.org/rBc0b0e4cd16ed41c4fd6aa356befe14e0e80bfc9d

Sculpt: Clay brush speedups

* Made clay brush use a spacing
  of 7 for autosmooth instead of
  the brush default (which is 3).

* Also fixed a few small UI issues

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

M	release/scripts/startup/bl_ui/properties_paint_common.py
M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenkernel/intern/brush_channel_define.h
M	source/blender/blenkernel/intern/brush_engine.c
M	source/blender/blenkernel/intern/brush_engine_presets.c
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/makesrna/intern/rna_brush_engine.c

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

diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index d6c2c7cff3c..a9811941f38 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -358,6 +358,8 @@ class UnifiedPaintPanel:
                     row2.label(text=name)
                     row2.prop(mp0, "inherit", text="", icon="BRUSHES_ALL")
                     row2.prop(mp, "enabled", text="", icon="STYLUS_PRESSURE")
+                    row2.prop(mp, "invert", text="", icon="ARROW_LEFTRIGHT")
+
                     row2.prop(mp0, "ui_expanded", text="", icon="TRIA_DOWN" if mp.ui_expanded else "TRIA_RIGHT")
 
                     if mp0.ui_expanded:
@@ -878,9 +880,18 @@ def brush_settings(layout, context, brush, popover=False):
 
         row = layout.row(align=True)
 
-        row.prop(brush, "hardness", slider=True)
-        row.prop(brush, "invert_hardness_pressure", text="")
-        row.prop(brush, "use_hardness_pressure", text="")
+        UnifiedPaintPanel.prop_unified(
+            layout,
+            context,
+            brush,
+            "hardness",
+            slider=True,
+            pressure_name = "use_hardness_pressure"
+        )
+
+        #row.prop(brush, "hardness", slider=True)
+        #row.prop(brush, "invert_hardness_pressure", text="")
+        #row.prop(brush, "use_hardness_pressure", text="")
 
         # auto_smooth_factor and use_inverse_smooth_pressure
         if capabilities.has_auto_smooth:
@@ -913,12 +924,12 @@ def brush_settings(layout, context, brush, popover=False):
                     text="Custom Spacing"
                 )
                     
-                if brush.use_custom_auto_smooth_spacing:
-                    UnifiedPaintPanel.prop_unified(
+                if brush.channels["autosmooth_use_spacing"].bool_value:
+                    UnifiedPaintPanel.channel_unified(
                         box,
                         context,
                         brush,
-                        "auto_smooth_spacing",
+                        "autosmooth_spacing",
                         slider=True,
                         text="Spacing"
                     )
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index b3ee2f411d7..1f25106404a 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -39,7 +39,7 @@ extern "C" {
 
 /* Blender file format version. */
 #define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 24
+#define BLENDER_FILE_SUBVERSION 25
 
 /* Minimum Blender version that supports reading file written with the current
  * version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenkernel/intern/brush_channel_define.h b/source/blender/blenkernel/intern/brush_channel_define.h
index effdcb957b5..b20e7eef182 100644
--- a/source/blender/blenkernel/intern/brush_channel_define.h
+++ b/source/blender/blenkernel/intern/brush_channel_define.h
@@ -133,8 +133,8 @@ places in rna_engine_codebase are relevent:
   MAKE_FLOAT(boundary_smooth, "Boundary Smooth", "Smooth hard boundaries", 0.0f, 0.0f, 1.0f)
   MAKE_BOOL(topology_rake_use_spacing, "Use Rake Spacing", "Use custom spacing for topology rake", false)
   MAKE_BOOL(autosmooth_use_spacing, "Use Auto-Smooth Spacing", "Use custom spacing for autosmooth", false)
-  MAKE_FLOAT_EX(topology_rake_spacing, "Rake Spacing", "Topology rake stroke spacing", 13.0f, 0.05f, 1000.0f, 0.1f, 300.0f, false)
-  MAKE_FLOAT_EX(autosmooth_spacing, "Auto-Smooth Spacing", "Autosmooth stroke spacing", 13.0f, 0.05f, 1000.0f, 0.1f, 300.0f, false)
+  MAKE_FLOAT_EX(topology_rake_spacing, "Rake Spacing", "Topology rake stroke spacing", 13.0f, 0.05f, 1000.0f, 0.5f, 150.0f, false)
+  MAKE_FLOAT_EX(autosmooth_spacing, "Auto-Smooth Spacing", "Autosmooth stroke spacing", 13.0f, 0.05f, 1000.0f, 0.5f, 150.0f, false)
   MAKE_ENUM(topology_rake_mode, "Topology Rake Mode", "", 1, {
       {0, "BRUSH_DIRECTION", ICON_NONE, "Stroke", "Stroke Direction"},
       {1, "CURVATURE", ICON_NONE, "Curvature", "Follow mesh curvature"},
diff --git a/source/blender/blenkernel/intern/brush_engine.c b/source/blender/blenkernel/intern/brush_engine.c
index 3e4974b3427..992e29ea4ce 100644
--- a/source/blender/blenkernel/intern/brush_engine.c
+++ b/source/blender/blenkernel/intern/brush_engine.c
@@ -154,7 +154,7 @@ static bool check_corrupted_curve(BrushMapping *dst)
       BKE_curvemap_reset(curve->cm + i,
                          &(struct rctf){.xmin = 0, .ymin = 0.0, .xmax = 1.0, .ymax = 1.0},
                          CURVE_PRESET_LINE,
-                         dst->flag & BRUSH_MAPPING_INVERT);
+                         1);
       BKE_curvemapping_init(dst->curve);
     }
 
@@ -817,27 +817,27 @@ void BKE_brush_resolve_channels(Brush *brush, Sculpt *sd)
   BKE_brush_channelset_merge(brush->channels_final, brush->channels, sd->channels);
 }
 
-int BKE_brush_channelset_get_int(BrushChannelSet *chset,
-                                 const char *idname,
-                                 BrushMappingData *mapdata)
+static bool channel_has_mappings(BrushChannel *ch)
 {
-  BrushChannel *ch = BKE_brush_channelset_lookup(chset, idname);
-
-  if (!ch) {
-    printf("%s, unknown channel %s", __func__, idname);
-    return 0;
+  for (int i = 0; i < BRUSH_MAPPING_MAX; i++) {
+    if (ch->mappings[i].flag & BRUSH_MAPPING_ENABLED) {
+      return true;
+    }
   }
 
-  return BKE_brush_channel_get_int(ch, mapdata);
+  return false;
 }
 
-float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata)
+// idx is used by vector channels
+static double eval_channel_mappings(BrushChannel *ch, BrushMappingData *mapdata, double f, int idx)
 {
 
-  float f = (float)ch->ivalue;
+  if (idx == 3 && !(ch->flag & BRUSH_CHANNEL_APPLY_MAPPING_TO_ALPHA)) {
+    return f;
+  }
 
   if (mapdata) {
-    float factor = 1.0f;
+    double factor = 1.0f;
 
     for (int i = 0; i < BRUSH_MAPPING_MAX; i++) {
       BrushMapping *mp = ch->mappings + i;
@@ -846,7 +846,12 @@ float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata)
         continue;
       }
 
-      float f2 = BKE_curvemapping_evaluateF(mp->curve, 0, f);
+      float inputf = ((float *)mapdata)[i];
+      if (mp->flag & BRUSH_MAPPING_INVERT) {
+        inputf = 1.0 - inputf;
+      }
+
+      double f2 = (float)BKE_curvemapping_evaluateF(mp->curve, 0, inputf);
 
       switch (mp->blendmode) {
         case MA_RAMP_BLEND:
@@ -879,7 +884,32 @@ float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata)
     f *= factor;
   }
 
-  return (int)f;
+  return f;
+}
+
+int BKE_brush_channelset_get_int(BrushChannelSet *chset,
+                                 const char *idname,
+                                 BrushMappingData *mapdata)
+{
+  BrushChannel *ch = BKE_brush_channelset_lookup(chset, idname);
+
+  if (!ch) {
+    printf("%s, unknown channel %s", __func__, idname);
+    return 0;
+  }
+
+  return BKE_brush_channel_get_int(ch, mapdata);
+}
+
+float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata)
+{
+
+  if (channel_has_mappings(ch)) {
+    return (int)eval_channel_mappings(ch, mapdata, (double)ch->ivalue, 0);
+  }
+  else {
+    return ch->ivalue;
+  }
 }
 
 void BKE_brush_channel_set_int(BrushChannel *ch, int val)
@@ -1007,56 +1037,9 @@ float BKE_brush_channelset_get_float(BrushChannelSet *chset,
 
 float BKE_brush_channel_get_float(BrushChannel *ch, BrushMappingData *mapdata)
 {
-
-  float f = ch->fvalue;
-
-  if (mapdata) {
-    float factor = 1.0f;
-
-    for (int i = 0; i < BRUSH_MAPPING_MAX; i++) {
-      BrushMapping *mp = ch->mappings + i;
-
-      if (!(mp->flag & BRUSH_MAPPING_ENABLED)) {
-        continue;
-      }
-
-      float inputf = ((float *)mapdata)[i];
-
-      float f2 = BKE_curvemapping_evaluateF(mp->curve, 0, inputf);
-
-      switch (mp->blendmode) {
-        case MA_RAMP_BLEND:
-          break;
-        case MA_RAMP_MULT:
-          f2 *= factor;
-          break;
-        case MA_RAMP_DIV:
-          f2 = factor / (0.00001f + f2);
-          break;
-        case MA_RAMP_ADD:
-          f2 += factor;
-          break;
-        case MA_RAMP_SUB:
-          f2 = factor - f2;
-          break;
-        case MA_RAMP_DIFF:
-          f2 = fabsf(factor - f2);
-          break;
-        default:
-          printf("Unsupported brush mapping blend mode for %s (%s); will mix instead\n",
-                 ch->name,
-                 ch->idname);
-          break;
-      }
-
-      factor += (f2 - factor) * mp->factor;
-    }
-
-    f *= factor;
-  }
-
-  return f;
+  return (float)eval_channel_mappings(ch, mapdata, (double)ch->fvalue, 0);
 }
+
 void BKE_brush_channel_set_vector(BrushChannel *ch, float vec[4])
 {
   if (ch->type == BRUSH_CHANNEL_VEC4) {
@@ -1086,65 +1069,8 @@ int BKE_brush_channel_get_vector(BrushChannel *ch, float out[4], BrushMappingDat
     size = 4;
   }
 
-  if (mapdata) {
-    float factor = 1.0f;
-
-    for (int i = 0; i < BRUSH_MAPPING_MAX; i++) {
-      BrushMapping *mp = ch->mappings + i;
-
-      if (!(mp->flag & BRUSH_MAPPING_ENABLED)) {
-        continue;
-      }
-
-      float inputf = ((float *)mapdata)[i];
-
-      float f2 = BKE_curvemapping_evaluateF(mp->curve, 0, inputf);
-
-      switch (mp->blendmode) {
-        case MA_RAMP_BLEND:
-          break;
-        case MA_RAMP_MULT:
-          f2 *= inputf * f2;
-          break;
-        case MA_RAMP_DIV:
-          f2 = inputf / (0.00001f + inputf);
-          break;
-        case MA_RAMP_ADD:
-          f2 += inputf;
-          break;
-        case MA_RAMP_SUB:
-          f2 = inputf - f2;
-          break;
-        case MA_RAMP_DIFF:
-          f2 = fabsf(inputf - f2);
-          break;
-        default:
-          printf("Unsupported brush mapping blend mode for %s (%s); will mix instead\n",
-                 ch->name,
-                 ch->idname);
-          break;
-      }
-
-      factor += (f2 - factor) * mp->factor;
-    }
-
-    if (size == 3) {
-      copy_v3_v3(out, ch->vec

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list