[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