[Bf-blender-cvs] [74d6113c329] soc-2020-soft-body: added buttons to gui but they do nothing at the moment
mattoverby
noreply at git.blender.org
Tue Jul 28 02:06:41 CEST 2020
Commit: 74d6113c329131f51994929ae5a43935eb6be2a6
Author: mattoverby
Date: Mon Jul 27 19:06:36 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB74d6113c329131f51994929ae5a43935eb6be2a6
added buttons to gui but they do nothing at the moment
===================================================================
M extern/softbody/src/admmpd_types.h
M release/scripts/startup/bl_ui/properties_physics_softbody.py
M source/blender/makesdna/DNA_object_force_types.h
M source/blender/makesrna/intern/rna_object_force.c
===================================================================
diff --git a/extern/softbody/src/admmpd_types.h b/extern/softbody/src/admmpd_types.h
index f96bd10c8e7..2903d0add95 100644
--- a/extern/softbody/src/admmpd_types.h
+++ b/extern/softbody/src/admmpd_types.h
@@ -21,7 +21,7 @@ enum EnergyTermType {
};
struct Options {
- double timestep_s; // TODO: Figure out delta time from blender api
+ double timestep_s;
int max_admm_iters;
int max_cg_iters;
int max_gs_iters;
diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py
index 3b080822b95..029a35e51e3 100644
--- a/release/scripts/startup/bl_ui/properties_physics_softbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py
@@ -32,7 +32,6 @@ COMPAT_OB_TYPES = {'MESH', 'LATTICE', 'CURVE', 'SURFACE', 'FONT'}
def softbody_panel_enabled(md):
return (md.point_cache.is_baked is False)
-
class PhysicButtonsPanel:
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
@@ -55,6 +54,8 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel, Panel):
md = context.soft_body
softbody = md.settings
+ layout.prop(softbody, "solver_mode")
+
layout.prop(softbody, "collision_collection")
@@ -75,15 +76,25 @@ class PHYSICS_PT_softbody_object(PhysicButtonsPanel, Panel):
layout.enabled = softbody_panel_enabled(md)
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
- col = flow.column()
- col.prop(softbody, "friction")
+ if softbody.solver_mode=='LEGACY':
- col.separator()
+ col = flow.column()
+ col.prop(softbody, "friction")
- col = flow.column()
- col.prop(softbody, "mass")
+ col.separator()
+
+ col = flow.column()
+ col.prop(softbody, "mass")
- col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Control Point")
+ col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Control Point")
+
+ elif softbody.solver_mode=='ADMMPD':
+
+ col = flow.column()
+ col.prop(softbody, "admmpd_youngs")
+ col.prop(softbody, "admmpd_poisson")
+ col.prop(softbody, "admmpd_material")
+ col.prop(softbody, "admmpd_density_kgm3")
class PHYSICS_PT_softbody_simulation(PhysicButtonsPanel, Panel):
@@ -92,6 +103,12 @@ class PHYSICS_PT_softbody_simulation(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -139,6 +156,9 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel, Panel):
layout.prop_search(softbody, "vertex_group_goal", ob, "vertex_groups", text="Vertex Group")
+ if softbody.solver_mode == 'ADMMPD':
+ layout.prop(softbody, "admmpd_goalstiff")
+
class PHYSICS_PT_softbody_goal_strengths(PhysicButtonsPanel, Panel):
bl_label = "Strengths"
@@ -146,6 +166,12 @@ class PHYSICS_PT_softbody_goal_strengths(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -172,6 +198,12 @@ class PHYSICS_PT_softbody_goal_settings(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -195,6 +227,12 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw_header(self, context):
softbody = context.soft_body.settings
@@ -282,6 +320,25 @@ class PHYSICS_PT_softbody_edge_stiffness(PhysicButtonsPanel, Panel):
layout.prop(softbody, "shear")
+class PHYSICS_PT_softbody_admmpdcollision(PhysicButtonsPanel, Panel):
+ bl_label = "Collision"
+ bl_parent_id = 'PHYSICS_PT_softbody'
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='ADMMPD')
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ md = context.soft_body
+ softbody = md.settings
+ layout.prop(softbody, "admmpd_self_collision")
+ layout.prop(softbody, "admmpd_floor_z")
class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, Panel):
bl_label = "Self Collision"
@@ -289,6 +346,12 @@ class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw_header(self, context):
softbody = context.soft_body.settings
@@ -334,14 +397,22 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, Panel):
layout.active = softbody_panel_enabled(md)
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
- col = flow.column(align=True)
- col.prop(softbody, "step_min", text="Step Size Min")
- col.prop(softbody, "step_max", text="Max")
+ if softbody.solver_mode == 'LEGACY':
- col = flow.column()
- col.prop(softbody, "use_auto_step", text="Auto-Step")
- col.prop(softbody, "error_threshold")
+ col = flow.column(align=True)
+ col.prop(softbody, "step_min", text="Step Size Min")
+ col.prop(softbody, "step_max", text="Max")
+
+ col = flow.column()
+ col.prop(softbody, "use_auto_step", text="Auto-Step")
+ col.prop(softbody, "error_threshold")
+ elif softbody.solver_mode == 'ADMMPD':
+
+ col = flow.column(align=True)
+ col.prop(softbody, "admmpd_substeps")
+ col.prop(softbody, "admmpd_max_admm_iters")
+ col.prop(softbody, "admmpd_converge_eps")
class PHYSICS_PT_softbody_solver_diagnostics(PhysicButtonsPanel, Panel):
bl_label = "Diagnostics"
@@ -349,6 +420,12 @@ class PHYSICS_PT_softbody_solver_diagnostics(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -368,6 +445,12 @@ class PHYSICS_PT_softbody_solver_helpers(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -391,6 +474,12 @@ class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+ @classmethod
+ def poll(cls, context):
+ md = context.soft_body
+ softbody = md.settings
+ return (softbody.solver_mode=='LEGACY')
+
def draw(self, context):
md = context.soft_body
softbody = md.settings
@@ -409,6 +498,7 @@ classes = (
PHYSICS_PT_softbody_edge,
PHYSICS_PT_softbody_edge_aerodynamics,
PHYSICS_PT_softbody_edge_stiffness,
+ PHYSICS_PT_softbody_admmpdcollision,
PHYSICS_PT_softbody_collision,
PHYSICS_PT_softbody_solver,
PHYSICS_PT_softbody_solver_diagnostics,
diff --git a/source/blender/makesdna/DNA_object_force_types.h b/source/blender/makesdna/DNA_object_force_types.h
index d85a106cfc2..81e89f2a1f1 100644
--- a/source/blender/makesdna/DNA_object_force_types.h
+++ b/source/blender/makesdna/DNA_object_force_types.h
@@ -212,7 +212,21 @@ typedef struct SoftBody {
/** Not saved in file. */
struct BodySpring *bspring;
+ /* ADMM-PD settings */
struct ADMMPDInterfaceData *admmpd;
+ int solver_mode; // 0=legacy, 1=admmpd
+ int admmpd_substeps; // break time step into smaller bits
+ int admmpd_max_admm_iters; // max solver iterations
+ int admmpd_self_collision; // 0 or 1
+ int admmpd_material; // see enum
+ float admmpd_converge_eps; // convergence epsilon
+ float admmpd_youngs; // Youngs mod
+ float admmpd_poisson; // Poisson ratio
+ float admmpd_density_kgm3; // unit-density of object
+ float admmpd_goalstiff; // 0 to 1
+ float admmpd_floor_z; // floor position
+ int admmpd_pad;
+
char _pad;
char msg_lock;
@@ -410,6 +424,14 @@ typedef struct SoftBody {
#define SBC_MODE_MAX 3
#define SBC_MODE_AVGMINMAX 4
+/* sb->solver_mode */
+#define SOLVER_MODE_ADMMPD 0
+#define SOLVER_MODE_LEGACY 1
+
+/* sb-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list