diff options
-rw-r--r-- | release/scripts/startup/bl_ui/properties_paint_common.py | 1 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 14 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_brush_defaults.h | 1 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_brush_types.h | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_brush.c | 7 |
5 files changed, 25 insertions, 2 deletions
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py index 704af1ae307..1e2ba13f467 100644 --- a/release/scripts/startup/bl_ui/properties_paint_common.py +++ b/release/scripts/startup/bl_ui/properties_paint_common.py @@ -536,6 +536,7 @@ def brush_settings(layout, context, brush, popover=False): # normal_radius_factor layout.prop(brush, "normal_radius_factor", slider=True) + layout.prop(brush, "hardness", slider=True) # auto_smooth_factor and use_inverse_smooth_pressure if capabilities.has_auto_smooth: diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index c2ae563c45f..e203cabe22d 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -1953,8 +1953,20 @@ float tex_strength(SculptSession *ss, } } + /* Hardness. */ + float final_len = len; + const float hardness = br->hardness; + float p = len / cache->radius; + if (p < hardness) { + final_len = 0.0f; + } + else { + p = (p - hardness) / (1.0f - hardness); + final_len = p * cache->radius; + } + /* Falloff curve. */ - avg *= BKE_brush_curve_strength(br, len, cache->radius); + avg *= BKE_brush_curve_strength(br, final_len, cache->radius); avg *= frontface(br, cache->view_normal, vno, fno); /* Paint mask. */ diff --git a/source/blender/makesdna/DNA_brush_defaults.h b/source/blender/makesdna/DNA_brush_defaults.h index 3c18df076f6..1182631a82b 100644 --- a/source/blender/makesdna/DNA_brush_defaults.h +++ b/source/blender/makesdna/DNA_brush_defaults.h @@ -102,6 +102,7 @@ .sculpt_tool = SCULPT_TOOL_DRAW, \ .pose_smooth_iterations = 4, \ .pose_ik_segments = 1, \ + .hardness = 0.0f, \ \ /* A kernel radius of 1 has almost no effect (T63233). */ \ .blur_kernel_radius = 2, \ diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index e14732ee77a..2b7e9246d36 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -326,7 +326,7 @@ typedef struct Brush { char mask_tool; /** Active grease pencil tool. */ char gpencil_tool; - char _pad1[1]; + char _pad1[5]; float autosmooth_factor; @@ -344,6 +344,8 @@ typedef struct Brush { float texture_sample_bias; int curve_preset; + float hardness; + int automasking_flags; /* Factor that controls the shape of the brush tip by rounding the corners of a square. */ diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 5f30e299a12..cfaaa0cd1b3 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -2012,6 +2012,13 @@ static void rna_def_brush(BlenderRNA *brna) "Area to apply deformation falloff to the effects of the simulation"); RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "hardness", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "hardness"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text( + prop, "Hardness", "How close the brush falloff starts from the edge of the brush"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "auto_smooth_factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "autosmooth_factor"); RNA_def_property_float_default(prop, 0); |