[Bf-blender-cvs] [21b6d78cd28] temp_bmesh_multires: Sculpt dyntopo: change brush defaults and fix bug

Joseph Eagar noreply at git.blender.org
Thu Sep 2 20:05:39 CEST 2021


Commit: 21b6d78cd282826aeee2d99417e4dc366eae9818
Author: Joseph Eagar
Date:   Thu Sep 2 11:02:44 2021 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rB21b6d78cd282826aeee2d99417e4dc366eae9818

Sculpt dyntopo: change brush defaults and fix bug

* Changed brush defaults a bit.  New defaults
  are for organic modeling.
* autosmooth_fset_slide now defaults to 1, so
  face set boundaries are smoothed but stick to mesh
  surface (if 0 they would function as hard edges).
* Weight by area smooth mode is on by default for all
  brushes.
* Cleaned up versioning code and made it
  kick in at 3.00:21, with some simple checks to
  try and detect existing data from beta testers.

* Also fixed a small crash bug.

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

M	source/blender/blenkernel/intern/brush.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/editors/sculpt_paint/sculpt.c

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

diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index c0c7a5d2aa6..0942cc10994 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -1715,6 +1715,10 @@ void BKE_brush_sculpt_reset(Brush *br)
 
   bool disable_dyntopo = false;
 
+  // basic face set setup for all organic brushes
+  br->autosmooth_fset_slide = 1.0f;
+  br->flag2 |= BRUSH_SMOOTH_PRESERVE_FACE_SETS | BRUSH_SMOOTH_USE_AREA_WEIGHT;
+
   /* Brush settings */
   switch (br->sculpt_tool) {
     case SCULPT_TOOL_DRAW_SHARP:
@@ -2653,7 +2657,7 @@ void BKE_brush_get_dyntopo(Brush *brush, Sculpt *sd, DynTopoSettings *out)
   }
   else if (!out->detail_size) {
     brush->dyntopo.inherit |= DYNTOPO_INHERIT_DETAIL_SIZE;
-    brush->dyntopo.detail_size = 12.0;
+    brush->dyntopo.detail_size = 8.0f;
   }
 
   int inherit = out->inherit;
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 2c3ab2fa561..ea98ab2a5fe 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1943,7 +1943,7 @@ void BKE_sculpt_toolsettings_data_ensure(struct Scene *scene)
 
   Sculpt *sd = scene->toolsettings->sculpt;
   if (!sd->detail_size) {
-    sd->detail_size = 12;
+    sd->detail_size = 8.0f;
   }
 
   if (!sd->detail_range || !sd->dyntopo_spacing) {
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index d6dcefc20ac..5860d60537f 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -1437,16 +1437,6 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
     }
   }
 
-  if (!MAIN_VERSION_ATLEAST(bmain, 293, 0)) {
-    for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
-      if (br->sculpt_tool == SCULPT_TOOL_VCOL_BOUNDARY) {
-        if (br->vcol_boundary_exponent == 0.0f) {
-          br->vcol_boundary_exponent = 1.0f;
-        }
-      }
-    }
-  }
-
   if (!MAIN_VERSION_ATLEAST(bmain, 292, 5)) {
     /* Initialize the opacity of the overlay wireframe */
     if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "wireframe_opacity")) {
@@ -1963,44 +1953,7 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
     }
   }
 
-  if (!MAIN_VERSION_ATLEAST(bmain, 293, 17)) {
-    LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
-      if (brush->dyntopo.detail_range == 0.0f) {
-        Brush defbrush = *brush;
-
-        BKE_brush_sculpt_reset(&defbrush);
-        brush->dyntopo = defbrush.dyntopo;
-      }
-    }
-  }
-
-  if (!MAIN_VERSION_ATLEAST(bmain, 293, 18)) {
-    LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
-      if (brush->sculpt_tool == SCULPT_TOOL_SIMPLIFY) {
-        brush->dyntopo.inherit = DYNTOPO_INHERIT_BITMASK &
-                                 ~(DYNTOPO_INHERIT_ALL | DYNTOPO_SUBDIVIDE | DYNTOPO_COLLAPSE);
-        brush->dyntopo.flag |= DYNTOPO_COLLAPSE | DYNTOPO_SUBDIVIDE | DYNTOPO_CLEANUP;
-      }
-    }
-
-    Scene *scene;
-    for (scene = bmain->scenes.first; scene; scene = scene->id.next) {
-      ToolSettings *ts = scene->toolsettings;
-
-      if (ts->sculpt) {
-        ts->sculpt->flags |= SCULPT_DYNTOPO_CLEANUP;
-      }
-    }
-  }
-
   if (!MAIN_VERSION_ATLEAST(bmain, 293, 14)) {
-    LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-      ToolSettings *ts = scene->toolsettings;
-      if (ts && ts->sculpt) {
-        ts->sculpt->detail_range = 0.4f;
-      }
-    }
-
     if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "diff_fac")) {
       LISTBASE_FOREACH (Light *, light, &bmain->lights) {
         light->diff_fac = 1.0f;
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 13577164f20..29be6fd89e1 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -46,6 +46,7 @@
 #include "BKE_action.h"
 #include "BKE_animsys.h"
 #include "BKE_asset.h"
+#include "BKE_brush.h"
 #include "BKE_collection.h"
 #include "BKE_deform.h"
 #include "BKE_fcurve.h"
@@ -1111,6 +1112,59 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
     }
   }
 
