[Bf-blender-cvs] [92d95359c6b] soc-2020-soft-body: added gravity option and lattice subdiv

mattoverby noreply at git.blender.org
Wed Jul 29 19:34:10 CEST 2020


Commit: 92d95359c6b7cb9e61b236c5db7df51508b7e0eb
Author: mattoverby
Date:   Wed Jul 29 12:34:06 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB92d95359c6b7cb9e61b236c5db7df51508b7e0eb

added gravity option and lattice subdiv

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

M	intern/softbody/admmpd_api.cpp
M	release/scripts/startup/bl_ui/properties_physics_softbody.py
M	source/blender/blenkernel/intern/softbody.c
M	source/blender/makesdna/DNA_object_force_types.h
M	source/blender/makesrna/intern/rna_object_force.c

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

diff --git a/intern/softbody/admmpd_api.cpp b/intern/softbody/admmpd_api.cpp
index c4be926aa88..49f637a85f4 100644
--- a/intern/softbody/admmpd_api.cpp
+++ b/intern/softbody/admmpd_api.cpp
@@ -74,6 +74,7 @@ static inline void options_from_object(Object *ob, admmpd::Options *op)
   op->poisson = std::max(0.f,std::min(0.499f,sb->admmpd_poisson));
   op->floor = sb->admmpd_floor_z;
   op->self_collision = sb->admmpd_self_collision;
+  op->grav[2] = sb->admmpd_gravity;
 
   switch(sb->admmpd_material)
   {
@@ -216,6 +217,9 @@ static inline int admmpd_init_with_lattice(ADMMPDInterfaceData *iface, Object *o
 
   iface->out_totverts = 0;
   iface->idata->mesh = std::make_shared<admmpd::EmbeddedMesh>();
+  std::shared_ptr<admmpd::EmbeddedMesh> emb_msh =
+    std::dynamic_pointer_cast<admmpd::EmbeddedMesh>(iface->idata->mesh);
+  emb_msh->options.max_subdiv_levels = ob->soft->admmpd_embed_res;
   bool success = iface->idata->mesh->create(
     v.data(),
     v.size()/3,
@@ -231,10 +235,7 @@ static inline int admmpd_init_with_lattice(ADMMPDInterfaceData *iface, Object *o
     return 0;
   }
 
-  std::shared_ptr<admmpd::EmbeddedMesh> emb_msh =
-    std::dynamic_pointer_cast<admmpd::EmbeddedMesh>(iface->idata->mesh);
   iface->idata->collision = std::make_unique<admmpd::EmbeddedMeshCollision>(emb_msh);
-
   return 1;
 }
 
diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py
index 0ab9ce55743..7626daf79b6 100644
--- a/release/scripts/startup/bl_ui/properties_physics_softbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py
@@ -92,6 +92,7 @@ class PHYSICS_PT_softbody_object(PhysicButtonsPanel, Panel):
 
             col = flow.column()
             col.prop(softbody, "admmpd_material")
+            col.prop(softbody, "admmpd_embed_res")
             col.prop(softbody, "admmpd_youngs_exp")
             col.prop(softbody, "admmpd_poisson")
             col.prop(softbody, "admmpd_density_kgm3")
@@ -414,6 +415,7 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, Panel):
             col.prop(softbody, "admmpd_substeps")
             col.prop(softbody, "admmpd_max_admm_iters")
             col.prop(softbody, "admmpd_converge_eps")
+            col.prop(softbody, "admmpd_gravity")
 
 class PHYSICS_PT_softbody_solver_diagnostics(PhysicButtonsPanel, Panel):
     bl_label = "Diagnostics"
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 9765f2cec37..292d3b6e77d 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -3141,6 +3141,7 @@ SoftBody *sbNew(Scene *scene)
   sb->admmpd_max_admm_iters = 30;
   sb->admmpd_self_collision = 0;
   sb->admmpd_material = ADMMPD_MATERIAL_ARAP;
+  sb->admmpd_embed_res = 3;
   sb->admmpd_converge_eps = 1e-6;
   sb->admmpd_youngs_exp = 6;
   sb->admmpd_poisson = 0.399;
@@ -3148,7 +3149,7 @@ SoftBody *sbNew(Scene *scene)
   sb->admmpd_collisionstiff = 1;
   sb->admmpd_goalstiff = 0.7;
   sb->admmpd_floor_z = -999;
-
+  sb->admmpd_gravity = -9.8;
 
   sb->mediafrict = 0.5f;
   sb->nodemass = 1.0f;
diff --git a/source/blender/makesdna/DNA_object_force_types.h b/source/blender/makesdna/DNA_object_force_types.h
index 572c948ff13..ff0b03b5d0c 100644
--- a/source/blender/makesdna/DNA_object_force_types.h
+++ b/source/blender/makesdna/DNA_object_force_types.h
@@ -220,6 +220,7 @@ typedef struct SoftBody {
   int admmpd_max_admm_iters; // max solver iterations
   int admmpd_self_collision; // 0 or 1
   int admmpd_material; // see enum
+  int admmpd_embed_res; // embedded resolution depth
   float admmpd_converge_eps; // convergence epsilon
   float admmpd_youngs_exp; // Youngs mod exponent
   float admmpd_poisson; // Poisson ratio
@@ -227,6 +228,7 @@ typedef struct SoftBody {
   float admmpd_collisionstiff; // 0 to 1
   float admmpd_goalstiff; // 0 to 1
   float admmpd_floor_z; // floor position
+  float admmpd_gravity; // in m/s^2
   int admmpd_pad;
 
 
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index f8f6515c739..7332d7e415b 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -1837,6 +1837,12 @@ static void rna_def_softbody(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Mesh Mode", "ADMM-PD initialization mode");
   RNA_def_property_update(prop, 0, "rna_softbody_update");
 
+  prop = RNA_def_property(srna, "admmpd_gravity", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "admmpd_gravity");
+  //RNA_def_property_range(prop, 1.f, 10.f);
+  RNA_def_property_ui_text(prop, "Gravity", "Gravity in m/s^2");
+  RNA_def_property_update(prop, 0, "rna_softbody_update");
+
   prop = RNA_def_property(srna, "admmpd_substeps", PROP_INT, PROP_NONE);
   RNA_def_property_int_sdna(prop, NULL, "admmpd_substeps");
   RNA_def_property_range(prop, 1.f, 100.f);
@@ -1873,6 +1879,12 @@ static void rna_def_softbody(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Material", "Elastic material model");
   RNA_def_property_update(prop, 0, "rna_softbody_update");
 
+  prop = RNA_def_property(srna, "admmpd_embed_res", PROP_INT, PROP_NONE);
+  RNA_def_property_int_sdna(prop, NULL, "admmpd_embed_res");
+  RNA_def_property_range(prop, 1.f, 5.f);
+  RNA_def_property_ui_text(prop, "Lattice Resolution", "Max depth of lattice subdivisions");
+  RNA_def_property_update(prop, 0, "rna_softbody_update");
+
   prop = RNA_def_property(srna, "admmpd_density_kgm3", PROP_FLOAT, PROP_NONE);
   RNA_def_property_float_sdna(prop, NULL, "admmpd_density_kgm3");
   RNA_def_property_range(prop, 1.0f, 10000.f);



More information about the Bf-blender-cvs mailing list