Sculpt/Paint: Remove Unified SIZE_PRESSURE and ALPHA_PRESSURE
The relation between the pressure/size and the pressure/alpha is a fundamental property that defines the behavior of a brush, so it does not make sense to have it unified across all brushes. This applies both for sculpting and painting. Some of the new 2.82 brushes need pressure/size or pressure/alpha to be enabled to work propely, while others don't. Users should not be switching on and off this property manually when changing brushes if they want to use unified size. This is also causing that some users are using the brushes with an incorrect configuration. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D6291
This commit is contained in:
parent
0e4014ef92
commit
9251b07720
Notes:
blender-bot
2023-02-13 23:57:45 +01:00
Referenced by issue #72409, UnifiedPaintSettings.use_pressure_size errors reported in the terminal
|
@ -296,11 +296,11 @@ def brush_basic_wpaint_settings(layout, context, brush, *, compact=False):
|
|||
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "size", slider=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "use_pressure_size", text="")
|
||||
row.prop(brush, "use_pressure_size", text="")
|
||||
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "strength")
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "use_pressure_strength", text="")
|
||||
row.prop(brush, "use_pressure_strength", text="")
|
||||
|
||||
layout.prop(brush, "blend", text="" if compact else "Blend")
|
||||
|
||||
|
@ -310,11 +310,11 @@ def brush_basic_vpaint_settings(layout, context, brush, *, compact=False):
|
|||
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "size", slider=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "use_pressure_size", text="")
|
||||
row.prop(brush, "use_pressure_size", text="")
|
||||
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "strength")
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "use_pressure_strength", text="")
|
||||
row.prop(brush, "use_pressure_strength", text="")
|
||||
|
||||
if capabilities.has_color:
|
||||
layout.prop(brush, "blend", text="" if compact else "Blend")
|
||||
|
@ -326,12 +326,12 @@ def brush_basic_texpaint_settings(layout, context, brush, *, compact=False):
|
|||
if capabilities.has_radius:
|
||||
row = layout.row(align=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "size", slider=True)
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "use_pressure_size", text="")
|
||||
row.prop(brush, "use_pressure_size", text="")
|
||||
|
||||
row = layout.row(align=True)
|
||||
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "strength")
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "use_pressure_strength", text="")
|
||||
row.prop(brush, "use_pressure_strength", text="")
|
||||
|
||||
if capabilities.has_color:
|
||||
layout.prop(brush, "blend", text="" if compact else "Blend")
|
||||
|
@ -352,7 +352,7 @@ def brush_basic_sculpt_settings(layout, context, brush, *, compact=False):
|
|||
else:
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "size", slider=True)
|
||||
|
||||
UnifiedPaintPanel.prop_unified_size(row, context, brush, "use_pressure_size", text="")
|
||||
row.prop(brush, "use_pressure_size", text="")
|
||||
|
||||
# strength, use_strength_pressure, and use_strength_attenuation
|
||||
row = layout.row(align=True)
|
||||
|
@ -360,7 +360,7 @@ def brush_basic_sculpt_settings(layout, context, brush, *, compact=False):
|
|||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "strength")
|
||||
|
||||
if capabilities.has_strength_pressure:
|
||||
UnifiedPaintPanel.prop_unified_strength(row, context, brush, "use_pressure_strength", text="")
|
||||
row.prop(brush, "use_pressure_strength", text="")
|
||||
|
||||
# direction
|
||||
if not capabilities.has_direction:
|
||||
|
|
|
@ -111,8 +111,8 @@ float BKE_brush_weight_get(const struct Scene *scene, const struct Brush *brush)
|
|||
void BKE_brush_weight_set(const struct Scene *scene, struct Brush *brush, float value);
|
||||
|
||||
bool BKE_brush_use_locked_size(const struct Scene *scene, const struct Brush *brush);
|
||||
bool BKE_brush_use_alpha_pressure(const struct Scene *scene, const struct Brush *brush);
|
||||
bool BKE_brush_use_size_pressure(const struct Scene *scene, const struct Brush *brush);
|
||||
bool BKE_brush_use_alpha_pressure(const struct Brush *brush);
|
||||
bool BKE_brush_use_size_pressure(const struct Brush *brush);
|
||||
|
||||
bool BKE_brush_sculpt_has_secondary_color(const struct Brush *brush);
|
||||
|
||||
|
|
|
@ -1399,20 +1399,14 @@ bool BKE_brush_use_locked_size(const Scene *scene, const Brush *brush)
|
|||
(brush->flag & BRUSH_LOCK_SIZE);
|
||||
}
|
||||
|
||||
bool BKE_brush_use_size_pressure(const Scene *scene, const Brush *brush)
|
||||
bool BKE_brush_use_size_pressure(const Brush *brush)
|
||||
{
|
||||
const short us_flag = scene->toolsettings->unified_paint_settings.flag;
|
||||
|
||||
return (us_flag & UNIFIED_PAINT_SIZE) ? (us_flag & UNIFIED_PAINT_BRUSH_SIZE_PRESSURE) :
|
||||
(brush->flag & BRUSH_SIZE_PRESSURE);
|
||||
return brush->flag & BRUSH_SIZE_PRESSURE;
|
||||
}
|
||||
|
||||
bool BKE_brush_use_alpha_pressure(const Scene *scene, const Brush *brush)
|
||||
bool BKE_brush_use_alpha_pressure(const Brush *brush)
|
||||
{
|
||||
const short us_flag = scene->toolsettings->unified_paint_settings.flag;
|
||||
|
||||
return (us_flag & UNIFIED_PAINT_ALPHA) ? (us_flag & UNIFIED_PAINT_BRUSH_ALPHA_PRESSURE) :
|
||||
(brush->flag & BRUSH_ALPHA_PRESSURE);
|
||||
return brush->flag & BRUSH_ALPHA_PRESSURE;
|
||||
}
|
||||
|
||||
bool BKE_brush_sculpt_has_secondary_color(const Brush *brush)
|
||||
|
|
|
@ -4209,6 +4209,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
br->pose_smooth_iterations = 4;
|
||||
}
|
||||
}
|
||||
|
||||
/* Cloth pressure */
|
||||
for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
|
||||
for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
|
||||
|
@ -4223,5 +4224,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
|
||||
{
|
||||
/* Versioning code until next subversion bump goes here. */
|
||||
|
||||
/* Remove Unified pressure/size and pressure/alpha */
|
||||
for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
|
||||
ToolSettings *ts = scene->toolsettings;
|
||||
UnifiedPaintSettings *ups = &ts->unified_paint_settings;
|
||||
ups->flag &= ~(UNIFIED_PAINT_FLAG_UNUSED_0 | UNIFIED_PAINT_FLAG_UNUSED_1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -648,7 +648,7 @@ static bool paint_draw_tex_overlay(UnifiedPaintSettings *ups,
|
|||
GPU_matrix_translate_2f(-x, -y);
|
||||
|
||||
/* scale based on tablet pressure */
|
||||
if (primary && ups->stroke_active && BKE_brush_use_size_pressure(vc->scene, brush)) {
|
||||
if (primary && ups->stroke_active && BKE_brush_use_size_pressure(brush)) {
|
||||
const float scale = ups->size_pressure_value;
|
||||
GPU_matrix_translate_2f(x, y);
|
||||
GPU_matrix_scale_2f(scale, scale);
|
||||
|
@ -778,7 +778,7 @@ static bool paint_draw_cursor_overlay(
|
|||
}
|
||||
|
||||
/* scale based on tablet pressure */
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(vc->scene, brush)) {
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(brush)) {
|
||||
do_pop = true;
|
||||
GPU_matrix_push();
|
||||
GPU_matrix_translate_2fv(center);
|
||||
|
@ -1075,7 +1075,7 @@ static void paint_cursor_on_hit(UnifiedPaintSettings *ups,
|
|||
unprojected_radius = paint_calc_object_space_radius(vc, location, projected_radius);
|
||||
|
||||
/* scale 3D brush radius by pressure */
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(vc->scene, brush)) {
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(brush)) {
|
||||
unprojected_radius *= ups->size_pressure_value;
|
||||
}
|
||||
|
||||
|
@ -1362,7 +1362,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
|
|||
immUniformColor3fvAlpha(outline_col, outline_alpha);
|
||||
|
||||
/* draw brush outline */
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(scene, brush)) {
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(brush)) {
|
||||
imm_draw_circle_wire_2d(
|
||||
pos, translation[0], translation[1], final_radius * ups->size_pressure_value, 40);
|
||||
/* outer at half alpha */
|
||||
|
@ -1407,8 +1407,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
|
|||
|
||||
immUniformColor3fvAlpha(outline_col, outline_alpha);
|
||||
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(scene, brush) &&
|
||||
mode != PAINT_MODE_SCULPT) {
|
||||
if (ups->stroke_active && BKE_brush_use_size_pressure(brush) && mode != PAINT_MODE_SCULPT) {
|
||||
imm_draw_circle_wire_3d(
|
||||
pos, translation[0], translation[1], final_radius * ups->size_pressure_value, 40);
|
||||
/* outer at half alpha */
|
||||
|
|
|
@ -548,7 +548,7 @@ static void paint_stroke_update_step(bContext *C, struct PaintStroke *stroke, Po
|
|||
return;
|
||||
}
|
||||
|
||||
if (BKE_brush_use_alpha_pressure(scene, brush)) {
|
||||
if (BKE_brush_use_alpha_pressure(brush)) {
|
||||
BKE_brush_alpha_set(scene, brush, max_ff(0.0f, startalpha * pressure * alphafac));
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -336,7 +336,7 @@ static bool paint_brush_update(bContext *C,
|
|||
|
||||
ups->pixel_radius = BKE_brush_size_get(scene, brush);
|
||||
|
||||
if (BKE_brush_use_size_pressure(scene, brush) && paint_supports_dynamic_size(brush, mode)) {
|
||||
if (BKE_brush_use_size_pressure(brush) && paint_supports_dynamic_size(brush, mode)) {
|
||||
ups->pixel_radius *= stroke->cached_size_pressure;
|
||||
}
|
||||
|
||||
|
@ -527,8 +527,8 @@ static void paint_brush_stroke_add_step(bContext *C,
|
|||
* windows for some tablets, then we just skip first touch .. */
|
||||
if (tablet && (pressure >= 0.99f) &&
|
||||
((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) ||
|
||||
BKE_brush_use_alpha_pressure(scene, pop->s.brush) ||
|
||||
BKE_brush_use_size_pressure(scene, pop->s.brush))) {
|
||||
BKE_brush_use_alpha_pressure(pop->s.brush) ||
|
||||
BKE_brush_use_size_pressure(pop->s.brush))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -540,8 +540,8 @@ static void paint_brush_stroke_add_step(bContext *C,
|
|||
* which is the sensitivity of the most sensitive pen tablet available */
|
||||
if (tablet && (pressure < 0.0002f) &&
|
||||
((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) ||
|
||||
BKE_brush_use_alpha_pressure(scene, pop->s.brush) ||
|
||||
BKE_brush_use_size_pressure(scene, pop->s.brush))) {
|
||||
BKE_brush_use_alpha_pressure(pop->s.brush) ||
|
||||
BKE_brush_use_size_pressure(pop->s.brush))) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
@ -756,7 +756,7 @@ static float paint_space_stroke_spacing_variable(bContext *C,
|
|||
float dpressure,
|
||||
float length)
|
||||
{
|
||||
if (BKE_brush_use_size_pressure(scene, stroke->brush)) {
|
||||
if (BKE_brush_use_size_pressure(stroke->brush)) {
|
||||
/* use pressure to modify size. set spacing so that at 100%, the circles
|
||||
* are aligned nicely with no overlap. for this the spacing needs to be
|
||||
* the average of the previous and next size. */
|
||||
|
|
|
@ -1522,7 +1522,7 @@ static void vwpaint_update_cache_variants(bContext *C, VPaint *vp, Object *ob, P
|
|||
}
|
||||
}
|
||||
|
||||
if (BKE_brush_use_size_pressure(scene, brush) &&
|
||||
if (BKE_brush_use_size_pressure(brush) &&
|
||||
paint_supports_dynamic_size(brush, PAINT_MODE_SCULPT)) {
|
||||
cache->radius = cache->initial_radius * cache->pressure;
|
||||
}
|
||||
|
@ -1684,11 +1684,9 @@ static void get_brush_alpha_data(const Scene *scene,
|
|||
float *r_brush_alpha_pressure)
|
||||
{
|
||||
*r_brush_size_pressure = BKE_brush_size_get(scene, brush) *
|
||||
(BKE_brush_use_size_pressure(scene, brush) ? ss->cache->pressure :
|
||||
1.0f);
|
||||
(BKE_brush_use_size_pressure(brush) ? ss->cache->pressure : 1.0f);
|
||||
*r_brush_alpha_value = BKE_brush_alpha_get(scene, brush);
|
||||
*r_brush_alpha_pressure = (BKE_brush_use_alpha_pressure(scene, brush) ? ss->cache->pressure :
|
||||
1.0f);
|
||||
*r_brush_alpha_pressure = (BKE_brush_use_alpha_pressure(brush) ? ss->cache->pressure : 1.0f);
|
||||
}
|
||||
|
||||
static float wpaint_get_active_weight(const MDeformVert *dv, const WeightPaintInfo *wpi)
|
||||
|
|
|
@ -1724,7 +1724,7 @@ static float brush_strength(const Sculpt *sd,
|
|||
const float root_alpha = BKE_brush_alpha_get(scene, brush);
|
||||
float alpha = root_alpha * root_alpha;
|
||||
float dir = (brush->flag & BRUSH_DIR_IN) ? -1 : 1;
|
||||
float pressure = BKE_brush_use_alpha_pressure(scene, brush) ? cache->pressure : 1;
|
||||
float pressure = BKE_brush_use_alpha_pressure(brush) ? cache->pressure : 1;
|
||||
float pen_flip = cache->pen_flip ? -1 : 1;
|
||||
float invert = cache->invert ? -1 : 1;
|
||||
float overlap = ups->overlap_factor;
|
||||
|
@ -6719,7 +6719,7 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, Po
|
|||
}
|
||||
}
|
||||
|
||||
if (BKE_brush_use_size_pressure(scene, brush) &&
|
||||
if (BKE_brush_use_size_pressure(brush) &&
|
||||
paint_supports_dynamic_size(brush, PAINT_MODE_SCULPT)) {
|
||||
cache->radius = sculpt_brush_dynamic_size_get(brush, cache, cache->initial_radius);
|
||||
cache->dyntopo_radius = cache->initial_radius * cache->pressure;
|
||||
|
@ -7137,14 +7137,13 @@ static void sculpt_brush_stroke_init(bContext *C, wmOperator *op)
|
|||
|
||||
static void sculpt_restore_mesh(Sculpt *sd, Object *ob)
|
||||
{
|
||||
SculptSession *ss = ob->sculpt;
|
||||
Brush *brush = BKE_paint_brush(&sd->paint);
|
||||
|
||||
/* Restore the mesh before continuing with anchored stroke */
|
||||
if ((brush->flag & BRUSH_ANCHORED) ||
|
||||
((brush->sculpt_tool == SCULPT_TOOL_GRAB ||
|
||||
brush->sculpt_tool == SCULPT_TOOL_ELASTIC_DEFORM) &&
|
||||
BKE_brush_use_size_pressure(ss->cache->vc->scene, brush)) ||
|
||||
BKE_brush_use_size_pressure(brush)) ||
|
||||
(brush->flag & BRUSH_DRAG_DOT)) {
|
||||
paint_mesh_restore_co(sd, ob);
|
||||
}
|
||||
|
|
|
@ -1298,14 +1298,11 @@ typedef enum {
|
|||
UNIFIED_PAINT_WEIGHT = (1 << 5),
|
||||
UNIFIED_PAINT_COLOR = (1 << 6),
|
||||
|
||||
/* only used if unified size is enabled, mirrors the brush flags
|
||||
* BRUSH_LOCK_SIZE and BRUSH_SIZE_PRESSURE */
|
||||
/* only used if unified size is enabled, mirrors the brush flag BRUSH_LOCK_SIZE */
|
||||
UNIFIED_PAINT_BRUSH_LOCK_SIZE = (1 << 2),
|
||||
UNIFIED_PAINT_BRUSH_SIZE_PRESSURE = (1 << 3),
|
||||
UNIFIED_PAINT_FLAG_UNUSED_0 = (1 << 3),
|
||||
|
||||
/* only used if unified alpha is enabled, mirrors the brush flag
|
||||
* BRUSH_ALPHA_PRESSURE */
|
||||
UNIFIED_PAINT_BRUSH_ALPHA_PRESSURE = (1 << 4),
|
||||
UNIFIED_PAINT_FLAG_UNUSED_1 = (1 << 4),
|
||||
} eUnifiedPaintSettingsFlags;
|
||||
|
||||
typedef struct CurvePaintSettings {
|
||||
|
|
|
@ -3411,17 +3411,6 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
|
|||
RNA_def_property_ui_text(prop, "Secondary Color", "");
|
||||
RNA_def_property_update(prop, 0, "rna_UnifiedPaintSettings_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_pressure_size", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", UNIFIED_PAINT_BRUSH_SIZE_PRESSURE);
|
||||
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
|
||||
RNA_def_property_ui_text(prop, "Size Pressure", "Enable tablet pressure sensitivity for size");
|
||||
|
||||
prop = RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", UNIFIED_PAINT_BRUSH_ALPHA_PRESSURE);
|
||||
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Strength Pressure", "Enable tablet pressure sensitivity for strength");
|
||||
|
||||
prop = RNA_def_property(srna, "use_locked_size", PROP_ENUM, PROP_NONE); /* as an enum */
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
|
||||
RNA_def_property_enum_items(prop, brush_size_unit_items);
|
||||
|
|
Loading…
Reference in New Issue