[Bf-blender-cvs] [c7596cd820e] blender-v2.82-release: Fluid: Improved cache file loading

Sebastián Barschkis noreply at git.blender.org
Sun Jan 19 23:45:23 CET 2020


Commit: c7596cd820e32747372378a511cd95894c4829e3
Author: Sebastián Barschkis
Date:   Sun Jan 19 23:41:02 2020 +0100
Branches: blender-v2.82-release
https://developer.blender.org/rBc7596cd820e32747372378a511cd95894c4829e3

Fluid: Improved cache file loading

Cache file loading for mesh and particle files now works through the direct update_structures functions. The final cache mode now also only bakes the most essential files and is therefore not resumable anymore.

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

M	intern/mantaflow/extern/manta_fluid_API.h
M	intern/mantaflow/intern/MANTA_main.cpp
M	intern/mantaflow/intern/MANTA_main.h
M	intern/mantaflow/intern/manta_fluid_API.cpp
M	intern/mantaflow/intern/strings/fluid_script.h
M	intern/mantaflow/intern/strings/liquid_script.h
M	intern/mantaflow/intern/strings/smoke_script.h
M	release/scripts/startup/bl_ui/properties_physics_fluid.py
M	source/blender/blenkernel/intern/fluid.c
M	source/blender/makesrna/intern/rna_fluid.c

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

diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h
index 691a98f9063..8dc2cf1805a 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -218,6 +218,9 @@ float manta_liquid_get_snd_particle_position_z_at(struct MANTA *liquid, int i);
 float manta_liquid_get_snd_particle_velocity_x_at(struct MANTA *liquid, int i);
 float manta_liquid_get_snd_particle_velocity_y_at(struct MANTA *liquid, int i);
 float manta_liquid_get_snd_particle_velocity_z_at(struct MANTA *liquid, int i);
+bool manta_liquid_flip_from_file(struct MANTA *liquid);
+bool manta_liquid_mesh_from_file(struct MANTA *liquid);
+bool manta_liquid_particle_from_file(struct MANTA *liquid);
 
 #ifdef __cplusplus
 }
diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index e44498bff84..0e0a0ddf021 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -160,6 +160,11 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
   mSndParticleVelocity = NULL;
   mSndParticleLife = NULL;
 
+  // Cache read success indicators
+  mFlipFromFile = false;
+  mMeshFromFile = false;
+  mParticlesFromFile = false;
+
   // Only start Mantaflow once. No need to start whenever new FLUID objected is allocated
   if (!mantaInitialized)
     initializeMantaflow();
