Fix invert vertex group weight miscalculation for modifiers

Warp & weight vertex-group editing modifiers miscalculated vertex weight
inversion, the weights were multiplied before being subtracted from 1.

Ref D8241
This commit is contained in:
Cody Winchester 2020-09-19 14:08:38 +10:00 committed by Campbell Barton
parent 94a63f7505
commit e0f13f41c6
Notes: blender-bot 2023-02-14 06:46:23 +01:00
Referenced by issue #80396, Potential candidates for corrective releases
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
2 changed files with 7 additions and 5 deletions

View File

@ -279,8 +279,9 @@ static void warpModifier_do(WarpModifierData *wmd,
/* skip if no vert group found */
if (defgrp_index != -1) {
dv = &dvert[i];
weight = invert_vgroup ? 1.0f - BKE_defvert_find_weight(dv, defgrp_index) * strength :
BKE_defvert_find_weight(dv, defgrp_index) * strength;
weight = (invert_vgroup ? (1.0f - BKE_defvert_find_weight(dv, defgrp_index)) :
BKE_defvert_find_weight(dv, defgrp_index)) *
strength;
if (weight <= 0.0f) {
continue;
}

View File

@ -249,9 +249,10 @@ void weightvg_do_mask(const ModifierEvalContext *ctx,
/* For each weight (vertex), make the mix between org and new weights. */
for (i = 0; i < num; i++) {
int idx = indices ? indices[i] : i;
const float f = invert_vgroup_mask ?
1.0f - BKE_defvert_find_weight(&dvert[idx], ref_didx) * fact :
BKE_defvert_find_weight(&dvert[idx], ref_didx) * fact;
const float f = (invert_vgroup_mask ?
(1.0f - BKE_defvert_find_weight(&dvert[idx], ref_didx)) :
BKE_defvert_find_weight(&dvert[idx], ref_didx)) *
fact;
org_w[i] = (new_w[i] * f) + (org_w[i] * (1.0f - f));
/* If that vertex is not in ref vgroup, assume null factor, and hence do nothing! */
}