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:
authorAlexander Gavrilov <angavrilov@gmail.com>2016-04-18 18:49:03 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2016-05-06 11:40:20 +0300
commit204f55c189d7e7a7b7808b6730a285326e7ac38a (patch)
treee9578146bf9ea0d167b019d77dbd0fc2d746d409 /source/blender/blenkernel/intern/cloth.c
parent2a9ddc808de117786c354a2a6b72c68437d18808 (diff)
Cloth: Fix shrinking to properly respond to animated min/max and weight.
Enable dynamic restlen recomputation based on sew flag and update the shrink factor math within it to call the new utility function.
Diffstat (limited to 'source/blender/blenkernel/intern/cloth.c')
-rw-r--r--source/blender/blenkernel/intern/cloth.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 0954ac945b8..3e6df3ed77c 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -371,7 +371,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
/* Support for dynamic vertex groups, changing from frame to frame */
cloth_apply_vgroup ( clmd, result );
- if ( 0 )
+ if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_SEW )
cloth_update_spring_lengths ( clmd, result );
cloth_update_springs( clmd );
@@ -1200,10 +1200,11 @@ static void cloth_update_spring_lengths( ClothModifierData *clmd, DerivedMesh *d
ClothSpring *spring = search->link;
if ( spring->type != CLOTH_SPRING_TYPE_SEWING ) {
- if (clmd->sim_parms->vgroup_shrink > 0)
- shrink_factor = 1.0f - ((cloth->verts[spring->ij].shrink_factor + cloth->verts[spring->kl].shrink_factor) / 2.0f);
+ if ( spring->type & (CLOTH_SPRING_TYPE_STRUCTURAL | CLOTH_SPRING_TYPE_SHEAR | CLOTH_SPRING_TYPE_BENDING) )
+ shrink_factor = cloth_shrink_factor(clmd, cloth->verts, spring->ij, spring->kl);
else
- shrink_factor = 1.0f - clmd->sim_parms->shrink_min;
+ shrink_factor = 1.0f;
+
spring->restlen = len_v3v3(cloth->verts[spring->kl].xrest, cloth->verts[spring->ij].xrest) * shrink_factor;
}
@@ -1221,7 +1222,8 @@ static void cloth_update_spring_lengths( ClothModifierData *clmd, DerivedMesh *d
clmd->sim_parms->avg_spring_len /= struct_springs;
for (i = 0; i < mvert_num; i++) {
- cloth->verts[i].avg_spring_len = cloth->verts[i].avg_spring_len * 0.49f / ((float)cloth->verts[i].spring_count);
+ if (cloth->verts[i].spring_count > 0)
+ cloth->verts[i].avg_spring_len = cloth->verts[i].avg_spring_len * 0.49f / ((float)cloth->verts[i].spring_count);
}
}