@@ -376,8 +381,7 @@ void MANTA::initLiquid(FluidModifierData *mmd)
   if (!mPhiIn) {
     std::vector<std::string> pythonCommands;
     std::string tmpString = liquid_variables + liquid_alloc + liquid_init_phi + liquid_save_data +
-                            liquid_save_flip + liquid_load_data + liquid_load_flip +
-                            liquid_adaptive_step + liquid_step;
+                            liquid_load_data + liquid_adaptive_step + liquid_step;
     std::string finalString = parseScript(tmpString, mmd);
     pythonCommands.push_back(finalString);
 
@@ -389,8 +393,7 @@ void MANTA::initLiquid(FluidModifierData *mmd)
 void MANTA::initMesh(FluidModifierData *mmd)
 {
   std::vector<std::string> pythonCommands;
-  std::string tmpString = fluid_variables_mesh + fluid_solver_mesh + liquid_load_mesh +
-                          liquid_load_meshvel;
+  std::string tmpString = fluid_variables_mesh + fluid_solver_mesh + liquid_load_mesh;
   std::string finalString = parseScript(tmpString, mmd);
   pythonCommands.push_back(finalString);
 
@@ -401,8 +404,7 @@ void MANTA::initMesh(FluidModifierData *mmd)
 void MANTA::initLiquidMesh(FluidModifierData *mmd)
 {
   std::vector<std::string> pythonCommands;
-  std::string tmpString = liquid_alloc_mesh + liquid_step_mesh + liquid_save_mesh +
-                          liquid_save_meshvel;
+  std::string tmpString = liquid_alloc_mesh + liquid_step_mesh + liquid_save_mesh;
   std::string finalString = parseScript(tmpString, mmd);
   pythonCommands.push_back(finalString);
 
@@ -477,8 +479,7 @@ void MANTA::initOutflow(FluidModifierData *mmd)
 void MANTA::initSndParts(FluidModifierData *mmd)
 {
   std::vector<std::string> pythonCommands;
-  std::string tmpString = fluid_variables_particles + fluid_solver_particles +
-                          fluid_load_particles + fluid_save_particles;
+  std::string tmpString = fluid_variables_particles + fluid_solver_particles;
   std::string finalString = parseScript(tmpString, mmd);
   pythonCommands.push_back(finalString);
 
@@ -489,9 +490,9 @@ void MANTA::initLiquidSndParts(FluidModifierData *mmd)
 {
   if (!mSndParticleData) {
     std::vector<std::string> pythonCommands;
-    std::string tmpString = fluid_alloc_sndparts + liquid_alloc_particles +
-                            liquid_variables_particles + liquid_step_particles +
-                            fluid_with_sndparts + liquid_load_particles + liquid_save_particles;
+    std::string tmpString = liquid_alloc_particles + liquid_variables_particles +
+                            liquid_step_particles + fluid_with_sndparts + liquid_load_particles +
+                            liquid_save_particles;
     std::string finalString = parseScript(tmpString, mmd);
     pythonCommands.push_back(finalString);
 
@@ -1008,6 +1009,8 @@ int MANTA::updateFlipStructures(FluidModifierData *mmd, int framenr)
   if (MANTA::with_debug)
     std::cout << "MANTA::updateFlipStructures()" << std::endl;
 
+  mFlipFromFile = false;
+
   // Ensure empty data structures at start
   if (mFlipParticleData)
     mFlipParticleData->clear();
@@ -1046,6 +1049,7 @@ int MANTA::updateFlipStructures(FluidModifierData *mmd, int framenr)
   if (BLI_exists(targetFile)) {
     updateParticlesFromFile(targetFile, false, true);
   }
+  mFlipFromFile = true;
   return 1;
 }
 
@@ -1054,6 +1058,8 @@ int MANTA::updateMeshStructures(FluidModifierData *mmd, int framenr)
   if (MANTA::with_debug)
     std::cout << "MANTA::updateMeshStructures()" << std::endl;
 
+  mMeshFromFile = false;
+
   if (!mUsingMesh)
     return 0;
   if (BLI_path_is_rel(mmd->domain->cache_directory))
@@ -1095,6 +1101,7 @@ int MANTA::updateMeshStructures(FluidModifierData *mmd, int framenr)
       updateMeshFromFile(targetFile);
     }
   }
+  mMeshFromFile = true;
   return 1;
 }
 
@@ -1103,6 +1110,8 @@ int MANTA::updateParticleStructures(FluidModifierData *mmd, int framenr)
   if (MANTA::with_debug)
     std::cout << "MANTA::updateParticleStructures()" << std::endl;
 
+  mParticlesFromFile = false;
+
   if (!mUsingDrops && !mUsingBubbles && !mUsingFloats && !mUsingTracers)
     return 0;
   if (BLI_path_is_rel(mmd->domain->cache_directory))
@@ -1150,6 +1159,7 @@ int MANTA::updateParticleStructures(FluidModifierData *mmd, int framenr)
   if (BLI_exists(targetFile)) {
     updateParticlesFromFile(targetFile, true, false);
   }
+  mParticlesFromFile = true;
   return 1;
 }
 
@@ -1229,6 +1239,9 @@ int MANTA::writeData(FluidModifierData *mmd, int framenr)
   std::string dformat = getCacheFileEnding(mmd->domain->cache_data_format);
   std::string pformat = getCacheFileEnding(mmd->domain->cache_particle_format);
 
+  bool final_cache = (mmd->domain->cache_type == FLUID_DOMAIN_CACHE_FINAL);
+  std::string resumable_cache = (final_cache) ? "False" : "True";
+
   BLI_path_join(cacheDirData,
                 sizeof(cacheDirData),
                 mmd->domain->cache_directory,
@@ -1238,23 +1251,19 @@ int MANTA::writeData(FluidModifierData *mmd, int framenr)
 
   ss.str("");
   ss << "fluid_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr
-     << ", '" << dformat << "')";
+     << ", '" << dformat << "', " << resumable_cache << ")";
   pythonCommands.push_back(ss.str());
 
   if (mUsingSmoke) {
     ss.str("");
     ss << "smoke_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
+       << framenr << ", '" << dformat << "', " << resumable_cache << ")";
     pythonCommands.push_back(ss.str());
   }
   if (mUsingLiquid) {
     ss.str("");
     ss << "liquid_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
-    pythonCommands.push_back(ss.str());
-    ss.str("");
-    ss << "liquid_save_flip_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << pformat << "')";
+       << framenr << ", '" << dformat << "', " << resumable_cache << ")";
     pythonCommands.push_back(ss.str());
   }
   runPythonString(pythonCommands);
@@ -1329,6 +1338,9 @@ int MANTA::readData(FluidModifierData *mmd, int framenr)
   std::string dformat = getCacheFileEnding(mmd->domain->cache_data_format);
   std::string pformat = getCacheFileEnding(mmd->domain->cache_particle_format);
 
+  bool final_cache = (mmd->domain->cache_type == FLUID_DOMAIN_CACHE_FINAL);
+  std::string resumable_cache = (final_cache) ? "False" : "True";
+
   BLI_path_join(cacheDirData,
                 sizeof(cacheDirData),
                 mmd->domain->cache_directory,
@@ -1336,44 +1348,30 @@ int MANTA::readData(FluidModifierData *mmd, int framenr)
                 NULL);
   BLI_path_make_safe(cacheDirData);
 
-  if (mUsingSmoke) {
-    /* Exit early if there is nothing present in the cache for this frame */
-    ss.str("");
-    ss << "density_####" << dformat;
-    BLI_join_dirfile(targetFile, sizeof(targetFile), cacheDirData, ss.str().c_str());
-    BLI_path_frame(targetFile, framenr, 0);
-    if (!BLI_exists(targetFile))
-      return 0;
+  /* Exit early if there is nothing present in the cache for this frame */
+  ss.str("");
+  ss << "vel_####" << dformat;
+  BLI_join_dirfile(targetFile, sizeof(targetFile), cacheDirData, ss.str().c_str());
+  BLI_path_frame(targetFile, framenr, 0);
+  if (!BLI_exists(targetFile))
+    return 0;
 
-    ss.str("");
-    ss << "fluid_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
-    pythonCommands.push_back(ss.str());
+  ss.str("");
+  ss << "fluid_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr
+     << ", '" << dformat << "', " << resumable_cache << ")";
+  pythonCommands.push_back(ss.str());
+
+  if (mUsingSmoke) {
     ss.str("");
     ss << "smoke_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
+       << framenr << ", '" << dformat << "', " << resumable_cache << ")";
     pythonCommands.push_back(ss.str());
   }
   if (mUsingLiquid) {
     /* Exit early if there is nothing present in the cache for this frame */
     ss.str("");
-    ss << "phiIn_####" << dformat;
-    BLI_join_dirfile(targetFile, sizeof(targetFile), cacheDirData, ss.str().c_str());
-    BLI_path_frame(targetFile, framenr, 0);
-    if (!BLI_exists(targetFile))
-      return 0;
-
-    ss.str("");
-    ss << "fluid_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
-    pythonCommands.push_back(ss.str());
-    ss.str("");
     ss << "liquid_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', "
-       << framenr << ", '" << dformat << "')";
-    pythonCommands.push_back(

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list