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 Jeroen Bakker
parent c65e4f4e39
commit be8935852b
2 changed files with 7 additions and 5 deletions

View File

@ -280,8 +280,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! */
}