[Bf-blender-cvs] [1eba6949455] temp-fracture-modifier-2.8: attempt for fixing fake cloth + dynamic fracture

Martin Felke noreply at git.blender.org
Fri Nov 30 01:48:17 CET 2018


Commit: 1eba69494557103479da4824e3d3c3604e028011
Author: Martin Felke
Date:   Fri Nov 30 01:48:05 2018 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB1eba69494557103479da4824e3d3c3604e028011

attempt for fixing fake cloth + dynamic fracture

===================================================================

M	source/blender/blenkernel/intern/fracture.c
M	source/blender/blenkernel/intern/fracture_prefractured.c
M	source/blender/blenkernel/intern/fracture_rigidbody.c
M	source/blender/blenkernel/intern/fracture_util.c

===================================================================

diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index 356fb7ae775..218e410e457 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -1226,7 +1226,7 @@ static void do_marking(FractureModifierData *fmd, Mesh *result)
 void BKE_fracture_copy_customdata(CustomData* src, CustomData* dst,CustomDataMask mask, int src_ofs, int dst_ofs,
                               int copyelem, int totelem)
 {
-	//CustomData_copy_data(src, dst, src_ofs, dst_ofs, copyelem);
+
 	CustomDataLayer *layer;
 	int i;
 	for (i = 0; i < src->totlayer; i++)
@@ -1288,7 +1288,7 @@ void BKE_fracture_clear_cache(FractureModifierData* fmd, Scene *scene)
 			mi->rots = MEM_callocN(sizeof (float) * 4 *frame, "mi->rots");
 			mi->vels = MEM_callocN(sizeof (float) * 3 *frame, "mi->vels");
 			mi->aves = MEM_callocN(sizeof (float) * 3 *frame, "mi->aves");
-			mi->fractured = false;
+			//mi->fractured = false;
 
 			if (!mi->rigidbody->shared->physics_object)
 			{
@@ -2677,7 +2677,7 @@ void BKE_fracture_do(FractureModifierData *fmd, Shard *mi, Object *obj, Depsgrap
 					result->id = mi->id + j;
 					result->rigidbody->flag |= RBO_FLAG_NEEDS_VALIDATE;
 					result->rigidbody->flag |= RBO_FLAG_NEEDS_RESHAPE;
-					BKE_rigidbody_validate_sim_shard(scene->rigidbody_world, result, obj, fmd, true, true, size);
+					//BKE_rigidbody_validate_sim_shard(scene->rigidbody_world, result, obj, fmd, true, true, size);
 
 					j++;
 				}
diff --git a/source/blender/blenkernel/intern/fracture_prefractured.c b/source/blender/blenkernel/intern/fracture_prefractured.c
index 2a3e2660976..9d111972a2d 100644
--- a/source/blender/blenkernel/intern/fracture_prefractured.c
+++ b/source/blender/blenkernel/intern/fracture_prefractured.c
@@ -246,6 +246,7 @@ Mesh* BKE_fracture_apply(FractureModifierData *fmd, Object *ob, Mesh *me_orig, D
 			fmd->flag |= MOD_FRACTURE_USE_DYNAMIC;
 		}
 
+
 		fmd->shared->flag |= MOD_FRACTURE_REFRESH_CONSTRAINTS;
 		fmd->shared->flag |= MOD_FRACTURE_REFRESH_AUTOHIDE;
 	}
@@ -255,7 +256,7 @@ Mesh* BKE_fracture_apply(FractureModifierData *fmd, Object *ob, Mesh *me_orig, D
 		BKE_fracture_dynamic_do(fmd, ob, scene, depsgraph, bmain);
 
 		fmd->shared->flag &= ~ MOD_FRACTURE_REFRESH_DYNAMIC;
-		fmd->shared->flag |= MOD_FRACTURE_REFRESH_AUTOHIDE;
+		//fmd->shared->flag |= MOD_FRACTURE_REFRESH_AUTOHIDE;
 	}
 
 	if ((fmd->flag & MOD_FRACTURE_USE_ANIMATED_MESH) && fmd->anim_mesh_ob)
diff --git a/source/blender/blenkernel/intern/fracture_rigidbody.c b/source/blender/blenkernel/intern/fracture_rigidbody.c
index 33375c364fa..b12c2d452fa 100644
--- a/source/blender/blenkernel/intern/fracture_rigidbody.c
+++ b/source/blender/blenkernel/intern/fracture_rigidbody.c
@@ -2134,8 +2134,9 @@ bool BKE_rigidbody_modifier_update(Scene* scene, Object* ob, RigidBodyWorld *rbw
 				}
 
 				BKE_rigidbody_shard_validate(rbw, is_empty ? NULL : mi, ob, fmd, do_rebuild,
-											 fmd->flag & MOD_FRACTURE_USE_DYNAMIC, bbsize, frame);
+											 ((fmd->flag & MOD_FRACTURE_USE_DYNAMIC) && mi->fractured), bbsize, frame);
 
