[Bf-blender-cvs] [13818c47cfb] cloth-improvements: Merge branch 'master' into cloth-improvements
Luca Rood
noreply at git.blender.org
Thu Jul 19 17:47:20 CEST 2018
Commit: 13818c47cfb946950c8f3e97209076a9e43db4a7
Author: Luca Rood
Date: Thu Jul 19 16:02:49 2018 +0200
Branches: cloth-improvements
https://developer.blender.org/rB13818c47cfb946950c8f3e97209076a9e43db4a7
Merge branch 'master' into cloth-improvements
===================================================================
===================================================================
diff --cc release/datafiles/locale
index c93ed11a47b,d3349b42856..2b3c19f5f61
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit c93ed11a47b3016cf59711ec16de2e2e94c30e99
-Subproject commit d3349b42856d00c278f72f2a5909a6c96b9cdb5e
++Subproject commit 2b3c19f5f61fc72dba56a7edfdc4e55e2327dc1f
diff --cc release/scripts/addons
index 371960484a3,9ae033c49c1..51e18ead5d6
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 371960484a38fc64e0a2635170a41a0d8ab2f6bd
-Subproject commit 9ae033c49c1b16718eac6306bdc271a5e6e6bf38
++Subproject commit 51e18ead5d66e91ad161b971eeacc93e7cd91942
diff --cc release/scripts/addons_contrib
index a8515cfdfe9,f178e6c933a..a52733b58d9
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit a8515cfdfe9a98127b592f36fcbe51b7e23b969a
-Subproject commit f178e6c933a25c621a5cc7d92935b66cd2ec2f5d
++Subproject commit a52733b58d95ce60ecde95a9eca242e7319c285a
diff --cc source/blender/blenkernel/BKE_cloth.h
index e9f629847fa,6b76ec33c06..fdc06d76706
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@@ -137,24 -132,17 +137,24 @@@ ClothVertex
typedef struct ClothSpring {
int ij; /* Pij from the paper, one end of the spring. */
int kl; /* Pkl from the paper, one end of the spring. */
- int mn;
- float restlen; /* The original length of the spring. */
+ int mn; /* For hair springs: third vertex index; For bending springs: edge index */
+ int *pa; /* array of vert indices for poly a (for bending springs) */
+ int *pb; /* array of vert indices for poly b (for bending springs) */
+ int la; /* length of *pa */
+ int lb; /* length of *pb */
+ float restlen; /* The original length of the spring */
+ float restang; /* The original angle of the bending springs */
+ float lenfact; /* Factor of restlen used for plasticity */
+ float angoffset; /* Offset of restang used for plasticity */
int type; /* types defined in BKE_cloth.h ("springType") */
int flags; /* defined in BKE_cloth.h, e.g. deactivated due to tearing */
- float stiffness; /* stiffness factor from the vertex groups */
- float editrestlen;
+ float lin_stiffness; /* linear stiffness factor from the vertex groups */
+ float ang_stiffness; /* angular stiffness factor from the vertex groups */
+ float planarity;
-
+
/* angular bending spring target and derivatives */
float target[3];
-}
-ClothSpring;
+} ClothSpring;
// some macro enhancements for vector treatment
#define VECADDADD(v1,v2,v3) {*(v1)+= *(v2) + *(v3); *(v1+1)+= *(v2+1) + *(v3+1); *(v1+2)+= *(v2+2) + *(v3+2);}
diff --cc source/blender/blenkernel/intern/cloth.c
index e98f873fd60,26f998b3cb4..8f460e12bb8
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@@ -513,7 -549,11 +514,7 @@@ void cloth_free_modifier(ClothModifierD
// we save our faces for collision objects
if (cloth->tri)
MEM_freeN(cloth->tri);
-
+
- if (cloth->edgeset)
- BLI_edgeset_free(cloth->edgeset);
-
-
/*
if (clmd->clothObject->facemarks)
MEM_freeN(clmd->clothObject->facemarks);
@@@ -719,21 -723,16 +720,21 @@@ static void cloth_apply_vgroup(ClothMod
if ( verts->goal >= SOFTGOALSNAP )
verts->flags |= CLOTH_VERT_FLAG_PINNED;
}
-
+
- if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_SCALING ) {
- if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_struct-1)) {
- verts->struct_stiff = dvert->dw [j].weight;
- verts->shear_stiff = dvert->dw [j].weight;
- }
+ if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_struct-1)) {
+ verts->struct_stiff = dvert->dw [j].weight;
+ }
- if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_bend-1)) {
- verts->bend_stiff = dvert->dw [j].weight;
- }
+ if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_shear-1)) {
+ verts->shear_stiff = dvert->dw [j].weight;
+ }
+
+ if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_bend-1)) {
+ verts->bend_stiff = dvert->dw [j].weight;
+ }
+
+ if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_planar - 1)) {
+ verts->planarity = dvert->dw[j].weight;
}
if (clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_SELF ) {
@@@ -777,8 -781,10 +778,8 @@@ static int cloth_from_object(Object *ob
ClothVertex *verts = NULL;
float (*shapekey_rest)[3] = NULL;
float tnull[3] = {0, 0, 0};
- Cloth *cloth = NULL;
- float maxdist = 0;
- // If we have a clothObject, free it.
+ // If we have a clothObject, free it.
if ( clmd->clothObject != NULL ) {
cloth_free_modifier ( clmd );
if (G.debug_value > 0)
@@@ -852,16 -832,15 +852,16 @@@
copy_v3_v3(verts->xrest, shapekey_rest[i]);
mul_m4_v3(ob->obmat, verts->xrest);
}
- else
+ else {
copy_v3_v3(verts->xrest, verts->x);
+ }
}
-
+
/* no GUI interface yet */
- verts->mass = clmd->sim_parms->mass;
+ verts->mass = clmd->sim_parms->mass;
verts->impulse_count = 0;
- if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL )
+ if ( clmd->sim_parms->vgroup_mass>0 )
verts->goal= clmd->sim_parms->defgoal;
else
verts->goal= 0.0f;
@@@ -877,13 -856,11 +877,13 @@@
verts->impulse_count = 0;
copy_v3_v3 ( verts->impulse, tnull );
+
+ verts->col_trouble = 0.0f;
}
-
+
// apply / set vertex groups
// has to be happen before springs are build!
- cloth_apply_vgroup (clmd, dm);
+ cloth_apply_vgroup(clmd, dm, ob);
if ( !cloth_build_springs ( clmd, dm ) ) {
cloth_free_modifier ( clmd );
@@@ -898,9 -875,13 +898,9 @@@
if (!first)
BKE_cloth_solver_set_positions(clmd);
- clmd->clothObject->bvhtree = bvhtree_build_from_cloth ( clmd, MAX2(clmd->coll_parms->epsilon, clmd->coll_parms->distance_repel) );
+ clmd->clothObject->bvhtree = bvhtree_build_from_cloth ( clmd, clmd->coll_parms->epsilon );
-
+
- for (i = 0; i < dm->getNumVerts(dm); i++) {
- maxdist = MAX2(maxdist, clmd->coll_parms->selfepsilon* ( cloth->verts[i].avg_spring_len*2.0f));
- }
-
- clmd->clothObject->bvhselftree = bvhselftree_build_from_cloth ( clmd, maxdist );
+ clmd->clothObject->bvhselftree = bvhtree_build_from_cloth ( clmd, clmd->coll_parms->selfepsilon );
return 1;
}
@@@ -957,39 -938,6 +957,39 @@@ BLI_INLINE void spring_verts_ordered_se
}
}
+// be careful: implicit solver has to be resettet when using this one!
+// --> only for implicit handling of this spring!
+#if 0 // Unused for now, but might come in handy when implementing something with dynamic spring count
+static int cloth_add_spring(ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type)
+{
+ Cloth *cloth = clmd->clothObject;
+ ClothSpring *spring = NULL;
-
++
+ if (cloth && spring_type != CLOTH_SPRING_TYPE_BENDING) {
+ // TODO: look if this spring is already there
-
++
+ spring = (ClothSpring *)MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" );
-
++
+ if (!spring)
+ return 0;
-
++
+ spring->ij = indexA;
+ spring->kl = indexB;
+ spring->restlen = restlength;
+ spring->type = spring_type;
+ spring->flags = 0;
+ spring->lin_stiffness = 0.0f;
-
++
+ cloth->numsprings++;
-
++
+ BLI_linklist_prepend ( &cloth->springs, spring );
-
++
+ return 1;
+ }
+ return 0;
+}
+#endif
+
static void cloth_free_edgelist(LinkNodePair *edgelist, unsigned int mvert_num)
{
if (edgelist) {
@@@ -1101,11 -996,11 +1101,11 @@@ static void cloth_hair_update_bending_t
ClothSpring *spring = search->link;
ClothHairData *hair_ij, *hair_kl;
bool is_root = spring->kl != prev_mn;
-
+
- if (spring->type != CLOTH_SPRING_TYPE_BENDING_ANG) {
+ if (spring->type != CLOTH_SPRING_TYPE_BENDING_HAIR) {
continue;
}
-
+
hair_ij = &clmd->hairdata[spring->ij];
hair_kl = &clmd->hairdata[spring->kl];
if (is_root) {
@@@ -1176,11 -1071,11 +1176,11 @@@ static void cloth_hair_update_bending_r
ClothSpring *spring = search->link;
ClothHairData *hair_ij, *hair_kl;
bool is_root = spring->kl != prev_mn;
-
+
- if (spring->type != CLOTH_SPRING_TYPE_BENDING_ANG) {
+ if (spring->type != CLOTH_SPRING_TYPE_BENDING_HAIR) {
continue;
}
-
+
hair_ij = &clmd->hairdata[spring->ij];
hair_kl = &clmd->hairdata[spring->kl];
if (is_root) {
@@@ -1617,82 -1391,109 +1617,82 @@@ static int cloth_build_springs ( ClothM
return 0;
}
- spring_verts_ordered_set(spring, tspring2->ij, index2);
- shrink_factor = cloth_shrink_factor(clmd, cloth->verts, spring->ij, spring->kl);
- spring->restlen = len_v3v3(cloth->verts[spring->kl].xrest, cloth->verts[spring->ij].xrest) * shrink_factor;
- spring->type = CLOTH_SPRING_TYPE_BENDING;
- spring->stiffness = (cloth->verts[spring->kl].bend_stiff + cloth->verts[spring->ij].bend_stiff) / 2.0f;
- BLI_edgeset_insert(edgeset, spring->ij, spring->kl);
- bend_springs++;
+ tmp_loop = mloop + mpoly[curr_ref->index].loopstart;
- BLI_linklist_prepend ( &cloth->springs, spring );
- }
- search = search->next;
- }
- search2 = search2->next;
- }
- }
- else if (struct_springs > 2) {
- if (G.debug_value != 1112) {
- search = cloth->springs;
- search2 = search->next;
- while (search && search2) {
- tspring = search->link;
- tspring2 = search2->link;
+ for (k = 0; k < spring->la; k++, tmp_loop++) {
+ spring->pa[k] = tmp_loop->v;
+ }
- if (tspring->ij == tspring2->kl) {
- spring = (ClothSpring *)MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" );
+ tmp_loop = mloop + mpoly[i].loopstart;
- if (!spring) {
- cloth_free_errorsprings(cloth, edgelist);
- return 0;
+ for (k = 0; k < spring->lb; k++, tmp_loop++) {
+ spring->pb[k] = tmp_loop->v;
}
- spring->ij = tspring2->ij;
- spring->kl = tspring->ij;
- spring->mn = tspring->kl;
- spring->restlen = len_v3v3(cloth->verts[spring->kl].
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list