[Bf-blender-cvs] [4624153af92] temp-sculpt-cavity-mask: temp-sculpt-cavity-mask: Implement patch requests

Joseph Eagar noreply at git.blender.org
Tue Aug 9 01:27:05 CEST 2022


Commit: 4624153af92301907bff3075b4ea67f9a3be4c32
Author: Joseph Eagar
Date:   Mon Aug 8 16:14:55 2022 -0700
Branches: temp-sculpt-cavity-mask
https://developer.blender.org/rB4624153af92301907bff3075b4ea67f9a3be4c32

temp-sculpt-cavity-mask: Implement patch requests

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/BKE_paint.h
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/scene.cc
M	source/blender/editors/sculpt_paint/sculpt_automasking.cc
M	source/blender/editors/sculpt_paint/sculpt_filter_mask.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/editors/sculpt_paint/sculpt_ops.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_sculpt_paint.c
M	tests/python/bl_run_operators.py

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 807fb94d3ef..7d3e927d09d 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3280,10 +3280,9 @@ class VIEW3D_MT_mask(Menu):
 
         layout.separator()
 
-        props = layout.operator("sculpt.bake_automask", text="Mask From Cavity")
+        props = layout.operator("sculpt.bake_cavity", text="Mask From Cavity")
 
         props.use_scene_settings = False
-        props.use_automasking_cavity = True
 
         layout.separator()
 
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 4946410f3c0..cd66638a62a 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1029,9 +1029,10 @@ class VIEW3D_PT_sculpt_automask_bake(Panel, View3DPaintPanel):
         tool_settings = context.tool_settings
         sculpt = tool_settings.sculpt
 
-        layout.prop(WindowManager.operator_properties_last("sculpt.bake_automask"), "mix_mode")
-        layout.prop(WindowManager.operator_properties_last("sculpt.bake_automask"), "factor")
-        props = layout.operator("sculpt.bake_automask")
+        layout.prop(WindowManager.operator_properties_last("sculpt.bake_cavity"), "mix_mode")
+        layout.prop(WindowManager.operator_properties_last("sculpt.bake_cavity"), "factor")
+        props = layout.operator("sculpt.bake_cavity")
+        props.use_scene_settings = True
 
 # TODO, move to space_view3d.py
 class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 33a39adc536..cbbd5226cf2 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -780,7 +780,7 @@ bool BKE_paint_canvas_image_get(struct PaintModeSettings *settings,
                                 struct ImageUser **r_image_user);
 int BKE_paint_canvas_uvmap_layer_index_get(const struct PaintModeSettings *settings,
                                            struct Object *ob);
-void BKE_sculpt_init_cavity_curve(struct Sculpt *sd);
+void BKE_sculpt_check_cavity_curves(struct Sculpt *sd);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index c8457b5c267..367fd5b7eff 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -2015,8 +2015,8 @@ void BKE_sculpt_toolsettings_data_ensure(struct Scene *scene)
   if (!sd->paint.tile_offset[2]) {
     sd->paint.tile_offset[2] = 1.0f;
   }
-  if (!sd->automasking_cavity_curve) {
-    BKE_sculpt_init_cavity_curve(sd);
+  if (!sd->automasking_cavity_curve || !sd->automasking_cavity_curve_op) {
+    BKE_sculpt_check_cavity_curves(sd);
   }
 }
 
diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc
index 4385ba071a8..a2bd072c41e 100644
--- a/source/blender/blenkernel/intern/scene.cc
+++ b/source/blender/blenkernel/intern/scene.cc
@@ -114,17 +114,30 @@
 
 #include "bmesh.h"
 
-void BKE_sculpt_init_cavity_curve(Sculpt *sd)
+static CurveMapping *sculpt_init_cavity_curves()
 
 {
-  CurveMapping *cumap = sd->automasking_cavity_curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
+  CurveMapping *cumap = 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(sd->automasking_cavity_curve);
+  BKE_curvemapping_init(cumap);
+
+  return cumap;
+}
+
+void BKE_sculpt_check_cavity_curves(Sculpt *sd)
+{
+  if (!sd->automasking_cavity_curve) {
+    sd->automasking_cavity_curve = sculpt_init_cavity_curves();
+  }
+
+  if (!sd->automasking_cavity_curve_op) {
+    sd->automasking_cavity_curve_op = sculpt_init_cavity_curves();
+  }
 }
 
 static void scene_init_data(ID *id)
@@ -954,6 +967,9 @@ static void scene_blend_write(BlendWriter *writer, ID *id, const void *id_addres
     if (tos->sculpt->automasking_cavity_curve) {
       BKE_curvemapping_blend_write(writer, tos->sculpt->automasking_cavity_curve);
     }
+    if (tos->sculpt->automasking_cavity_curve_op) {
+      BKE_curvemapping_blend_write(writer, tos->sculpt->automasking_cavity_curve_op);
+    }
 
     BKE_paint_blend_write(writer, &tos->sculpt->paint);
   }