+				mi->fractured = false;
 				mi->constraint_index = mi->id;
 
 			}
@@ -2214,12 +2215,12 @@ bool BKE_rigidbody_modifier_update(Scene* scene, Object* ob, RigidBodyWorld *rbw
 			else if (rbsc->flag & RBC_FLAG_NEEDS_VALIDATE && !(fmd->flag & MOD_FRACTURE_USE_DYNAMIC)) {
 				BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, false);
 			}
-			else if (fmd->flag & MOD_FRACTURE_USE_DYNAMIC) {
+			else if ((fmd->flag & MOD_FRACTURE_USE_DYNAMIC)) {
 				if (rbsc->mi1 && rbsc->mi2) {
 					if (!BKE_fracture_meshisland_check_frame(fmd, rbsc->mi1, frame) &&
 					    !BKE_fracture_meshisland_check_frame(fmd, rbsc->mi2, frame))
 					{
-						rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
+						//rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
 						BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, false);
 					}
 				}
diff --git a/source/blender/blenkernel/intern/fracture_util.c b/source/blender/blenkernel/intern/fracture_util.c
index c1e152bb38e..d8b130634d4 100644
--- a/source/blender/blenkernel/intern/fracture_util.c
+++ b/source/blender/blenkernel/intern/fracture_util.c
@@ -400,16 +400,25 @@ Mesh* BKE_fracture_mesh_boolean(Mesh* geometry, Mesh* shard, Object* obj, Boolea
 {
 	Mesh* result = NULL;
 
+#if 0
+	int totvert = MIN2(shard->totvert, geometry->totvert);
+	int totedge = MIN2(shard->totedge, geometry->totedge);
+	int totloop = MIN2(shard->totloop, geometry->totloop);
+	int totpoly = MIN2(shard->totpoly, geometry->totpoly);
+#endif
+
 	if (ctx->use_fractal == false)
 	{
 		uv_unwrap_raw_geometry(shard, ctx->uv_layer, true);
 		do_set_inner_material(shard, ctx->inner_material_index, obj);
 	}
 
-	BKE_fracture_copy_customdata(&geometry->vdata, &shard->vdata, CD_MASK_ISLAND, 0, 0, shard->totvert, shard->totvert);
-	BKE_fracture_copy_customdata(&geometry->edata, &shard->edata, CD_MASK_ISLAND, 0, 0, shard->totedge, shard->totedge);
-	BKE_fracture_copy_customdata(&geometry->ldata, &shard->ldata, CD_MASK_ISLAND, 0, 0, shard->totloop, shard->totloop);
-	BKE_fracture_copy_customdata(&geometry->pdata, &shard->pdata, CD_MASK_ISLAND, 0, 0, shard->totpoly, shard->totpoly);
+#if 0
+	BKE_fracture_copy_customdata(&geometry->vdata, &shard->vdata, CD_MASK_ISLAND, 0, 0, totvert, totvert);
+	BKE_fracture_copy_customdata(&geometry->edata, &shard->edata, CD_MASK_ISLAND, 0, 0, totedge, totedge);
+	BKE_fracture_copy_customdata(&geometry->ldata, &shard->ldata, CD_MASK_ISLAND, 0, 0, totloop, totloop);
+	BKE_fracture_copy_customdata(&geometry->pdata, &shard->pdata, CD_MASK_ISLAND, 0, 0, totpoly, totpoly);
+#endif
 
 	result = BKE_boolean_operation(geometry, obj, shard, obj, ctx->operation, ctx->thresh, NULL);
 	/*0 == intersection, 2 == difference*/



More information about the Bf-blender-cvs mailing list