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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs