Revamp of multi modifier option!
- error fix: overall weight group value was used inverted - added "Inv" button to make weight group work inverted - added bigger, more clear Multi Modifier button
This commit is contained in:
@@ -801,6 +801,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
|
||||
int use_envelope = deformflag & ARM_DEF_ENVELOPE;
|
||||
int use_quaternion = deformflag & ARM_DEF_QUATERNION;
|
||||
int bbone_rest_def = deformflag & ARM_DEF_B_BONE_REST;
|
||||
int invert_vgroup= deformflag & ARM_DEF_INVERT_VGROUP;
|
||||
int numGroups = 0; /* safety for vertexgroup index overflow */
|
||||
int i, target_totvert = 0; /* safety for vertexgroup overflow */
|
||||
int use_dverts = 0;
|
||||
@@ -921,7 +922,10 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
|
||||
}
|
||||
/* hackish: the blending factor can be used for blending with prevCos too */
|
||||
if(prevCos) {
|
||||
prevco_weight= armature_weight;
|
||||
if(invert_vgroup)
|
||||
prevco_weight= 1.0f-armature_weight;
|
||||
else
|
||||
prevco_weight= armature_weight;
|
||||
armature_weight= 1.0f;
|
||||
}
|
||||
}
|
||||
@@ -1018,11 +1022,11 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
|
||||
|
||||
|
||||
/* interpolate with previous modifier position using weight group */
|
||||
if(prevCos && prevco_weight!=1.0f) {
|
||||
if(prevCos) {
|
||||
float mw= 1.0f - prevco_weight;
|
||||
vertexCos[i][0]= mw*vertexCos[i][0] + prevco_weight*co[0];
|
||||
vertexCos[i][1]= mw*vertexCos[i][1] + prevco_weight*co[1];
|
||||
vertexCos[i][2]= mw*vertexCos[i][2] + prevco_weight*co[2];
|
||||
vertexCos[i][0]= prevco_weight*vertexCos[i][0] + mw*co[0];
|
||||
vertexCos[i][1]= prevco_weight*vertexCos[i][1] + mw*co[1];
|
||||
vertexCos[i][2]= prevco_weight*vertexCos[i][2] + mw*co[2];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -112,10 +112,11 @@ typedef struct bArmature {
|
||||
#define ARM_ENVELOPE 3
|
||||
|
||||
/* armature->deformflag */
|
||||
#define ARM_DEF_VGROUP 1
|
||||
#define ARM_DEF_ENVELOPE 2
|
||||
#define ARM_DEF_QUATERNION 4
|
||||
#define ARM_DEF_B_BONE_REST 8
|
||||
#define ARM_DEF_VGROUP 1
|
||||
#define ARM_DEF_ENVELOPE 2
|
||||
#define ARM_DEF_QUATERNION 4
|
||||
#define ARM_DEF_B_BONE_REST 8
|
||||
#define ARM_DEF_INVERT_VGROUP 16
|
||||
|
||||
/* armature->pathflag */
|
||||
#define ARM_PATH_FNUMS (1<<0)
|
||||
|
||||
@@ -1632,7 +1632,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
|
||||
if(wmd->flag & MOD_WAVE_NORM)
|
||||
height += 19;
|
||||
} else if (md->type==eModifierType_Armature) {
|
||||
height = 86;
|
||||
height = 105;
|
||||
} else if (md->type==eModifierType_Hook) {
|
||||
HookModifierData *hmd = (HookModifierData*) md;
|
||||
height = 86;
|
||||
@@ -1959,12 +1959,15 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
|
||||
|
||||
but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ", lx, (cy-=19), buttonWidth-40,19, &amd->defgrp_name, 0.0, 31.0, 0, 0, "Vertex Group name to control overall armature influence");
|
||||
uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
|
||||
uiDefButS(block, TOG, B_ARM_RECALCDATA, "MM", lx+buttonWidth-40,cy, 40, 20, &amd->multi, 0, 0, 0, 0, "MultiModifier: This modifier uses same input as previous modifier, and mixes using this vgroup");
|
||||
uiDefButBitS(block, TOG, ARM_DEF_INVERT_VGROUP, B_ARM_RECALCDATA, "Inv", lx+buttonWidth-40,cy, 40, 20, &amd->deformflag, 0, 0, 0, 0, "Invert vertex group influence");
|
||||
|
||||
uiDefButBitS(block, TOG, ARM_DEF_VGROUP, B_ARM_RECALCDATA, "Vert.Groups", lx,cy-=19,buttonWidth/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable VertexGroups defining deform");
|
||||
uiDefButBitS(block, TOG, ARM_DEF_ENVELOPE, B_ARM_RECALCDATA, "Envelopes", lx+buttonWidth/2,cy,(buttonWidth + 1)/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable Bone Envelopes defining deform");
|
||||
uiDefButBitS(block, TOG, ARM_DEF_QUATERNION, B_ARM_RECALCDATA, "Quaternion", lx,(cy-=19),buttonWidth/2,20, &amd->deformflag, 0, 0, 0, 0, "Enable deform rotation interpolation with Quaternions");
|
||||
uiDefButBitS(block, TOG, ARM_DEF_B_BONE_REST, B_ARM_RECALCDATA, "B-Bone Rest", lx+buttonWidth/2,cy,(buttonWidth + 1)/2,20, &amd->deformflag, 0, 0, 0, 0, "Make B-Bones deform already in rest position");
|
||||
|
||||
uiDefButS(block, TOG, B_ARM_RECALCDATA, "MultiModifier", lx,cy-=19, buttonWidth, 20, &amd->multi, 0, 0, 0, 0, "Use same input as previous modifier, and mix results using overall vgroup");
|
||||
|
||||
} else if (md->type==eModifierType_Hook) {
|
||||
HookModifierData *hmd = (HookModifierData*) md;
|
||||
uiDefButF(block, NUM, B_MODIFIER_RECALC, "Falloff: ", lx, (cy-=19), buttonWidth,19, &hmd->falloff, 0.0, 100.0, 100, 0, "If not zero, the distance from hook where influence ends");
|
||||
|
||||
Reference in New Issue
Block a user