[Bf-blender-cvs] [7faf3f47363] temp-fracture-modifier-2.8: Merge remote-tracking branch 'origin/master' into fracture_modifier-2.8
Martin Felke
noreply at git.blender.org
Sat Mar 2 19:40:23 CET 2019
Commit: 7faf3f47363058ba4a2dfb15f180deffe706573e
Author: Martin Felke
Date: Sat Mar 2 10:43:27 2019 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB7faf3f47363058ba4a2dfb15f180deffe706573e
Merge remote-tracking branch 'origin/master' into fracture_modifier-2.8
# Conflicts:
# intern/cycles/blender/blender_mesh.cpp
# intern/rigidbody/RBI_api.h
# intern/rigidbody/rb_bullet_api.cpp
# source/blender/blenkernel/BKE_rigidbody.h
# source/blender/blenkernel/intern/rigidbody.c
# source/blender/depsgraph/intern/builder/deg_builder_relations.cc
# source/blender/draw/intern/draw_manager.c
# source/blender/editors/physics/rigidbody_object.c
# source/blender/makesdna/DNA_modifier_types.h
# source/blender/makesdna/DNA_rigidbody_types.h
# source/blender/makesrna/intern/rna_modifier.c
# source/blender/makesrna/intern/rna_rigidbody.c
# source/blender/modifiers/intern/MOD_boolean.c
# source/blender/modifiers/intern/MOD_multires.c
# source/blender/modifiers/intern/MOD_remesh.c
===================================================================
===================================================================
diff --cc intern/cycles/blender/blender_mesh.cpp
index 836bdc91bfd,8e81e3ac121..1174fafa692
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@@ -975,87 -971,6 +971,67 @@@ static void sync_mesh_fluid_motion(BL::
}
}
+static bool sync_mesh_precalculated_motion(BL::Mesh& b_mesh, BL::Object& b_ob, BL::Scene& b_scene, Scene *scene, Mesh *mesh)
+{
+ if(scene->need_motion() == Scene::MOTION_NONE)
+ return false;
+
+ /* can have both modifiers, if we have a remesher, we take its data first (TODO, pass data from FM
+ * to remesher in the future, too) */
+
+ BL::RemeshModifier b_remesher = object_metaball_remesher_find(b_ob);
+ BL::FractureModifier b_fracture = object_fracture_modifier_find(b_ob);
+
+ if (!(b_remesher || b_fracture))
+ return false;
+
+ /* Find or add attribute */
+ float3 *P = &mesh->verts[0];
+ Attribute *attr_mP = mesh->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
+
+ if(!attr_mP) {
+ attr_mP = mesh->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
+ }
+
+ /* Only export previous and next frame, we don't have any in between data. */
+ float motion_times[2] = {-1.0f, 1.0f};
+ for(int step = 0; step < 2; step++) {
+ /* those are TIMES, but treated like Frames ? makes too high values, so take fps into account*/
+ float relative_time = motion_times[step] * scene->motion_shutter_time() * 0.5f / b_scene.render().fps();
+ float3 *mP = attr_mP->data_float3() + step*mesh->verts.size();
+
+ int i = 0;
+
+ {
+ BL::MeshVertexFloatPropertyLayer vlX = b_mesh.vertex_layers_float[std::string("velX")];
+ BL::MeshVertexFloatPropertyLayer vlY = b_mesh.vertex_layers_float[std::string("velY")];
+ BL::MeshVertexFloatPropertyLayer vlZ = b_mesh.vertex_layers_float[std::string("velZ")];
+
+ BL::Pointer ptrX = (BL::Pointer)vlX;
+ BL::Pointer ptrY = (BL::Pointer)vlY;
+ BL::Pointer ptrZ = (BL::Pointer)vlZ;
+
+ if (!ptrX || !ptrY || !ptrZ || vlX.data.length() != mesh->verts.size())
+ {
+ return false;
+ }
+
+ for(i = 0; i < mesh->verts.size(); i++)
+ {
+ float x = vlX.data[i].value();
+ float y = vlY.data[i].value();
+ float z = vlZ.data[i].value();
+
+ //printf("Vel %f %f %f\n", (double)x, (double)y, (double)z);
+ mP[i] = P[i] + make_float3(x, y, z) * relative_time;
+ }
+ }
- #if 0
- else if (b_fracture)
- {
- /*directly access rigidbody data here, take lin+angvel */
- //iterate over shard's verts, each vert moves "same" as shard does, well we need to calculate
- BL::FractureModifierShared::shards_iterator si;
- int j = 0;
-
- for(b_fracture.shared().shards.begin(si); si != b_fracture.shared().shards.end(); ++si, ++i)
- {
- BL::Mesh::vertices_iterator vi;
- for(si->mesh().vertices.begin(vi); vi != si->mesh().vertices.end(); ++vi, ++j) {
- BL::RigidBodyObject rbo = si->rigidbody();
-
- if (j < mesh->verts.size())
- mP[j] = P[j] + (get_float3(rbo.linear_velocity()) + get_float3(rbo.angular_velocity())) * relative_time;
- }
- }
- }
- #endif
+ }
+
+ return true;
+}
+
+
Mesh *BlenderSync::sync_mesh(BL::Depsgraph& b_depsgraph,
BL::Object& b_ob,
BL::Object& b_ob_instance,
@@@ -1177,13 -1091,12 +1152,15 @@@
create_mesh_volume_attributes(scene, b_ob, mesh, b_scene.frame_current());
}
- if(view_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
+ /* Sync hair curves. */
+ if(view_layer.use_hair && show_particles && mesh->subdivision_type == Mesh::SUBDIVISION_NONE) {
sync_curves(mesh, b_mesh, b_ob, false);
+ }
++ /* Sync precalculated motion vectors, aka Metaball remesh and Fracture Modifier */
+ sync_mesh_precalculated_motion(b_mesh, b_ob, b_scene, scene, mesh);
+
- /* free derived mesh */
- b_data.meshes.remove(b_mesh, false, true, false);
+ free_object_to_mesh(b_data, b_ob, b_mesh);
}
}
mesh->geometry_flags = requested_geometry_flags;
diff --cc source/blender/blenkernel/BKE_library.h
index 7e260b34e36,9409c8710d6..657876012ba
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@@ -119,16 -145,18 +145,19 @@@ enum
LIB_ID_FREE_NO_DEG_TAG = 1 << 8, /* Do not tag freed ID for update in depsgraph. */
LIB_ID_FREE_NO_UI_USER = 1 << 9, /* Do not attempt to remove freed ID from UI data/notifiers/... */
+ LIB_ID_FREE_COPY_ON_WRITE = 1 << 10, /* Mark this free operation as being triggered by CoW*/
};
+ void BKE_libblock_free_datablock(struct ID *id, const int flag) ATTR_NONNULL();
+ void BKE_libblock_free_data(struct ID *id, const bool do_id_user) ATTR_NONNULL();
+
void BKE_id_free_ex(struct Main *bmain, void *idv, int flag, const bool use_flag_from_idtag);
void BKE_id_free(struct Main *bmain, void *idv);
- /* Those three naming are bad actually, should be BKE_id_free... (since it goes beyond mere datablock). */
- /* "Deprecated" old API */
- void BKE_libblock_free_ex(struct Main *bmain, void *idv, const bool do_id_user, const bool do_ui_user) ATTR_NONNULL();
- void BKE_libblock_free(struct Main *bmain, void *idv) ATTR_NONNULL();
- void BKE_libblock_free_us(struct Main *bmain, void *idv) ATTR_NONNULL();
+
+ void BKE_id_free_us(struct Main *bmain, void *idv) ATTR_NONNULL();
+
+ void BKE_id_delete(struct Main *bmain, void *idv) ATTR_NONNULL();
+ void BKE_id_multi_tagged_delete(struct Main *bmain) ATTR_NONNULL();
void BKE_libblock_management_main_add(struct Main *bmain, void *idv);
void BKE_libblock_management_main_remove(struct Main *bmain, void *idv);
diff --cc source/blender/blenkernel/BKE_rigidbody.h
index 1f940fa178c,4c644ee43fc..4652f401185
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@@ -17,17 -15,11 +17,17 @@@
*
* The Original Code is Copyright (C) 2013 Blender Foundation
* All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
- * Contributor(s): Joshua Leung, Sergej Reich
++ * Contributor(s): Joshua Leung, Sergej Reich, Martin Felke
+ *
+ * ***** END GPL LICENSE BLOCK *****
*/
-/** \file
- * \ingroup blenkernel
- * \brief API for Blender-side Rigid Body stuff
+/** \file BKE_rigidbody.h
+ * \ingroup blenkernel
+ * \brief API for Blender-side Rigid Body stuff
*/
@@@ -134,44 -97,13 +134,44 @@@ void BKE_rigidbody_update_ob_array(stru
/* -------------- */
/* Simulation */
-void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle);
-void BKE_rigidbody_sync_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
+void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3],
+ float quat[4], float rotAxis[3], float rotAngle);
- void BKE_rigidbody_sync_transforms(struct Scene* scene, struct Object *ob, float ctime);
++void BKE_rigidbody_sync_transforms(struct Scene* scene, struct Object *ob, struct Depsgraph *depsgraph);
bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime);
-void BKE_rigidbody_cache_reset(struct RigidBodyWorld *rbw);
+void BKE_rigidbody_cache_reset(struct Scene *scene);
void BKE_rigidbody_rebuild_world(struct Depsgraph *depsgraph, struct Scene *scene, float ctime);
void BKE_rigidbody_do_simulation(struct Depsgraph *depsgraph, struct Scene *scene, float ctime);
+
+// other misc stuff (implemented in rigidbody.c or fracture_rigidbody.c
+struct rbCollisionShape *BKE_rigidbody_get_shape_trimesh_from_mesh(struct Object *ob, struct Mesh* me);
+struct rbCollisionShape *BKE_rigidbody_get_shape_convexhull_from_mesh(struct Mesh *dm, float margin, bool *can_embed);
+void BKE_rigidbody_update_sim_ob(struct Scene *scene, struct RigidBodyWorld *rbw, struct Object *ob,
+ struct RigidBodyOb *rbo, float centroid[3], struct Shard *mi, float size[3],
+ struct FractureModifierData *fmd, struct Depsgraph *depsgraph);
+
+struct Shard* BKE_rigidbody_closest_meshisland_to_point(struct FractureModifierData* fmd, struct Object *ob,
+ struct Object *ob2, struct Scene* scene);
+
+int BKE_rigidbody_filter_callback(void* scene, void* island1, void* island2, void *blenderOb1, void* blenderOb2, bool activate);
+void BKE_rigidbody_contact_callback(struct rbContactPoint* cp, void* sc);
+void BKE_rigidbody_id_callback(void* island, int* objectId, int* islandId);
+
+bool BKE_rigidbody_modifier_active(struct FractureModifierData *rmd);
+void BKE_rigidbody_shard_validate(struct RigidBodyWorld *rbw, struct Shard *mi, struct Object *ob,
+ struct FractureModifierData *fmd, int rebuild, int transfer_speed, float size[3], float frame);
+
+void BKE_rigidbody_activate(struct RigidBodyOb* rbo, struct RigidBodyWorld *rbw, struct Shard *mi, struct Object *ob);
+bool BKE_rigidbody_modifier_update(struct Scene* scene, struct Object* ob, struct RigidBodyWorld *rbw, bool rebuild,
+ struct Depsgraph *depsgraph);
+
- bool BKE_rigidbody_modifier_sync(struct ModifierData *md, struct Object *ob, struct Scene *scene, float ctime);
++bool BKE_rigidbody_modifier_sync(struct ModifierData *md, struct Object *ob, struct Scene *scene, struct Depsgraph *depsgraph);
+void BKE_rigidbody_passive_hook(struct FractureModifierData *fmd, struct Shard *mi, struct Object* ob,
+ struct Scene* scene, struct Depsgraph *depsgraph);
+
+void BKE_rigidbody_passive_fake_parenting(struct FractureModifierData *fmd, struct Object *ob, struct RigidBodyOb *rbo,
+ float imat[4][4]);
+
/* -------------------- */
/* Depsgraph evaluation */
@@@ -185,11 -117,4 +185,10 @@@ void BKE_rigidbody_object_sync_transfor
struct Scene *scene,
struct Object *ob);
+bool BKE_restoreKinematic(struct RigidBodyWorld *rbw, bool overri
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list