From 86e24ea10cba05dcb48eccc026530edab14dfe01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Barschkis?= Date: Sun, 9 Feb 2020 17:15:41 +0100 Subject: Fluid: Fixes for fluid guiding Fluid guiding functionality was broken in the bake / read cache loop in fluid.c. Committing this to the release branch as otherwise fluid guiding would not have worked as expected (i.e. not at all). --- intern/mantaflow/intern/MANTA_main.cpp | 5 ++++- intern/mantaflow/intern/strings/fluid_script.h | 13 +++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'intern') diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp index cd496ac0c01..f13dc4e5f52 100644 --- a/intern/mantaflow/intern/MANTA_main.cpp +++ b/intern/mantaflow/intern/MANTA_main.cpp @@ -2001,6 +2001,9 @@ int MANTA::bakeGuiding(FluidModifierData *mmd, int framenr) std::string gformat = getCacheFileEnding(mmd->domain->cache_data_format); + bool final_cache = (mmd->domain->cache_type == FLUID_DOMAIN_CACHE_FINAL); + std::string resumable_cache = (final_cache) ? "False" : "True"; + BLI_path_join(cacheDirGuiding, sizeof(cacheDirGuiding), mmd->domain->cache_directory, @@ -2010,7 +2013,7 @@ int MANTA::bakeGuiding(FluidModifierData *mmd, int framenr) ss.str(""); ss << "bake_guiding_" << mCurrentID << "('" << escapeSlashes(cacheDirGuiding) << "', " << framenr - << ", '" << gformat << "')"; + << ", '" << gformat << "', " << resumable_cache << ")"; pythonCommands.push_back(ss.str()); runPythonString(pythonCommands); diff --git a/intern/mantaflow/intern/strings/fluid_script.h b/intern/mantaflow/intern/strings/fluid_script.h index f66f2fadcb1..babcdd7551e 100644 --- a/intern/mantaflow/intern/strings/fluid_script.h +++ b/intern/mantaflow/intern/strings/fluid_script.h @@ -559,12 +559,9 @@ def bake_particles_$ID$(path_data, path_particles, framenr, format_data, format_ const std::string fluid_bake_guiding = "\n\ -def bake_guiding_process_$ID$(framenr, format_guiding, path_guiding):\n\ +def bake_guiding_process_$ID$(framenr, format_guiding, path_guiding, resumable):\n\ mantaMsg('Bake fluid guiding')\n\ \n\ - if framenr>1:\n\ - fluid_load_guiding_$ID$(path_guiding, framenr-1, format_guiding)\n\ - \n\ # Average out velocities from multiple guiding objects at one cell\n\ x_guidevel_s$ID$.safeDivide(numGuides_s$ID$)\n\ y_guidevel_s$ID$.safeDivide(numGuides_s$ID$)\n\ @@ -582,13 +579,13 @@ def bake_guiding_process_$ID$(framenr, format_guiding, path_guiding):\n\ extrapolateVec3Simple(vel=guidevelC_s$ID$, phi=phiGuideIn_s$ID$, distance=4, inside=False)\n\ resampleVec3ToMac(source=guidevelC_s$ID$, target=guidevel_sg$ID$)\n\ \n\ - fluid_save_guiding_$ID$(path_guiding, framenr, format_guiding)\n\ + fluid_save_guiding_$ID$(path_guiding, framenr, format_guiding, resumable)\n\ \n\ -def bake_guiding_$ID$(path_guiding, framenr, format_guiding):\n\ +def bake_guiding_$ID$(path_guiding, framenr, format_guiding, resumable):\n\ if not withMPBake or isWindows:\n\ - bake_guiding_process_$ID$(framenr, format_guiding, path_guiding)\n\ + bake_guiding_process_$ID$(framenr, format_guiding, path_guiding, resumable)\n\ else:\n\ - fluid_cache_multiprocessing_start_$ID$(function=bake_guiding_process_$ID$, framenr=framenr, format_guiding=format_guiding, path_guiding=path_guiding)\n"; + fluid_cache_multiprocessing_start_$ID$(function=bake_guiding_process_$ID$, framenr=framenr, format_guiding=format_guiding, path_guiding=path_guiding, resumable=resumable)\n"; ////////////////////////////////////////////////////////////////////// // IMPORT -- cgit v1.2.3 From a048354e9f9bee20d23c7647c92790dc11f818d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Barschkis?= Date: Sun, 9 Feb 2020 17:17:24 +0100 Subject: Fluid: Fixed file formats for script exporter File formats in the exported scripts were using hardcoded file extensions and not the ones specified in the UI. --- intern/mantaflow/intern/MANTA_main.cpp | 54 +++++++++++++++----------- intern/mantaflow/intern/strings/fluid_script.h | 12 +++--- 2 files changed, 37 insertions(+), 29 deletions(-) (limited to 'intern') diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp index f13dc4e5f52..91853ca566b 100644 --- a/intern/mantaflow/intern/MANTA_main.cpp +++ b/intern/mantaflow/intern/MANTA_main.cpp @@ -572,6 +572,29 @@ void MANTA::terminateMantaflow() mantaInitialized = false; } +static std::string getCacheFileEnding(char cache_format) +{ + if (MANTA::with_debug) + std::cout << "MANTA::getCacheFileEnding()" << std::endl; + + switch (cache_format) { + case FLUID_DOMAIN_FILE_UNI: + return ".uni"; + case FLUID_DOMAIN_FILE_OPENVDB: + return ".vdb"; + case FLUID_DOMAIN_FILE_RAW: + return ".raw"; + case FLUID_DOMAIN_FILE_BIN_OBJECT: + return ".bobj.gz"; + case FLUID_DOMAIN_FILE_OBJECT: + return ".obj"; + default: + if (MANTA::with_debug) + std::cout << "Error: Could not find file extension" << std::endl; + return ".uni"; + } +} + std::string MANTA::getRealValue(const std::string &varName, FluidModifierData *mmd) { std::ostringstream ss; @@ -815,6 +838,14 @@ std::string MANTA::getRealValue(const std::string &varName, FluidModifierData *m ss << mmd->time; else if (varName == "END_FRAME") ss << mmd->domain->cache_frame_end; + else if (varName == "CACHE_DATA_FORMAT") + ss << getCacheFileEnding(mmd->domain->cache_data_format); + else if (varName == "CACHE_MESH_FORMAT") + ss << getCacheFileEnding(mmd->domain->cache_mesh_format); + else if (varName == "CACHE_NOISE_FORMAT") + ss << getCacheFileEnding(mmd->domain->cache_noise_format); + else if (varName == "CACHE_PARTICLE_FORMAT") + ss << getCacheFileEnding(mmd->domain->cache_particle_format); else if (varName == "SIMULATION_METHOD") { if (mmd->domain->simulation_method & FLUID_DOMAIN_METHOD_FLIP) { ss << "'FLIP'"; @@ -987,29 +1018,6 @@ std::string MANTA::parseScript(const std::string &setup_string, FluidModifierDat return res.str(); } -static std::string getCacheFileEnding(char cache_format) -{ - if (MANTA::with_debug) - std::cout << "MANTA::getCacheFileEnding()" << std::endl; - - switch (cache_format) { - case FLUID_DOMAIN_FILE_UNI: - return ".uni"; - case FLUID_DOMAIN_FILE_OPENVDB: - return ".vdb"; - case FLUID_DOMAIN_FILE_RAW: - return ".raw"; - case FLUID_DOMAIN_FILE_BIN_OBJECT: - return ".bobj.gz"; - case FLUID_DOMAIN_FILE_OBJECT: - return ".obj"; - default: - if (MANTA::with_debug) - std::cout << "Error: Could not find file extension" << std::endl; - return ".uni"; - } -} - int MANTA::updateFlipStructures(FluidModifierData *mmd, int framenr) { if (MANTA::with_debug) diff --git a/intern/mantaflow/intern/strings/fluid_script.h b/intern/mantaflow/intern/strings/fluid_script.h index babcdd7551e..477cf3ff789 100644 --- a/intern/mantaflow/intern/strings/fluid_script.h +++ b/intern/mantaflow/intern/strings/fluid_script.h @@ -689,12 +689,12 @@ if (GUI):\n\ gui.show()\n\ gui.pause()\n\ \n\ -cache_dir = '$CACHE_DIR$'\n\ -cache_resumable = $CACHE_RESUMABLE$\n\ -file_format_data = '.uni'\n\ -file_format_noise = '.uni'\n\ -file_format_particles = '.uni'\n\ -file_format_mesh = '.bobj.gz'\n\ +cache_resumable = $CACHE_RESUMABLE$\n\ +cache_dir = '$CACHE_DIR$'\n\ +file_format_data = '$CACHE_DATA_FORMAT$'\n\ +file_format_noise = '$CACHE_NOISE_FORMAT$'\n\ +file_format_particles = '$CACHE_PARTICLE_FORMAT$'\n\ +file_format_mesh = '$CACHE_MESH_FORMAT$'\n\ \n\ # Start and stop for simulation\n\ current_frame = $CURRENT_FRAME$\n\ -- cgit v1.2.3 From 5e30bd43f873dc2b79f2c7fa2e6fb156b598a7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Barschkis?= Date: Thu, 6 Feb 2020 19:27:47 +0100 Subject: Fluid: Optimization for fluid domain obstacle boundary handling This fix should especially improve liquid obstacles boundaries, i.e. help with the problem of particles sticking to the surface. --- intern/mantaflow/intern/strings/liquid_script.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'intern') diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h index 442b09b5a8a..9a494a1cb6a 100644 --- a/intern/mantaflow/intern/strings/liquid_script.h +++ b/intern/mantaflow/intern/strings/liquid_script.h @@ -181,7 +181,7 @@ def liquid_adaptive_step_$ID$(framenr):\n\ phi_s$ID$.join(phiIn_s$ID$)\n\ \n\ if using_obstacle_s$ID$:\n\ - phi_s$ID$.subtract(phiObsIn_s$ID$)\n\ + phi_s$ID$.subtract(o=phiObsIn_s$ID$, flags=flags_s$ID$, subtractType=FlagObstacle)\n\ \n\ if using_outflow_s$ID$:\n\ phiOut_s$ID$.join(phiOutIn_s$ID$)\n\ -- cgit v1.2.3