[Bf-blender-cvs] [01ec76842fb] master: Fix T77766: support animated global gravity toggle

Jacques Lucke noreply at git.blender.org
Tue Jul 14 13:48:59 CEST 2020


Commit: 01ec76842fbe8cd58e997a31f1b7100bc9d7c7cd
Author: Jacques Lucke
Date:   Tue Jul 14 13:47:32 2020 +0200
Branches: master
https://developer.blender.org/rB01ec76842fbe8cd58e997a31f1b7100bc9d7c7cd

Fix T77766: support animated global gravity toggle

Reviewers: sebbas

Differential Revision: https://developer.blender.org/D8281

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

M	intern/mantaflow/intern/MANTA_main.cpp
M	source/blender/blenkernel/intern/fluid.c
M	source/blender/makesdna/DNA_fluid_types.h

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

diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index 43121f08f2d..c12d3a3a0a1 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -870,9 +870,9 @@ void MANTA::initializeRNAMap(FluidModifierData *fmd)
   mRNAMap["GUIDING_ALPHA"] = to_string(fds->guide_alpha);
   mRNAMap["GUIDING_BETA"] = to_string(fds->guide_beta);
   mRNAMap["GUIDING_FACTOR"] = to_string(fds->guide_vel_factor);
-  mRNAMap["GRAVITY_X"] = to_string(fds->gravity[0]);
-  mRNAMap["GRAVITY_Y"] = to_string(fds->gravity[1]);
-  mRNAMap["GRAVITY_Z"] = to_string(fds->gravity[2]);
+  mRNAMap["GRAVITY_X"] = to_string(fds->gravity_final[0]);
+  mRNAMap["GRAVITY_Y"] = to_string(fds->gravity_final[1]);
+  mRNAMap["GRAVITY_Z"] = to_string(fds->gravity_final[2]);
   mRNAMap["CACHE_DIR"] = cacheDirectory;
   mRNAMap["COMPRESSION_OPENVDB"] = vdbCompressionMethod;
   mRNAMap["PRECISION_OPENVDB"] = vdbPrecisionHalf;
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index 194d5074993..b9dc3b6a619 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -491,6 +491,17 @@ static void manta_set_domain_from_mesh(FluidDomainSettings *fds,
   fds->cell_size[2] /= (float)fds->base_res[2];
 }
 
+static void update_final_gravity(FluidDomainSettings *fds, Scene *scene)
+{
+  if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
+    copy_v3_v3(fds->gravity_final, scene->physics_settings.gravity);
+  }
+  else {
+    copy_v3_v3(fds->gravity_final, fds->gravity);
+  }
+  mul_v3_fl(fds->gravity_final, fds->effector_weights->global_gravity);
+}
+
 static bool BKE_fluid_modifier_init(
     FluidModifierData *fmd, Depsgraph *depsgraph, Object *ob, Scene *scene, Mesh *me)
 {
@@ -502,10 +513,7 @@ static bool BKE_fluid_modifier_init(
     /* Set domain dimensions from mesh. */
     manta_set_domain_from_mesh(fds, ob, me, true);
     /* Set domain gravity, use global gravity if enabled. */
-    if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
-      copy_v3_v3(fds->gravity, scene->physics_settings.gravity);
-    }
-    mul_v3_fl(fds->gravity, fds->effector_weights->global_gravity);
+    update_final_gravity(fds, scene);
     /* Reset domain values. */
     zero_v3_int(fds->shift);
     zero_v3(fds->shift_f);
@@ -3808,10 +3816,7 @@ static void BKE_fluid_modifier_processDomain(FluidModifierData *fmd,
   fds->time_per_frame = 0;
 
   /* Ensure that gravity is copied over every frame (could be keyframed). */
-  if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
-    copy_v3_v3(fds->gravity, scene->physics_settings.gravity);
-    mul_v3_fl(fds->gravity, fds->effector_weights->global_gravity);
-  }
+  update_final_gravity(fds, scene);
 
   int next_frame = scene_framenr + 1;
   int prev_frame = scene_framenr - 1;
diff --git a/source/blender/makesdna/DNA_fluid_types.h b/source/blender/makesdna/DNA_fluid_types.h
index b54ff7ccc17..909170523a3 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -471,9 +471,10 @@ typedef struct FluidDomainSettings {
   int res_max[3];          /* Cell max. */
   int res[3];              /* Data resolution (res_max-res_min). */
   int total_cells;
-  float dx;           /* 1.0f / res. */
-  float scale;        /* Largest domain size. */
-  int boundary_width; /* Usually this is just 1. */
+  float dx;               /* 1.0f / res. */
+  float scale;            /* Largest domain size. */
+  int boundary_width;     /* Usually this is just 1. */
+  float gravity_final[3]; /* Scene or domain gravity multiplied with gravity weight. */
 
   /* -- User-accesible fields (from here on). -- */
 
@@ -481,7 +482,6 @@ typedef struct FluidDomainSettings {
   int adapt_margin;
   int adapt_res;
   float adapt_threshold;
-  char _pad1[4]; /* Unused. */
 
   /* Fluid domain options */
   int maxres;            /* Longest axis on the BB gets this resolution assigned. */



More information about the Bf-blender-cvs mailing list