[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