[Bf-blender-cvs] [c63d6e3698f] temp-sculpt-normals-masking: Merge branch 'master' into temp-sculpt-normals-masking

Joseph Eagar noreply at git.blender.org
Thu Sep 29 02:19:39 CEST 2022


Commit: c63d6e3698f89e310db91f72e3920a8be18e451c
Author: Joseph Eagar
Date:   Wed Sep 28 17:19:29 2022 -0700
Branches: temp-sculpt-normals-masking
https://developer.blender.org/rBc63d6e3698f89e310db91f72e3920a8be18e451c

Merge branch 'master' into temp-sculpt-normals-masking

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



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

diff --cc release/scripts/startup/bl_ui/properties_paint_common.py
index 34e93966b19,a4a328fce1a..72a87703bd5
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@@ -943,26 -943,22 +943,39 @@@ def brush_settings_advanced(layout, con
          # boundary edges/face sets automasking
          col.prop(brush, "use_automasking_boundary_edges", text="Mesh Boundary")
          col.prop(brush, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
-         col.prop(brush, "automasking_boundary_edges_propagation_steps")
- 
+         col.prop(brush, "use_automasking_cavity", text="Cavity")
+         col.prop(brush, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
 +        col.prop(brush, "use_automasking_start_normal", text="Area Normal")
 +        col.prop(brush, "use_automasking_view_normal", text="View Normal")
  
+         col.separator()
+         col.prop(brush, "automasking_boundary_edges_propagation_steps")
+ 
 +        sculpt = context.tool_settings.sculpt
 +
 +        if brush.use_automasking_start_normal:
 +            col.separator()
 +
 +            col.prop(sculpt, "automasking_start_normal_limit")
 +            col.prop(sculpt, "automasking_start_normal_falloff")
 +
 +        if brush.use_automasking_view_normal:
 +            col.separator()
 +
 +            col.prop(brush, "use_automasking_view_occlusion", text="Occlusion")
 +            col.prop(sculpt, "automasking_view_normal_limit")
 +            col.prop(sculpt, "automasking_view_normal_falloff")
 +
+         if brush.use_automasking_cavity or brush.use_automasking_cavity_inverted:
+             col.separator()
+ 
+             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")
+ 
          layout.separator()
  
          # sculpt plane settings
diff --cc release/scripts/startup/bl_ui/space_view3d.py
index 7518e7171a8,fcf00ee80f6..ada2993a16f
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -5493,8 -5495,8 +5495,10 @@@ class VIEW3D_MT_sculpt_automasking_pie(
          pie.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
          pie.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
          pie.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+         pie.prop(sculpt, "use_automasking_cavity", text="Cavity")
+         pie.prop(sculpt, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
 +        pie.prop(sculpt, "use_automasking_start_normal", text="Area Normal")
 +        pie.prop(sculpt, "use_automasking_view_normal", text="View Normal")
  
  
  class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
diff --cc release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 74017b2e1be,153bce78ec2..f0c2bca96a9
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@@ -971,22 -971,29 +971,44 @@@ class VIEW3D_PT_sculpt_options(Panel, V
          col.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
          col.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
          col.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+         col.prop(sculpt, "use_automasking_cavity", text="Cavity")
+         col.prop(sculpt, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
 +        col.prop(sculpt, "use_automasking_start_normal", text="Area Normal")
 +        col.prop(sculpt, "use_automasking_view_normal", text="View Normal")
 +        
 +        if sculpt.use_automasking_start_normal:
 +            col.separator()
 +
 +            col.prop(sculpt, "automasking_start_normal_limit")
 +            col.prop(sculpt, "automasking_start_normal_falloff")
 +
 +        if sculpt.use_automasking_view_normal:
 +            col.separator()
 +
 +            col.prop(sculpt, "use_automasking_view_occlusion", text="Occlusion")
 +            col.prop(sculpt, "automasking_view_normal_limit")
 +            col.prop(sculpt, "automasking_view_normal_falloff")
  
+         col.separator()
+         col.prop(sculpt.brush, "automasking_boundary_edges_propagation_steps")
+ 
+         if sculpt.use_automasking_cavity or sculpt.use_automasking_cavity_inverted:
+             col.separator()
+ 
+             col2 = col.column()
+             props = col2.operator("sculpt.mask_from_cavity", text="Mask From Cavity")
+             props.use_automask_settings = True
+ 
+             col2 = col.column()
+             
+             col2.prop(sculpt, "automasking_cavity_factor", text="Cavity Factor")
+             col2.prop(sculpt, "automasking_cavity_blur_steps", text="Cavity Blur")
+             
+             col2.prop(sculpt, "use_automasking_custom_cavity_curve", text="Use Curve")
+ 
+             if sculpt.use_automasking_custom_cavity_curve:
+                 col2.template_curve_mapping(sculpt, "automasking_cavity_curve")
+ 
  
  class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel):
      bl_context = ".sculpt_mode"  # dot on purpose (access from topbar)
diff --cc source/blender/blenkernel/BKE_paint.h
index 66d1a294029,386fecfd278..ed7ef5d5efd
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@@ -548,13 -554,13 +549,13 @@@ typedef struct SculptAttributePointers 
    /* Precomputed auto-mask factor indexed by vertex, owned by the auto-masking system and
     * initialized in #SCULPT_automasking_cache_init when needed. */
    SculptAttribute *automasking_factor;
 +  SculptAttribute *automasking_occlusion; /* CD_PROP_INT8. */
++  SculptAttribute *automasking_stroke_id;
++  SculptAttribute *automasking_cavity;
  
    /* BMesh */
    SculptAttribute *dyntopo_node_id_vertex;
    SculptAttribute *dyntopo_node_id_face;
--
--  SculptAttribute *stroke_id;
 -  SculptAttribute *cavity;
  } SculptAttributePointers;
  
  typedef struct SculptSession {
@@@ -741,13 -747,14 +742,16 @@@
     */
    bool sticky_shading_color;
  
++  uchar stroke_id;
++
    /**
     * Last used painting canvas key.
     */
    char *last_paint_canvas_key;
- 
 +  float last_normal[3];
-   uchar stroke_id;
+ 
 -  uchar stroke_id;
+   int last_automasking_settings_hash;
 -  uchar last_cavity_stroke_id;
++  uchar last_automask_stroke_id;
  } SculptSession;
  
  void BKE_sculptsession_free(struct Object *ob);
diff --cc source/blender/editors/sculpt_paint/sculpt.c
index bd3bafd2773,ac77e007081..50e9759f397
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@@ -3549,6 -3548,11 +3550,11 @@@ static void do_brush_action(Sculpt *sd
      SCULPT_bmesh_topology_rake(sd, ob, nodes, totnode, brush->topology_rake_factor);
    }
  
 -  if (!SCULPT_tool_can_reuse_cavity_mask(brush->sculpt_tool) || (ss->cache->supports_gravity && sd->gravity_factor > 0.0f)) {
++  if (!SCULPT_tool_can_reuse_automask(brush->sculpt_tool) || (ss->cache->supports_gravity && sd->gravity_factor > 0.0f)) {
+     /* Clear cavity mask cache. */
+     ss->last_automasking_settings_hash = 0;
+   }
+ 
    /* The cloth brush adds the gravity as a regular force and it is processed in the solver. */
    if (ss->cache->supports_gravity && !ELEM(brush->sculpt_tool,
                                             SCULPT_TOOL_CLOTH,
@@@ -4236,8 -4240,9 +4242,7 @@@ static void sculpt_update_cache_invaria
    int mode;
  
    ss->cache = cache;
-   ss->stroke_id++;
  
 -  cache->stroke_id = ss->stroke_id;
 -
    /* Set scaling adjustment. */
    max_scale = 0.0f;
    for (int i = 0; i < 3; i++) {
@@@ -5402,6 -5411,8 +5411,9 @@@ static bool sculpt_stroke_test_start(bC
        SCULPT_undo_push_begin_ex(ob, sculpt_tool_name(sd));
      }
  
+     SCULPT_stroke_id_next(ob);
++    ss->cache->stroke_id = ss->stroke_id;
+ 
      return true;
    }
    return false;
@@@ -6000,79 -6011,23 +6012,90 @@@ void SCULPT_fake_neighbors_free(Object 
    sculpt_pose_fake_neighbors_free(ss);
  }
  
 +void SCULPT_automasking_node_begin(Object *ob,
 +                                   const SculptSession *ss,
 +                                   AutomaskingCache *automasking,
 +                                   AutomaskingNodeData *node_data,
 +                                   PBVHNode *node)
 +{
 +  if (!automasking) {
 +    memset(node_data, 0, sizeof(*node_data));
 +    return;
 +  }
 +
 +  node_data->node = node;
 +  node_data->have_orig_data = automasking->settings.flags &
 +                              (BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
 +
 +  if (node_data->have_orig_data) {
 +    SCULPT_orig_vert_data_init(&node_data->orig_data, ob, node, SCULPT_UNDO_COORDS);
 +  }
 +  else {
 +    memset(&node_data->orig_data, 0, sizeof(node_data->orig_data));
 +  }
 +}
 +
 +void SCULPT_automasking_node_update(SculptSession *ss,
 +                                    AutomaskingNodeData *automask_data,
 +                                    PBVHVertexIter *vd)
 +{
 +  if (automask_data->have_orig_data) {
 +    SCULPT_orig_vert_data_update(&automask_data->orig_data, vd);
 +  }
 +}
 +
 +bool SCULPT_vertex_is_occluded(SculptSession *ss, PBVHVertRef vertex, bool original)
 +{
 +  float ray_start[3], ray_end[3], ray_normal[3], face_normal[3];
 +  float co[3];
 +
 +  copy_v3_v3(co, SCULPT_vertex_co_get(ss, vertex));
 +  float mouse[2];
 +
 +  ED_view3d_project_float_v2_m4(ss->cache->vc->region, co, mouse, ss->cache->projection_mat);
 +
 +  int depth = SCULPT_raycast_init(ss->cache->vc, mouse, ray_end, ray_start, ray_normal, original);
 +
 +  negate_v3(ray_normal);
 +
 +  copy_v3_v3(ray_start, SCULPT_vertex_co_get(ss, vertex));
 +  madd_v3_v3fl(ray_start, ray_normal, 0.002);
 +
 +  SculptRaycastData srd = {0};
 +  srd.original = original;
 +  srd.ss = ss;
 +  srd.hit = false;
 +  srd.ray_start = ray_start;
 +  srd.ray_normal = ray_normal;
 +  srd.

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list