diff options
author | YimingWu <xp8110@outlook.com> | 2020-10-19 12:05:56 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2020-10-19 12:05:56 +0300 |
commit | 0691c3d6407d944147178ebad13f012e1bb7c1ed (patch) | |
tree | 31654a1bef6929586d9aa4984d82b2ba2cdf63ad /source/blender/gpencil_modifiers | |
parent | f63859c28511539880a5748ccd1689f305d18b16 (diff) |
GPencil: Better fading effect arguments.
Diffstat (limited to 'source/blender/gpencil_modifiers')
-rw-r--r-- | source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c | 81 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c | 6 |
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); } |