Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2021-11-22 13:22:58 +0300
committerJeroen Bakker <jeroen@blender.org>2021-11-22 13:22:58 +0300
commit9b6f3d2d0af2538014e7175a00d98128749a2bd6 (patch)
tree3f19bacda6eda8477377860c974dcbe5aa1e5494 /source/blender/editors/sculpt_paint
parent9bbb5f5a6acd9eafd41274b55011011ebad0daaf (diff)
Cleanup: Removed unused code in curve mask creation.
Generating curve mask for 2d texture painting had some hard-coded parameters that eventually weren't used in the algorithm (hardness and rotation of the brush). This patch removes these parameters.
Diffstat (limited to 'source/blender/editors/sculpt_paint')
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_2d_curve_mask.cc58
1 files changed, 21 insertions, 37 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_image_2d_curve_mask.cc b/source/blender/editors/sculpt_paint/paint_image_2d_curve_mask.cc
index 639dfcdae72..a41e102b540 100644
--- a/source/blender/editors/sculpt_paint/paint_image_2d_curve_mask.cc
+++ b/source/blender/editors/sculpt_paint/paint_image_2d_curve_mask.cc
@@ -33,6 +33,18 @@
namespace blender::ed::sculpt_paint {
+static int aa_samples_per_texel_axis(const Brush *brush, const float radius)
+{
+ int aa_samples = 1.0f / (radius * 0.20f);
+ if (brush->sampling_flag & BRUSH_PAINT_ANTIALIASING) {
+ aa_samples = clamp_i(aa_samples, 3, 16);
+ }
+ else {
+ aa_samples = 1;
+ }
+ return aa_samples;
+}
+
/* create a mask with the falloff strength */
static void update_curve_mask(CurveMaskCache *curve_mask_cache,
const Brush *brush,
@@ -45,58 +57,30 @@ static void update_curve_mask(CurveMaskCache *curve_mask_cache,
unsigned short *m = curve_mask_cache->curve_mask;
- int aa_samples = 1.0f / (radius * 0.20f);
- if (brush->sampling_flag & BRUSH_PAINT_ANTIALIASING) {
- aa_samples = clamp_i(aa_samples, 3, 16);
- }
- else {
- aa_samples = 1;
- }
-
- /* Temporal until we have the brush properties */
- const float hardness = 1.0f;
- const float rotation = 0.0f;
-
- float aa_offset = 1.0f / (2.0f * (float)aa_samples);
- float aa_step = 1.0f / (float)aa_samples;
+ const int aa_samples = aa_samples_per_texel_axis(brush, radius);
+ const float aa_offset = 1.0f / (2.0f * (float)aa_samples);
+ const float aa_step = 1.0f / (float)aa_samples;
float bpos[2];
bpos[0] = cursor_position[0] - floorf(cursor_position[0]) + offset - aa_offset;
bpos[1] = cursor_position[1] - floorf(cursor_position[1]) + offset - aa_offset;
- const float co = cosf(DEG2RADF(rotation));
- const float si = sinf(DEG2RADF(rotation));
-
- float norm_factor = 65535.0f / (float)(aa_samples * aa_samples);
+ float weight_factor = 65535.0f / (float)(aa_samples * aa_samples);
for (int y = 0; y < diameter; y++) {
for (int x = 0; x < diameter; x++, m++) {
- float total_samples = 0;
+ float total_weight = 0;
for (int i = 0; i < aa_samples; i++) {
for (int j = 0; j < aa_samples; j++) {
float pixel_xy[2] = {x + (aa_step * i), y + (aa_step * j)};
- float xy_rot[2];
sub_v2_v2(pixel_xy, bpos);
- xy_rot[0] = co * pixel_xy[0] - si * pixel_xy[1];
- xy_rot[1] = si * pixel_xy[0] + co * pixel_xy[1];
-
- float len = len_v2(xy_rot);
- float p = len / radius;
- if (hardness < 1.0f) {
- p = (p - hardness) / (1.0f - hardness);
- p = 1.0f - p;
- CLAMP(p, 0.0f, 1.0f);
- }
- else {
- p = 1.0;
- }
- float hardness_factor = 3.0f * p * p - 2.0f * p * p * p;
- float curve = BKE_brush_curve_strength_clamped(brush, len, radius);
- total_samples += curve * hardness_factor;
+ const float len = len_v2(pixel_xy);
+ const float sample_weight = BKE_brush_curve_strength_clamped(brush, len, radius);
+ total_weight += sample_weight;
}
}
- *m = (unsigned short)(total_samples * norm_factor);
+ *m = (unsigned short)(total_weight * weight_factor);
}
}
}