@@ -1170,14 +1186,20 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id)
 
     if (sce->toolsettings->sculpt) {
       BLO_read_data_address(reader, &sce->toolsettings->sculpt->automasking_cavity_curve);
+      BLO_read_data_address(reader, &sce->toolsettings->sculpt->automasking_cavity_curve_op);
 
       if (sce->toolsettings->sculpt->automasking_cavity_curve) {
         BKE_curvemapping_blend_read(reader, sce->toolsettings->sculpt->automasking_cavity_curve);
         BKE_curvemapping_init(sce->toolsettings->sculpt->automasking_cavity_curve);
       }
-      else {
-        BKE_sculpt_init_cavity_curve(sce->toolsettings->sculpt);
+
+      if (sce->toolsettings->sculpt->automasking_cavity_curve_op) {
+        BKE_curvemapping_blend_read(reader,
+                                    sce->toolsettings->sculpt->automasking_cavity_curve_op);
+        BKE_curvemapping_init(sce->toolsettings->sculpt->automasking_cavity_curve_op);
       }
+
+      BKE_sculpt_check_cavity_curves(sce->toolsettings->sculpt);
     }
 
     /* Relink grease pencil interpolation curves. */
@@ -1773,6 +1795,12 @@ ToolSettings *BKE_toolsettings_copy(ToolSettings *toolsettings, const int flag)
           ts->sculpt->automasking_cavity_curve);
       BKE_curvemapping_init(ts->sculpt->automasking_cavity_curve);
     }
+
+    if (ts->sculpt->automasking_cavity_curve_op) {
+      ts->sculpt->automasking_cavity_curve_op = BKE_curvemapping_copy(
+          ts->sculpt->automasking_cavity_curve_op);
+      BKE_curvemapping_init(ts->sculpt->automasking_cavity_curve_op);
+    }
   }
   if (ts->uvsculpt) {
     ts->uvsculpt = static_cast<UvSculpt *>(MEM_dupallocN(ts->uvsculpt));
@@ -1833,6 +1861,9 @@ void BKE_toolsettings_free(ToolSettings *toolsettings)
     if (toolsettings->sculpt->automasking_cavity_curve) {
       BKE_curvemapping_free(toolsettings->sculpt->automasking_cavity_curve);
     }
+    if (toolsettings->sculpt->automasking_cavity_curve_op) {
+      BKE_curvemapping_free(toolsettings->sculpt->automasking_cavity_curve_op);
+    }
 
     BKE_paint_free(&toolsettings->sculpt->paint);
     MEM_freeN(toolsettings->sculpt);
diff --git a/source/blender/editors/sculpt_paint/sculpt_automasking.cc b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
index 17105c610c0..2142f767531 100644
--- a/source/blender/editors/sculpt_paint/sculpt_automasking.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
@@ -367,6 +367,10 @@ static float sculpt_automasking_cavity_factor(AutomaskingCache *automasking,
   float factor = ss->cavity[index].factor;
 
   if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_USE_CURVE) {
+    if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_INVERTED) {
+      factor = 1.0f - factor;
+    }
+
     factor = BKE_curvemapping_evaluateF(automasking->settings.cavity_curve, 0, factor);
 
     if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_INVERTED) {
diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
index fa4fe191273..95035296de1 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
@@ -298,173 +298,3 @@ void SCULPT_OT_mask_filter(struct wmOperatorType *ot)
       "Auto Iteration Count",
       "Use a automatic number of iterations based on the number of vertices of the sculpt");
 }
-
-static float neighbor_dirty_mask(SculptSession *ss, PBVHVertexIter *vd)
-{
-  int total = 0;
-  float avg[3];
-  zero_v3(avg);
-
-  SculptVertexNeighborIter ni;
-  SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN (ss, vd->vertex, ni) {
-    float normalized[3];
-    sub_v3_v3v3(normalized, SCULPT_vertex_co_get(ss, ni.vertex), vd->co);
-    normalize_v3(normalized);
-    add_v3_v3(avg, normalized);
-    total++;
-  }
-  SCULPT_VERTEX_NEIGHBORS_ITER_END(ni);
-
-  if (total > 0) {
-    mul_v3_fl(avg, 1.0f / total);
-    float dot = dot_v3v3(avg, vd->no ? vd->no : vd->fno);
-    float angle = max_ff(saacosf(dot), 0.0f);
-    return angle;
-  }
-  return 0.0f;
-}
-
-typedef struct DirtyMaskRangeData {
-  float min, max;
-} DirtyMaskRangeData;
-
-static void dirty_mask_compute_range_task_cb(void *__restrict userdata,
-                                             const int i,
-                                             const TaskParallelTLS *__restrict tls)
-{
-  SculptThreadedTaskData *data = userdata;
-  SculptSession *ss = data->ob->sculpt;
-  PBVHNode *node = data->nodes[i];
-  DirtyMaskRangeData *range = tls->userdata_chunk;
-  PBVHVertexIter vd;
-
-  BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
-    float dirty_mask = neighbor_dirty_mask(ss, &vd);
-    range->min = min_ff(dirty_mask, range->min);
-    range->max = max_ff(dirty_mask, range->max);
-  }
-  BKE_pbvh_vertex_iter_end;
-}
-
-static void dirty_mask_compute_range_reduce(const void *__restrict UNUSED(userdata),
-                                            void *__restrict chunk_join,
-                                            void *__restrict chunk)
-{
-  DirtyMaskRangeData *join = chunk_join;
-  DirtyMaskRangeData *range = chunk;
-  join->min = min_ff(range->min, join->min);
-  join->max = max_ff(range->max, join->max);
-}
-
-static void dirty_mask_apply_task_cb(void *__restrict userdata,
-                                     const int i,
-                                     const TaskParallelTLS *__restrict UNUSED(tls))
-{
-  SculptThreadedTaskData *data = userdata;
-  SculptSession *ss = data->ob->sculpt;
-  PBVHNode *node = data->nodes[i];
-  PBVHVertexIter vd;
-
-  const bool dirty_only

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list