+  if (!MAIN_VERSION_ATLEAST(bmain, 300, 21)) {
+    LISTBASE_FOREACH (Brush *, br, &bmain->brushes) {
+      if (br->autosmooth_fset_slide == 0.0f) {
+        Brush defbrush = *br;
+
+        BKE_brush_sculpt_reset(&defbrush);
+        br->dyntopo = defbrush.dyntopo;
+
+        br->flag2 |= defbrush.flag2 & (BRUSH_SMOOTH_PRESERVE_FACE_SETS |
+                                       BRUSH_SMOOTH_USE_AREA_WEIGHT | BRUSH_CURVATURE_RAKE);
+
+        br->autosmooth_fset_slide = defbrush.autosmooth_fset_slide;
+        br->boundary_smooth_factor = defbrush.boundary_smooth_factor;
+        br->autosmooth_spacing = defbrush.autosmooth_spacing;
+        br->autosmooth_radius_factor = defbrush.autosmooth_radius_factor;
+        br->topology_rake_radius_factor = defbrush.topology_rake_radius_factor;
+        br->topology_rake_projection = defbrush.topology_rake_projection;
+        br->topology_rake_spacing = defbrush.topology_rake_spacing;
+
+        if (br->autosmooth_projection == 0.0f) {
+          br->autosmooth_projection = defbrush.autosmooth_projection;
+        }
+      }
+
+      if (br->sculpt_tool == SCULPT_TOOL_VCOL_BOUNDARY) {
+        if (br->vcol_boundary_exponent == 0.0f) {
+          br->vcol_boundary_exponent = 1.0f;
+        }
+      }
+      else if (br->sculpt_tool == SCULPT_TOOL_SIMPLIFY) {
+        br->dyntopo.inherit = DYNTOPO_INHERIT_BITMASK &
+                              ~(DYNTOPO_INHERIT_ALL | DYNTOPO_SUBDIVIDE | DYNTOPO_COLLAPSE);
+        br->dyntopo.flag |= DYNTOPO_COLLAPSE | DYNTOPO_SUBDIVIDE | DYNTOPO_CLEANUP;
+      }
+    }
+
+    Scene *scene;
+    for (scene = bmain->scenes.first; scene; scene = scene->id.next) {
+      ToolSettings *ts = scene->toolsettings;
+
+      if (ts->sculpt) {
+        ts->sculpt->flags |= SCULPT_DYNTOPO_CLEANUP;
+      }
+    }
+
+    LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
+      ToolSettings *ts = scene->toolsettings;
+      if (ts && ts->sculpt) {
+        ts->sculpt->detail_range = 0.4f;
+      }
+    }
+  }
+
   /**
    * Versioning code until next subversion bump goes here.
    *
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 349fce48396..01574a6faff 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -1231,7 +1231,7 @@ bool SCULPT_vertex_has_unique_face_set(const SculptSession *ss, SculptVertRef in
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
         BKE_pbvh_update_vert_boundary(
-            ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->cache->boundary_symmetry);
+            ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->boundary_symmetry);
       }
 
       return !(mv->flag & DYNVERT_FSET_BOUNDARY);
@@ -1743,10 +1743,8 @@ SculptCornerType SCULPT_vertex_is_corner(const SculptSession *ss,
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(ss->cd_dyn_vert, v);
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert,
-                                      ss->cd_faceset_offset,
-                                      (BMVert *)vertex.i,
-                                      ss->cache->boundary_symmetry);
+        BKE_pbvh_update_vert_boundary(
+            ss->cd_dyn_vert, ss->cd_faceset_offset, (BMVert *)vertex.i, ss->boundary_symmetry);
       }
 
       ret = 0;
@@ -1817,10 +1815,8 @@ SculptBoundaryType SCULPT_vertex_is_boundary(const SculptSession *ss,
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(ss->cd_dyn_vert, ((BMVert *)(vertex.i)));
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert,
-                                      ss->cd_faceset_offset,
-                                      (BMVert *)vertex.i,
-                                      ss->cache->boundary_symmetry);
+        BKE_pbvh_update_vert_boundary(
+            ss->cd_dyn_vert, ss->cd_faceset_offset, (BMVert *)vertex.i, ss->boundary_symmetry);
       }
 
       int flag = 0;



More information about the Bf-blender-cvs mailing list