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:
authorYimingWu <xp8110@outlook.com>2020-10-19 12:05:56 +0300
committerYimingWu <xp8110@outlook.com>2020-10-19 12:05:56 +0300
commit0691c3d6407d944147178ebad13f012e1bb7c1ed (patch)
tree31654a1bef6929586d9aa4984d82b2ba2cdf63ad /source/blender/gpencil_modifiers
parentf63859c28511539880a5748ccd1689f305d18b16 (diff)
GPencil: Better fading effect arguments.
Diffstat (limited to 'source/blender/gpencil_modifiers')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c81
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c6
2 files changed, 40 insertions, 47 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 561d3495d92..6b41bfba87b 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -87,6 +87,37 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
tgmd->curve_intensity = BKE_curvemapping_copy(gmd->curve_intensity);
}
+static float give_opacity_fading_factor(OpacityGpencilModifierData *mmd,
+ Object *ob_this,
+ float *pos,
+ bool apply_obmat)
+{
+ float factor_depth = 1;
+ if (mmd->flag & GP_OPACITY_FADING) {
+ if (mmd->object) {
+ float gvert[3];
+ if (apply_obmat) {
+ mul_v3_m4v3(gvert, ob_this->obmat, pos);
+ }
+ float dist = len_v3v3(mmd->object->obmat[3], gvert);
+ float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
+ float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
+
+ /* Better with ratiof() function from line art. */
+ if (dist > fading_max) {
+ factor_depth = 0;
+ }
+ else if (dist <= fading_max && dist > fading_min) {
+ factor_depth = (fading_max - dist) / (fading_max - fading_min);
+ }
+ else {
+ factor_depth = 1;
+ }
+ }
+ }
+ return factor_depth;
+}
+
/* opacity strokes */
static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
@@ -140,29 +171,8 @@ static void deformStroke(GpencilModifierData *md,
factor_curve *= BKE_curvemapping_evaluateF(mmd->curve_intensity, 0, value);
}
- float factor_depth = 1;
- if (mmd->flag & GP_OPACITY_FADING) {
- if (mmd->object) {
- float gvert[3];
- mul_v3_m4v3(gvert, ob->obmat, &pt->x);
- float dist = len_v3v3(mmd->object->obmat[3], gvert);
- float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
- float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
-
- /* Better with ratiof() function from line art. */
- if (dist > fading_max) {
- factor_depth = 0;
- }
- else if (dist <= fading_max && dist > fading_min) {
- factor_depth = (fading_max - dist) / (fading_max - fading_min);
- }
- else {
- factor_depth = 1;
- }
- }
- }
-
- factor_curve *= factor_depth;
+ float factor_depth = give_opacity_fading_factor(mmd, ob, &pt->x, true);
+ factor_curve = interpf(mmd->factor, mmd->fading_end_factor, factor_depth);
if (def_nr < 0) {
if (mmd->flag & GP_OPACITY_NORMALIZE) {
@@ -195,28 +205,8 @@ static void deformStroke(GpencilModifierData *md,
gps->fill_opacity_fac = mmd->factor;
- float factor_depth = 1;
- if (mmd->flag & GP_OPACITY_FADING) {
- if (mmd->object) {
-
- float dist = len_v3v3(mmd->object->obmat[3], ob->obmat[3]);
- float fading_max = MAX2(mmd->fading_start, mmd->fading_end);
- float fading_min = MIN2(mmd->fading_start, mmd->fading_end);
-
- /* Better with ratiof() function from line art. */
- if (dist > fading_max) {
- factor_depth = 0;
- }
- else if (dist <= fading_max && dist > fading_min) {
- factor_depth = (fading_max - dist) / (fading_max - fading_min);
- }
- else {
- factor_depth = 1;
- }
- }
- }
-
- gps->fill_opacity_fac *= factor_depth;
+ float factor_depth = give_opacity_fading_factor(mmd, ob, ob->obmat[3], true);
+ gps->fill_opacity_fac = interpf(mmd->factor, mmd->fading_end_factor, factor_depth);
CLAMP(gps->fill_opacity_fac, 0.0f, 1.0f);
}
@@ -284,6 +274,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
uiLayout *sub = uiLayoutColumn(layout, true);
uiItemR(sub, ptr, "fading_start", 0, NULL, ICON_NONE);
uiItemR(sub, ptr, "fading_end", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "fading_end_factor", 0, NULL, ICON_NONE);
}
gpencil_modifier_panel_end(layout, ptr);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
index 736cc7dba6a..f571d5423f4 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
@@ -155,8 +155,6 @@ static void deformStroke(GpencilModifierData *md,
}
}
- curvef *= factor_depth;
-
if ((mmd->flag & GP_THICK_CUSTOM_CURVE) && (mmd->curve_thickness)) {
/* Normalize value to evaluate curve. */
float value = (float)i / (gps->totpoints - 1);
@@ -173,6 +171,9 @@ static void deformStroke(GpencilModifierData *md,
weight *= curvef;
}
+ float fac_begin = mmd->flag & GP_THICK_NORMALIZE ? 1 : mmd->thickness_fac;
+ target *= interpf(fac_begin, mmd->fading_end_factor, factor_depth);
+
pt->pressure = interpf(target, pt->pressure, weight);
CLAMP_MIN(pt->pressure, 0.0f);
@@ -227,6 +228,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
uiLayout *sub = uiLayoutColumn(layout, true);
uiItemR(sub, ptr, "fading_start", 0, NULL, ICON_NONE);
uiItemR(sub, ptr, "fading_end", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "fading_end_factor", 0, NULL, ICON_NONE);
}
gpencil_modifier_panel_end(layout, ptr);
}