[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