[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