[Bf-blender-cvs] [b3fff9b07aa] temp_bmesh_multires: Merge remote-tracking branch 'origin/master' into temp_bmesh_multires

Joseph Eagar noreply at git.blender.org
Mon Dec 21 10:08:56 CET 2020


Commit: b3fff9b07aa32dd9421143aeed1a941632f55322
Author: Joseph Eagar
Date:   Mon Dec 21 01:08:24 2020 -0800
Branches: temp_bmesh_multires
https://developer.blender.org/rBb3fff9b07aa32dd9421143aeed1a941632f55322

Merge remote-tracking branch 'origin/master' into temp_bmesh_multires

Also redid vcol boundary tool icon, and made a little icon for sculpt
color paint.

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



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

diff --cc release/datafiles/icons/brush.sculpt.paint.dat
index 00000000000,00000000000..ef5f5fe851a
new file mode 100644
Binary files differ
diff --cc release/datafiles/icons/brush.sculpt.vcol_boundary.dat
index 00000000000,00000000000..41c69e4dda8
new file mode 100644
Binary files differ
diff --cc release/datafiles/icons/ops.armature.extrude.cursor.dat
index ec8f2432052,ec8f2432052..00000000000
deleted file mode 100644,100644
Binary files differ
diff --cc release/datafiles/icons/ops.armature.extrude.dat
index 2194c5bf556,2194c5bf556..00000000000
deleted file mode 100644,100644
Binary files differ
diff --cc release/datafiles/icons/ops.curve.dupli_extrude_cursor.dat
index 509ca7c9440,509ca7c9440..00000000000
deleted file mode 100644,100644
Binary files differ
diff --cc source/blender/blenkernel/BKE_paint.h
index 92f68807fe7,aaed2649ad9..3e4fb793e98
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@@ -25,8 -25,8 +25,9 @@@
  
  #include "BLI_bitmap.h"
  #include "BLI_utildefines.h"
