diff options
author | Sebastián Barschkis <sebbas@sebbas.org> | 2020-04-07 15:22:56 +0300 |
---|---|---|
committer | Sebastián Barschkis <sebbas@sebbas.org> | 2020-04-07 15:31:33 +0300 |
commit | 4a83832120647044908898a9afc5e54028d78617 (patch) | |
tree | fd7724aaab62630b776026b5ab6c178a861410bf /intern/mantaflow | |
parent | ea78f9922eff794858983cdb5bf3cf59e6b52b39 (diff) |
Fix T74828: Fluid: Crash with Fire/Smoke Noise
Issue was that the noise simulation was trying to bake with a minimized domain size (adaptive domain initializes domain with size (1,1,1)). Similarly to the base resolution bake, there should be no noise baking happening at those domain sizes - a domain at this size is considered empty.
Diffstat (limited to 'intern/mantaflow')
-rw-r--r-- | intern/mantaflow/extern/manta_fluid_API.h | 1 | ||||
-rw-r--r-- | intern/mantaflow/intern/MANTA_main.cpp | 23 | ||||
-rw-r--r-- | intern/mantaflow/intern/MANTA_main.h | 3 | ||||
-rw-r--r-- | intern/mantaflow/intern/manta_fluid_API.cpp | 7 |
4 files changed, 33 insertions, 1 deletions
diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h index 939f24fbeef..85cc04b4a52 100644 --- a/intern/mantaflow/extern/manta_fluid_API.h +++ b/intern/mantaflow/extern/manta_fluid_API.h @@ -39,6 +39,7 @@ void manta_ensure_invelocity(struct MANTA *fluid, struct FluidModifierData *mmd) void manta_ensure_outflow(struct MANTA *fluid, struct FluidModifierData *mmd); int manta_write_config(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); int manta_write_data(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); +int manta_write_noise(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); int manta_read_config(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); int manta_read_data(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); int manta_read_noise(struct MANTA *fluid, struct FluidModifierData *mmd, int framenr); diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp index 95487ff3bd0..293abae1b3a 100644 --- a/intern/mantaflow/intern/MANTA_main.cpp +++ b/intern/mantaflow/intern/MANTA_main.cpp @@ -1441,6 +1441,29 @@ bool MANTA::writeData(FluidModifierData *mmd, int framenr) return runPythonString(pythonCommands); } +bool MANTA::writeNoise(FluidModifierData *mmd, int framenr) +{ + if (with_debug) + std::cout << "MANTA::writeNoise()" << std::endl; + + std::ostringstream ss; + std::vector<std::string> pythonCommands; + + std::string directory = getDirectory(mmd, FLUID_DOMAIN_DIR_NOISE); + std::string nformat = getCacheFileEnding(mmd->domain->cache_noise_format); + + bool final_cache = (mmd->domain->cache_type == FLUID_DOMAIN_CACHE_FINAL); + std::string resumable_cache = (final_cache) ? "False" : "True"; + + if (mUsingSmoke && mUsingNoise) { + ss.str(""); + ss << "smoke_save_noise_" << mCurrentID << "('" << escapeSlashes(directory) << "', " << framenr + << ", '" << nformat << "', " << resumable_cache << ")"; + pythonCommands.push_back(ss.str()); + } + return runPythonString(pythonCommands); +} + bool MANTA::readConfiguration(FluidModifierData *mmd, int framenr) { if (with_debug) diff --git a/intern/mantaflow/intern/MANTA_main.h b/intern/mantaflow/intern/MANTA_main.h index f4699e857ff..caac63d8e39 100644 --- a/intern/mantaflow/intern/MANTA_main.h +++ b/intern/mantaflow/intern/MANTA_main.h @@ -79,7 +79,8 @@ struct MANTA { // Write cache bool writeConfiguration(FluidModifierData *mmd, int framenr); bool writeData(FluidModifierData *mmd, int framenr); - // write call for noise, mesh and particles were left in bake calls for now + bool writeNoise(FluidModifierData *mmd, int framenr); + // write calls for mesh and particles were left in bake calls for now // Read cache (via Manta save/load) bool readConfiguration(FluidModifierData *mmd, int framenr); diff --git a/intern/mantaflow/intern/manta_fluid_API.cpp b/intern/mantaflow/intern/manta_fluid_API.cpp index 594f7a44e7f..b4582051c3c 100644 --- a/intern/mantaflow/intern/manta_fluid_API.cpp +++ b/intern/mantaflow/intern/manta_fluid_API.cpp @@ -80,6 +80,13 @@ int manta_write_data(MANTA *fluid, FluidModifierData *mmd, int framenr) return fluid->writeData(mmd, framenr); } +int manta_write_noise(MANTA *fluid, FluidModifierData *mmd, int framenr) +{ + if (!fluid || !mmd) + return 0; + return fluid->writeNoise(mmd, framenr); +} + int manta_read_config(MANTA *fluid, FluidModifierData *mmd, int framenr) { if (!fluid || !mmd) |