[Bf-blender-cvs] [527ad665afe] temp-sculpt-cavity-mask: temp-sculpt-cavity-mask: Add custom curve support
Joseph Eagar
noreply at git.blender.org
Wed Jun 8 12:10:48 CEST 2022
Commit: 527ad665afecdfe576839166f41c9a52662d1ef7
Author: Joseph Eagar
Date: Wed Jun 8 03:08:15 2022 -0700
Branches: temp-sculpt-cavity-mask
https://developer.blender.org/rB527ad665afecdfe576839166f41c9a52662d1ef7
temp-sculpt-cavity-mask: Add custom curve support
You can now use a custom curve for cavity masking.
===================================================================
M release/datafiles/locale
M release/scripts/addons
M release/scripts/addons_contrib
M release/scripts/startup/bl_ui/properties_paint_common.py
M release/scripts/startup/bl_ui/space_view3d_toolbar.py
M source/blender/blenkernel/intern/brush.c
M source/blender/editors/sculpt_paint/sculpt_automasking.cc
M source/blender/editors/sculpt_paint/sculpt_intern.h
M source/blender/makesdna/DNA_brush_enums.h
M source/blender/makesdna/DNA_brush_types.h
M source/blender/makesrna/intern/rna_brush.c
M source/blender/makesrna/intern/rna_sculpt_paint.c
===================================================================
diff --git a/release/datafiles/locale b/release/datafiles/locale
index 71e0f87dd1b..915744ad8e2 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 71e0f87dd1ba4e0ed5f619b031045a428e534230
+Subproject commit 915744ad8e255d1723d77671a6c6b074773c2199
diff --git a/release/scripts/addons b/release/scripts/addons
index 6a318b22d14..d990559d7b1 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 6a318b22d143f675ad489171a2b9aa56d9a6c1b6
+Subproject commit d990559d7b19593cbaff17ba59b8dd9d0d60e615
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 9406de5f312..95107484d07 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 9406de5f31254c0c608ba8785fd3dcad12dcd7c4
+Subproject commit 95107484d076bc965239942e857c83433bfa86d7
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index 2ed0f33753b..437bcca63bd 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -952,6 +952,10 @@ def brush_settings_advanced(layout, context, brush, popover=False):
col.prop(brush, "invert_automasking_cavity", text="Invert Cavity")
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")
col.prop(brush, "automasking_boundary_edges_propagation_steps")
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index c3c7685cd7a..1473fa57ad8 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -978,6 +978,11 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
if sculpt.use_automasking_cavity:
col.prop(sculpt, "invert_automasking_cavity", text="Invert Cavity")
col.prop(sculpt.brush, "automasking_cavity_factor", text="Cavity Factor")
+ col.prop(sculpt.brush, "automasking_cavity_blur_steps", text="Cavity Blur")
+ col.prop(sculpt.brush, "use_automasking_custom_cavity_curve", text="Use Curve")
+
+ if sculpt.brush.use_automasking_custom_cavity_curve:
+ col.template_curve_mapping(sculpt.brush, "automasking_cavity_curve")
col.prop(sculpt.brush, "automasking_boundary_edges_propagation_steps")
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index a514646b1f3..ee29eaf6dec 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -42,6 +42,19 @@
#include "BLO_read_write.h"
+static void brush_sculpt_add_cavity_curve(Brush *br)
+
+{
+ CurveMapping *cumap = br->automasking_cavity_curve = 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(br->automasking_cavity_curve);
+}
+
static void brush_init_data(ID *id)
{
Brush *brush = (Brush *)id;
@@ -72,6 +85,12 @@ static void brush_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, c
}
brush_dst->curve = BKE_curvemapping_copy(brush_src->curve);
+
+ if (brush_src->automasking_cavity_curve) {
+ brush_dst->automasking_cavity_curve = BKE_curvemapping_copy(
+ brush_src->automasking_cavity_curve);
+ }
+
if (brush_src->gpencil_settings != NULL) {
brush_dst->gpencil_settings = MEM_dupallocN(brush_src->gpencil_settings);
brush_dst->gpencil_settings->curve_sensitivity = BKE_curvemapping_copy(
@@ -110,6 +129,10 @@ static void brush_free_data(ID *id)
}
BKE_curvemapping_free(brush->curve);
+ if (brush->automasking_cavity_curve) {
+ BKE_curvemapping_free(brush->curve);
+ }
+
if (brush->gpencil_settings != NULL) {
BKE_curvemapping_free(brush->gpencil_settings->curve_sensitivity);
BKE_curvemapping_free(brush->gpencil_settings->curve_strength);
@@ -211,6 +234,10 @@ static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_addres
BKE_curvemapping_blend_write(writer, brush->curve);
}
+ if (brush->automasking_cavity_curve) {
+ BKE_curvemapping_blend_write(writer, brush->automasking_cavity_curve);
+ }
+
if (brush->gpencil_settings) {
BLO_write_struct(writer, BrushGpencilSettings, brush->gpencil_settings);
@@ -321,6 +348,16 @@ static void brush_blend_read_data(BlendDataReader *reader, ID *id)
brush->preview = NULL;
brush->icon_imbuf = NULL;
+
+ BLO_read_data_address(reader, &brush->automasking_cavity_curve);
+
+ if (brush->automasking_cavity_curve) {
+ BKE_curvemapping_blend_read(reader, brush->automasking_cavity_curve);
+ BKE_curvemapping_init(brush->automasking_cavity_curve);
+ }
+ else if (brush->sculpt_tool) {
+ brush_sculpt_add_cavity_curve(brush);
+ }
}
static void brush_blend_read_lib(BlendLibReader *reader, ID *id)
@@ -1941,6 +1978,12 @@ void BKE_brush_sculpt_reset(Brush *br)
default:
break;
}
+
+ if (br->automasking_cavity_curve) {
+ BKE_curvemapping_free(br->automasking_cavity_curve);
+ }
+
+ brush_sculpt_add_cavity_curve(br);
}
void BKE_brush_curve_preset(Brush *b, eCurveMappingPreset preset)
diff --git a/source/blender/editors/sculpt_paint/sculpt_automasking.cc b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
index 28ba6bc9ca5..7e9cc7897dc 100644
--- a/source/blender/editors/sculpt_paint/sculpt_automasking.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
@@ -21,6 +21,7 @@
#include "DNA_meshdata_types.h"
#include "BKE_brush.h"
+#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -303,7 +304,13 @@ ATTR_NO_OPT static float sculpt_automasking_cavity_factor(AutomaskingCache *auto
sculpt_calc_blurred_cavity(ss, automasking, automasking->settings.cavity_blur_steps, vertex);
}
- return ss->cavity_factor[vertex];
+ float factor = ss->cavity_factor[vertex];
+
+ if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_USE_CURVE) {
+ factor = BKE_curvemapping_evaluateF(automasking->settings.cavity_curve, 0, factor);
+ }
+
+ return factor;
}
float SCULPT_automasking_factor_get(AutomaskingCache *automasking, SculptSession *ss, int vert)
@@ -597,6 +604,7 @@ static void SCULPT_automasking_cache_settings_update(AutomaskingCache *automaski
automasking->settings.initial_face_set = SCULPT_active_face_set_get(ss);
automasking->settings.cavity_factor = brush->automasking_cavity_factor;
automasking->settings.cavity_blur_steps = brush->automasking_cavity_blur_steps;
+ automasking->settings.cavity_curve = brush->automasking_cavity_curve;
}
AutomaskingCache *SCULPT_automasking_cache_init(Sculpt *sd, Brush *brush, Object *ob)
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index 9268ad1366f..1d65c880115 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -396,6 +396,7 @@ typedef struct AutomaskingSettings {
int initial_face_set;
float cavity_factor;
int cavity_blur_steps;
+ struct CurveMapping *cavity_curve;
} AutomaskingSettings;
typedef struct AutomaskingCache {
diff --git a/source/blender/makesdna/DNA_brush_enums.h b/source/blender/makesdna/DNA_brush_enums.h
index 0132c9b5064..186d086ed6c 100644
--- a/source/blender/makesdna/DNA_brush_enums.h
+++ b/source/blender/makesdna/DNA_brush_enums.h
@@ -320,6 +320,7 @@ typedef enum eAutomasking_flag {
BRUSH_AUTOMASKING_BOUNDARY_FACE_SETS = (1 << 3),
BRUSH_AUTOMASKING_CAVITY = (1 << 4),
BRUSH_AUTOMASKING_CAVITY_INVERT = (1 << 5),
+ BRUSH_AUTOMASKING_CAVITY_USE_CURVE = (1 << 6),
/* Reserved for future use
BRUSH_AUTOMASKING_BRUSH_NORMAL = (1 << 6),
BRUSH_AUTOMASKING_VIEW_NORMAL = (1 << 7),
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 1537bb1c1c5..30991404e92 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -301,6 +301,7 @@ typedef struct Brush {
/* automasking */
int automasking_flags;
int automasking_boundary_edges_propagation_steps;
+ struct CurveMapping *automasking_cavity_curve;
int automasking_cavity_blur_steps;
float automasking_cavity_factor;
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index f2be6a77beb..9212814e9e1 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -3135,6 +3135,12 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Invert Cavity Mask", "Invert cavity masking.");
RNA_def_property_update(prop, 0, "rna_Brush_update");
+ prop = RNA_def_property(srna, "use_automasking_custom_cavity_curve", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(
+ prop, NULL, "automasking_flags", BRUSH_AUTOMASKING_CAVITY_USE_CURVE);
+ RNA_def_property_ui_text(prop, "Custom Cavity Curve", "Use custom curve.");
+ RNA_def_property_update(prop, 0, "rna_Brush_update");
+
prop = RNA_def_property(srna, "automasking_cavity_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "automasking_cavity_factor");
RNA_def_property_ui_text(prop, "Cavity Factor", "Cavity mask factor");
@@ -3148,6 +3154,13 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 25.0f);
RNA_def_property_update(prop, 0, "rna_Brush_update");
+ prop = RNA_def_property(srna, "automasking_cavity_curve", PROP_POINTER, PROP_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list