+ #include "DNA_brush_enums.h"
  #include "DNA_object_enums.h"
 +#include "BKE_pbvh.h"
  
  #ifdef __cplusplus
  extern "C" {
diff --cc source/blender/blenkernel/intern/brush.c
index 561623da41f,9a954a89cad..9c17bfac9ec
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@@ -1833,13 -1834,13 +1834,20 @@@ void BKE_brush_sculpt_reset(Brush *br
        br->flag &= ~BRUSH_SPACE_ATTEN;
        br->curve_preset = BRUSH_CURVE_SPHERE;
        break;
 +    case SCULPT_TOOL_VCOL_BOUNDARY:
 +      br->flag &= ~BRUSH_SPACE_ATTEN;
 +      br->spacing = 5;
 +      br->alpha = 0.7f;
 +      br->surface_smooth_shape_preservation = 0.5f;
 +      br->surface_smooth_current_vertex = 0.5f;
 +      br->surface_smooth_iterations = 4;
+     case SCULPT_TOOL_DISPLACEMENT_SMEAR:
+       br->alpha = 1.0f;
+       br->spacing = 5;
+       br->hardness = 0.7f;
+       br->flag &= ~BRUSH_ALPHA_PRESSURE;
+       br->flag &= ~BRUSH_SPACE_ATTEN;
+       br->curve_preset = BRUSH_CURVE_SMOOTHER;
        break;
      default:
        break;
diff --cc source/blender/editors/datafiles/CMakeLists.txt
index 361c5d4048e,337fb18f835..6ec7fbe80b6
--- a/source/blender/editors/datafiles/CMakeLists.txt
+++ b/source/blender/editors/datafiles/CMakeLists.txt
@@@ -657,6 -657,6 +657,7 @@@ set_property(GLOBAL PROPERTY ICON_GEOM_
    brush.sculpt.mask
    brush.sculpt.multiplane_scrape
    brush.sculpt.nudge
++  brush.sculpt.paint
    brush.sculpt.pinch
    brush.sculpt.pose
    brush.sculpt.rotate
diff --cc source/blender/editors/include/UI_icons.h
index faf34573475,b7eb5cab7f9..79311042274
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@@ -919,7 -919,6 +919,8 @@@ DEF_ICON_COLOR(BRUSH_TEXFILL
  DEF_ICON_COLOR(BRUSH_TEXMASK)
  DEF_ICON_COLOR(BRUSH_THUMB)
  DEF_ICON_COLOR(BRUSH_ROTATE)
 +DEF_ICON_COLOR(BRUSH_VCOL_BOUNDARY)
++DEF_ICON_COLOR(BRUSH_PAINT)
  
  /* grease pencil sculpt */
  DEF_ICON_COLOR(GPBRUSH_SMOOTH)
diff --cc source/blender/editors/sculpt_paint/sculpt.c
index dd654b41ffa,38d2bed7d97..bf55d6a323e
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@@ -3446,6 -3105,147 +3448,151 @@@ static void do_displacement_eraser_brus
  
  /** \} */
  
+ /** \name Sculpt Multires Displacement Smear Brush
+  * \{ */
+ 
+ static void do_displacement_smear_brush_task_cb_ex(void *__restrict userdata,
+                                                    const int n,
+                                                    const TaskParallelTLS *__restrict tls)
+ {
+   SculptThreadedTaskData *data = userdata;
+   SculptSession *ss = data->ob->sculpt;
+   const Brush *brush = data->brush;
+   const float bstrength = clamp_f(ss->cache->bstrength, 0.0f, 1.0f);
+ 
+   SculptBrushTest test;
+   SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
+       ss, &test, data->brush->falloff_shape);
+   const int thread_id = BLI_task_parallel_thread_id(tls);
+ 
+   PBVHVertexIter vd;
+   BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
+   {
+     if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
+       continue;
+     }
+     const float fade = bstrength * SCULPT_brush_strength_factor(ss,
+                                                                 brush,
+                                                                 vd.co,
+                                                                 sqrtf(test.dist),
+                                                                 vd.no,
+                                                                 vd.fno,
+                                                                 vd.mask ? *vd.mask : 0.0f,
 -                                                                vd.index,
++                                                                vd.vertex,
+                                                                 thread_id);
+ 
+     float current_disp[3];
+     float current_disp_norm[3];
+     float interp_limit_surface_disp[3];
+ 
+     copy_v3_v3(interp_limit_surface_disp, ss->cache->prev_displacement[vd.index]);
+ 
+     switch (brush->smear_deform_type) {
+       case BRUSH_SMEAR_DEFORM_DRAG:
+         sub_v3_v3v3(current_disp, ss->cache->location, ss->cache->last_location);
+         break;
+       case BRUSH_SMEAR_DEFORM_PINCH:
+         sub_v3_v3v3(current_disp, ss->cache->location, vd.co);
+         break;
+       case BRUSH_SMEAR_DEFORM_EXPAND:
+         sub_v3_v3v3(current_disp, vd.co, ss->cache->location);
+         break;
+     }
+ 
+     normalize_v3_v3(current_disp_norm, current_disp);
+     mul_v3_v3fl(current_disp, current_disp_norm, ss->cache->bstrength);
+ 
+     float weights_accum = 1.0f;
+ 
+     SculptVertexNeighborIter ni;
 -    SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN (ss, vd.index, ni) {
++    SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN (ss, vd.vertex, ni) {
+       float vertex_disp[3];
+       float vertex_disp_norm[3];
+       float neighbor_limit_co[3];
 -      SCULPT_vertex_limit_surface_get(ss, ni.index, neighbor_limit_co);
++      SCULPT_vertex_limit_surface_get(ss, ni.vertex, neighbor_limit_co);
+       sub_v3_v3v3(vertex_disp,
+                   ss->cache->limit_surface_co[ni.index],
+                   ss->cache->limit_surface_co[vd.index]);
+       const float *neighbor_limit_surface_disp = ss->cache->prev_displacement[ni.index];
+       normalize_v3_v3(vertex_disp_norm, vertex_disp);
+       if (dot_v3v3(current_disp_norm, vertex_disp_norm) < 0.0f) {
+         const float disp_interp = clamp_f(
+             -dot_v3v3(current_disp_norm, vertex_disp_norm), 0.0f, 1.0f);
+         madd_v3_v3fl(interp_limit_surface_disp, neighbor_limit_surface_disp, disp_interp);
+         weights_accum += disp_interp;
+       }
+     }
+     SCULPT_VERTEX_NEIGHBORS_ITER_END(ni);
+ 
+     mul_v3_fl(interp_limit_surface_disp, 1.0f / weights_accum);
+ 
+     float new_co[3];
+     add_v3_v3v3(new_co, ss->cache->limit_surface_co[vd.index], interp_limit_surface_disp);
+     interp_v3_v3v3(vd.co, vd.co, new_co, fade);
+ 
+     if (vd.mvert) {
+       vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+     }
+   }
+   BKE_pbvh_vertex_iter_end;
+ }
+ 
+ static void do_displacement_smear_store_prev_disp_task_cb_ex(
+     void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
+ {
+   SculptThreadedTaskData *data = userdata;
+   SculptSession *ss = data->ob->sculpt;
+ 
+   PBVHVertexIter vd;
+   BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
+   {
+     sub_v3_v3v3(ss->cache->prev_displacement[vd.index],
 -                SCULPT_vertex_co_get(ss, vd.index),
++                SCULPT_vertex_co_get(ss, vd.vertex),
+                 ss->cache->limit_surface_co[vd.index]);
+   }
+   BKE_pbvh_vertex_iter_end;
+ }
+ 
+ static void do_displacement_smear_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
+ {
+   Brush *brush = BKE_paint_brush(&sd->paint);
+   SculptSession *ss = ob->sculpt;
+ 
+   BKE_curvemapping_init(brush->curve);
++  SCULPT_vertex_random_access_ensure(ss);
+ 
+   const int totvert = SCULPT_vertex_count_get(ss);
+   if (!ss->cache->prev_displacement) {
+     ss->cache->prev_displacement = MEM_malloc_arrayN(
+         totvert, sizeof(float[3]), "prev displacement");
+     ss->cache->limit_surface_co = MEM_malloc_arrayN(totvert, sizeof(float[3]), "limit surface co");
++
+     for (int i = 0; i < totvert; i++) {
 -      SCULPT_vertex_limit_surface_get(ss, i, ss->cache->limit_surface_co[i]);
++      SculptVertRef vref = BKE_pbvh_table_index_to_vertex(ss->pbvh, i);
++
++      SCULPT_vertex_limit_surface_get(ss, vref, ss->cache->limit_surface_co[i]);
+       sub_v3_v3v3(ss->cache->prev_displacement[i],
 -                  SCULPT_vertex_co_get(ss, i),
++                  SCULPT_vertex_co_get(ss, vref),
+                   ss->cache->limit_surface_co[i]);
+     }
+   }
+   /* Threaded loop over nodes. */
+   SculptThreadedTaskData data = {
+       .sd = sd,
+       .ob = ob,
+       .brush = brush,
+       .nodes = nodes,
+   };
+ 
+   TaskParallelSettings settings;
+   BKE_pbvh_parallel_range_settings(&settings, true, totnode);
+   BLI_task_parallel_range(
+       0, totnode, &data, do_displacement_smear_store_prev_disp_task_cb_ex, &settings);
+   BLI_task_parallel_range(0, totnode, &data, do_displacement_smear_brush_task_cb_ex, &settings);
+ }
+ 
+ /** \} */
+ 
  static void do_draw_brush_task_cb_ex(void *__restrict userdata,
                                       const int n,
                                       const TaskParallelTLS *__restrict tls)
@@@ -4585,18 -4384,28 +4734,28 @@@ static void do_snake_hook_brush_task_cb
        ss, &test, data->brush->falloff_shape);
    const int thread_id = BLI_task_parallel_thread_id(tls);
  
+   KelvinletParams params;
+   BKE_kelvinlet_init_params(&params, ss->cache->radius, bstrength, 1.0f, 0.4f);
+ 
    BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
    {
-     if (sculpt_brush_test_sq_fn(&test, vd.co)) {
-       const float fade = bstrength * SCULPT_brush_strength_factor(ss,
-                                            

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list