[Bf-blender-cvs] [8b58d6dff9f] soc-2020-soft-body: added versioning
mattoverby
noreply at git.blender.org
Thu Aug 20 18:43:11 CEST 2020
Commit: 8b58d6dff9fadd817567e6cbfc4ab7220a20f795
Author: mattoverby
Date: Thu Aug 20 11:43:00 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB8b58d6dff9fadd817567e6cbfc4ab7220a20f795
added versioning
===================================================================
M source/blender/blenkernel/BKE_softbody.h
M source/blender/blenkernel/intern/object.c
M source/blender/blenkernel/intern/softbody.c
M source/blender/blenloader/intern/versioning_290.c
M source/blender/makesdna/DNA_object_force_types.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h
index 8fe3130744b..f0bc521664f 100644
--- a/source/blender/blenkernel/BKE_softbody.h
+++ b/source/blender/blenkernel/BKE_softbody.h
@@ -50,8 +50,11 @@ typedef struct BodyPoint {
/* allocates and initializes general main data */
extern struct SoftBody *sbNew(struct Scene *scene);
-/* copies custom solver data from src to dest */
-extern void sbCustomCopy(struct Object *dest, struct Object *src);
+/* copies external solver data from src to dest */
+extern void sbExternalCopy(struct Object *dest, struct Object *src);
+
+/* initializes settings for external solvers */
+extern void sbExternalSetDefault(struct SoftBody *sb);
/* frees internal data and softbody itself */
extern void sbFree(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 214c8ca8d8b..8d098999f9f 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1407,7 +1407,7 @@ void BKE_object_copy_softbody(struct Object *ob_dst, const struct Object *ob_src
sbn = MEM_dupallocN(sb);
- sbCustomCopy(ob_dst,ob_src);
+ sbExternalCopy(ob_dst,ob_src);
if ((flag & LIB_ID_COPY_CACHES) == 0) {
sbn->totspring = sbn->totpoint = 0;
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index c59b8701dbc..cfcac7c3dd2 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -3126,27 +3126,6 @@ SoftBody *sbNew(Scene *scene)
SoftBody *sb;
sb = MEM_callocN(sizeof(SoftBody), "softbody");
- sb->solver_mode = SOLVER_MODE_LEGACY;
- sb->admmpd_mesh_mode = 0; /* Embedded. */
- sb->admmpd_substeps = 1;
- sb->admmpd_max_admm_iters = 20;
- sb->admmpd_self_collision = 0;
- sb->admmpd_material = 0; /* ARAP. */
- sb->admmpd_embed_res = 3; /* Max subdivisions for embedded lattice. */
- sb->admmpd_converge_eps = 1e-4; /* Solver residual stop condition. */
- sb->admmpd_youngs_exp = 6; /* Exponent of Young's mod. */
- sb->admmpd_poisson = 0.399;
- sb->admmpd_density_kgm3 = 1522; /* Density of rubber. */
- sb->admmpd_ck_exp = 7; /* Exponent of collision stiffness. */
- sb->admmpd_pk_exp = 4; /* Exponent of pin stiffness. */
- sb->admmpd_floor_z = -999;
- sb->admmpd_gravity = -9.8;
- sb->admmpd_strainlimit_min = 0; /* 0 = compression allowed. */
- sb->admmpd_strainlimit_max = 100; /* 100 = 100x strech allowed. */
- sb->admmpd_maxthreads = -1; /* Auto detect. */
- sb->admmpd_loglevel = 1; /* Low terminal output. */
- sb->admmpd_linsolver = 1; /* PCG solver. */
-
sb->mediafrict = 0.5f;
sb->nodemass = 1.0f;
sb->grav = 9.8f;
@@ -3186,7 +3165,8 @@ SoftBody *sbNew(Scene *scene)
sb->shared = MEM_callocN(sizeof(*sb->shared), "SoftBody_Shared");
sb->shared->pointcache = BKE_ptcache_add(&sb->shared->ptcaches);
- sb->shared->admmpd_list = MEM_callocN(sizeof(ListBase), "SoftBody_ADMMPD_List");
+
+ sbExternalSetDefault(sb);
if (!sb->effector_weights) {
sb->effector_weights = BKE_effector_add_weights(NULL);
@@ -3682,33 +3662,69 @@ static void update_collider_admmpd(Depsgraph *depsgraph,
BKE_collision_objects_free(objects);
}
-void sbCustomCopy(Object *dest, Object *src)
+void sbExternalCopy(Object *dest_ob, Object *src_ob)
{
- (void)(src);
- SoftBody *sb_dest = dest->soft;
- if (!sb_dest) {
- CLOG_ERROR(&LOG, "No softbody in sbCustomCopy");
+ (void)(src_ob);
+ if (!dest_ob) {
+ CLOG_ERROR(&LOG, "No dest object in sbExternalCopy");
return;
}
- if (!sb_dest->shared) {
- CLOG_ERROR(&LOG, "No shared in sbCustomCopy");
+ SoftBody *dest = dest_ob->soft;
+ if (!dest) {
+ CLOG_ERROR(&LOG, "No softbody in sbExternalCopy");
+ return;
+ }
+ if (!dest->shared) {
+ CLOG_ERROR(&LOG, "No shared in sbExternalCopy");
return;
}
-
/* This can happen on readfile: */
- if (!sb_dest->shared->admmpd_list) {
- sb_dest->shared->admmpd_list = MEM_callocN(sizeof(ListBase), "SoftBody_ADMMPD_List");
+ if (!dest->shared->admmpd_list) {
+ dest->shared->admmpd_list = MEM_callocN(sizeof(ListBase), "SoftBody_ADMMPD_List");
}
-
/* Create ADMM-PD data for this object if it does not already exist. */
- ADMMPDInterfaceData *admmpd = get_admmpd_for_object(dest);
+ ADMMPDInterfaceData *admmpd = get_admmpd_for_object(dest_ob);
if (admmpd==NULL) {
admmpd = MEM_callocN(sizeof(ADMMPDInterfaceData), "ADMMPD");
- strcpy(admmpd->name, dest->id.name);
- BLI_addtail(sb_dest->shared->admmpd_list, admmpd);
+ strcpy(admmpd->name, dest_ob->id.name);
+ BLI_addtail(dest->shared->admmpd_list, admmpd);
}
}
+void sbExternalSetDefault(SoftBody *sb)
+{
+ if (!sb) {
+ return;
+ }
+ if (sb->shared == NULL) {
+ sb->shared = MEM_callocN(sizeof(*sb->shared), "SoftBody_Shared");
+ }
+ if (sb->shared->admmpd_list == NULL) {
+ sb->shared->admmpd_list = MEM_callocN(sizeof(ListBase), "SoftBody_ADMMPD_List");
+ }
+
+ sb->solver_mode = SOLVER_MODE_LEGACY;
+ sb->admmpd_mesh_mode = 0; /* Embedded. */
+ sb->admmpd_substeps = 1;
+ sb->admmpd_max_admm_iters = 20;
+ sb->admmpd_self_collision = 0;
+ sb->admmpd_material = 0; /* ARAP. */
+ sb->admmpd_embed_res = 3; /* Max subdivisions for embedded lattice. */
+ sb->admmpd_converge_eps = 1e-4; /* Solver residual stop condition. */
+ sb->admmpd_youngs_exp = 6; /* Exponent of Young's mod. */
+ sb->admmpd_poisson = 0.399;
+ sb->admmpd_density_kgm3 = 1522; /* Density of rubber. */
+ sb->admmpd_ck_exp = 7; /* Exponent of collision stiffness. */
+ sb->admmpd_pk_exp = 4; /* Exponent of pin stiffness. */
+ sb->admmpd_floor_z = -999;
+ sb->admmpd_gravity = -9.8;
+ sb->admmpd_strainlimit_min = 0; /* 0 = compression allowed. */
+ sb->admmpd_strainlimit_max = 100; /* 100 = 100x strech allowed. */
+ sb->admmpd_maxthreads = -1; /* Auto detect. */
+ sb->admmpd_loglevel = 1; /* Low terminal output. */
+ sb->admmpd_linsolver = 1; /* PCG solver. */
+}
+
/* simulates one step. framenr is in frames */
void sbObjectStep(struct Depsgraph *depsgraph,
Scene *scene,
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index 12b5a297df5..3c96d383434 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -33,6 +33,7 @@
#include "DNA_gpencil_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
+#include "DNA_object_force_types.h"
#include "DNA_screen_types.h"
#include "DNA_shader_fx_types.h"
@@ -42,6 +43,7 @@
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_softbody.h"
#include "BLO_readfile.h"
#include "readfile.h"
@@ -407,6 +409,14 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
+ if (!DNA_struct_elem_find(fd->filesdna, "SoftBody", "int", "solver_mode")) {
+ for (Object *ob = bmain->objects.first; ob != NULL; ob = ob->id.next) {
+ if (ob->soft != NULL) {
+ sbExternalSetDefault(ob->soft);
+ }
+ }
+ }
+
/**
* Versioning code until next subversion bump goes here.
*
diff --git a/source/blender/makesdna/DNA_object_force_types.h b/source/blender/makesdna/DNA_object_force_types.h
index 79717c008be..da9ea45d5d4 100644
--- a/source/blender/makesdna/DNA_object_force_types.h
+++ b/source/blender/makesdna/DNA_object_force_types.h
@@ -193,8 +193,6 @@ typedef struct SBVertex {
float vec[4];
} SBVertex;
-typedef struct ADMMPDInterfaceData ADMMPDInterfaceData;
-
/* Container for data that is shared among CoW copies.
*
* This is placed in a separate struct so that values can be changed
@@ -214,7 +212,7 @@ typedef struct SoftBody {
struct BodySpring *bspring;
/* ADMM-PD settings */
- int solver_mode; /* 0=admmpd, 1=legacy */
+ int solver_mode; /* 0=legacy, 0=admmpd */
int admmpd_mesh_mode; /* 0=embedded, 1=tetgen, 2=cloth */
int admmpd_substeps; /* break time step into smaller bits */
int admmpd_max_admm_iters; /* max solver iterations */
@@ -433,8 +431,8 @@ typedef struct SoftBody {
#define SBC_MODE_AVGMINMAX 4
/* sb->solver_mode */
-#define SOLVER_MODE_ADMMPD 0
-#define SOLVER_MODE_LEGACY 1
+#define SOLVER_MODE_LEGACY 0
+#define SOLVER_MODE_ADMMPD 1
#ifdef __cplusplus
}
More information about the Bf-blender-cvs
mailing list