Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2020-02-07 21:37:44 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2020-02-07 21:37:44 +0300
commit68221b7ebafe58a2bbf612ad8c59e24569489be5 (patch)
treee83853e8748b07f283711dee6c408df0ad1c82e6 /intern
parentffcccf654c8e05f464c59fad82404833160f5b85 (diff)
Fluid: Fixed cache reading issue with larger resolution noise grids
Important fix that needs to go into the release. The upscaled noise cache was not read into upscaled grids.
Diffstat (limited to 'intern')
-rw-r--r--intern/mantaflow/intern/MANTA_main.cpp76
-rw-r--r--intern/mantaflow/intern/MANTA_main.h8
2 files changed, 48 insertions, 36 deletions
diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index 2cbf058d8de..cd496ac0c01 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -1204,7 +1204,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mDensity);
+ result += updateGridFromFile(targetFile, mDensity, false);
expected += 1;
ss.str("");
@@ -1214,7 +1214,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mShadow);
+ result += updateGridFromFile(targetFile, mShadow, false);
if (mUsingHeat) {
expected += 1;
@@ -1225,7 +1225,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mHeat);
+ result += updateGridFromFile(targetFile, mHeat, false);
}
if (mUsingColors) {
@@ -1237,7 +1237,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorR);
+ result += updateGridFromFile(targetFile, mColorR, false);
ss.str("");
ss << "color_g_####" << dformat;
@@ -1246,7 +1246,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorG);
+ result += updateGridFromFile(targetFile, mColorG, false);
ss.str("");
ss << "color_b_####" << dformat;
@@ -1255,7 +1255,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorB);
+ result += updateGridFromFile(targetFile, mColorB, false);
}
if (mUsingFire) {
@@ -1267,7 +1267,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mFlame);
+ result += updateGridFromFile(targetFile, mFlame, false);
ss.str("");
ss << "fuel_####" << dformat;
@@ -1276,7 +1276,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mFuel);
+ result += updateGridFromFile(targetFile, mFuel, false);
ss.str("");
ss << "react_####" << dformat;
@@ -1285,7 +1285,7 @@ int MANTA::updateSmokeStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mReact);
+ result += updateGridFromFile(targetFile, mReact, false);
}
mSmokeFromFile = true;
@@ -1334,7 +1334,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mDensityHigh);
+ result += updateGridFromFile(targetFile, mDensityHigh, true);
expected += 1;
ss.str("");
@@ -1344,7 +1344,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mShadow);
+ result += updateGridFromFile(targetFile, mShadow, false);
if (mUsingColors) {
expected += 3;
@@ -1355,7 +1355,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorRHigh);
+ result += updateGridFromFile(targetFile, mColorRHigh, true);
ss.str("");
ss << "color_g_noise_####" << nformat;
@@ -1364,7 +1364,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorGHigh);
+ result += updateGridFromFile(targetFile, mColorGHigh, true);
ss.str("");
ss << "color_b_noise_####" << nformat;
@@ -1373,7 +1373,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mColorBHigh);
+ result += updateGridFromFile(targetFile, mColorBHigh, true);
}
if (mUsingFire) {
@@ -1385,7 +1385,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mFlameHigh);
+ result += updateGridFromFile(targetFile, mFlameHigh, true);
ss.str("");
ss << "fuel_noise_####" << nformat;
@@ -1394,7 +1394,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mFuelHigh);
+ result += updateGridFromFile(targetFile, mFuelHigh, true);
ss.str("");
ss << "react_noise_####" << nformat;
@@ -1403,7 +1403,7 @@ int MANTA::updateNoiseStructures(FluidModifierData *mmd, int framenr)
if (!BLI_exists(targetFile)) {
return 0;
}
- result += updateGridFromFile(targetFile, mReactHigh);
+ result += updateGridFromFile(targetFile, mReactHigh, true);
}
mNoiseFromFile = true;
@@ -2778,7 +2778,7 @@ void MANTA::updateParticlesFromUni(const char *filename, bool isSecondarySys, bo
gzclose(gzf);
}
-int MANTA::updateGridFromFile(const char *filename, float *grid)
+int MANTA::updateGridFromFile(const char *filename, float *grid, bool isNoise)
{
if (with_debug)
std::cout << "MANTA::updateGridFromFile()" << std::endl;
@@ -2797,13 +2797,13 @@ int MANTA::updateGridFromFile(const char *filename, float *grid)
std::string extension = fname.substr(idx + 1);
if (extension.compare("uni") == 0)
- return updateGridFromUni(filename, grid);
-#ifdef WITH_OPENVDB
+ return updateGridFromUni(filename, grid, isNoise);
+#if OPENVDB == 1
else if (extension.compare("vdb") == 0)
- return updateGridFromVDB(filename, grid);
+ return updateGridFromVDB(filename, grid, isNoise);
#endif
else if (extension.compare("raw") == 0)
- return updateGridFromRaw(filename, grid);
+ return updateGridFromRaw(filename, grid, isNoise);
else
std::cerr << "MANTA::updateGridFromFile(): invalid file extension in file: " << filename
<< std::endl;
@@ -2815,7 +2815,7 @@ int MANTA::updateGridFromFile(const char *filename, float *grid)
}
}
-int MANTA::updateGridFromUni(const char *filename, float *grid)
+int MANTA::updateGridFromUni(const char *filename, float *grid, bool isNoise)
{
if (with_debug)
std::cout << "MANTA::updateGridFromUni()" << std::endl;
@@ -2863,13 +2863,17 @@ int MANTA::updateGridFromUni(const char *filename, float *grid)
gzread(gzf, &dimT, sizeof(int));
gzread(gzf, &timestamp, sizeof(unsigned long long));
+ int resX = (isNoise) ? mResXNoise : mResX;
+ int resY = (isNoise) ? mResYNoise : mResY;
+ int resZ = (isNoise) ? mResZNoise : mResZ;
+
if (with_debug)
std::cout << "read " << ibuffer[3] << " grid type in file: " << filename << std::endl;
// Sanity checks
- if (ibuffer[0] != mResX || ibuffer[1] != mResY || ibuffer[2] != mResZ) {
+ if (ibuffer[0] != resX || ibuffer[1] != resY || ibuffer[2] != resZ) {
std::cout << "grid dim doesn't match, read: (" << ibuffer[0] << ", " << ibuffer[1] << ", "
- << ibuffer[2] << ") vs setup: (" << mResX << ", " << mResY << ", " << mResZ << ")"
+ << ibuffer[2] << ") vs setup: (" << resX << ", " << resY << ", " << resZ << ")"
<< std::endl;
return 0;
}
@@ -2886,8 +2890,8 @@ int MANTA::updateGridFromUni(const char *filename, float *grid)
return 1;
}
-#ifdef WITH_OPENVDB
-int MANTA::updateGridFromVDB(const char *filename, float *grid)
+#if OPENVDB == 1
+int MANTA::updateGridFromVDB(const char *filename, float *grid, bool isNoise)
{
if (with_debug)
std::cout << "MANTA::updateGridFromVDB()" << std::endl;
@@ -2913,10 +2917,14 @@ int MANTA::updateGridFromVDB(const char *filename, float *grid)
openvdb::FloatGrid::Ptr gridVDB = openvdb::gridPtrCast<openvdb::FloatGrid>(baseGrid);
openvdb::FloatGrid::Accessor accessor = gridVDB->getAccessor();
+ int resX = (isNoise) ? mResXNoise : mResX;
+ int resY = (isNoise) ? mResYNoise : mResY;
+ int resZ = (isNoise) ? mResZNoise : mResZ;
+
size_t index = 0;
- for (int z = 0; z < mResZ; ++z) {
- for (int y = 0; y < mResY; ++y) {
- for (int x = 0; x < mResX; ++x, ++index) {
+ for (int z = 0; z < resZ; ++z) {
+ for (int y = 0; y < resY; ++y) {
+ for (int x = 0; x < resX; ++x, ++index) {
openvdb::Coord xyz(x, y, z);
float v = accessor.getValue(xyz);
grid[index] = v;
@@ -2927,7 +2935,7 @@ int MANTA::updateGridFromVDB(const char *filename, float *grid)
}
#endif
-int MANTA::updateGridFromRaw(const char *filename, float *grid)
+int MANTA::updateGridFromRaw(const char *filename, float *grid, bool isNoise)
{
if (with_debug)
std::cout << "MANTA::updateGridFromRaw()" << std::endl;
@@ -2941,7 +2949,11 @@ int MANTA::updateGridFromRaw(const char *filename, float *grid)
return 0;
}
- expectedBytes = sizeof(float) * mResX * mResY * mResZ;
+ int resX = (isNoise) ? mResXNoise : mResX;
+ int resY = (isNoise) ? mResYNoise : mResY;
+ int resZ = (isNoise) ? mResZNoise : mResZ;
+
+ expectedBytes = sizeof(float) * resX * resY * resZ;
readBytes = gzread(gzf, grid, expectedBytes);
assert(expectedBytes == readBytes);
diff --git a/intern/mantaflow/intern/MANTA_main.h b/intern/mantaflow/intern/MANTA_main.h
index c1c2c042a73..105beaf6e20 100644
--- a/intern/mantaflow/intern/MANTA_main.h
+++ b/intern/mantaflow/intern/MANTA_main.h
@@ -856,12 +856,12 @@ struct MANTA {
void updateMeshFromObj(const char *filename);
void updateMeshFromUni(const char *filename);
void updateParticlesFromUni(const char *filename, bool isSecondarySys, bool isVelData);
- int updateGridFromUni(const char *filename, float *grid);
- int updateGridFromVDB(const char *filename, float *grid);
- int updateGridFromRaw(const char *filename, float *grid);
+ int updateGridFromUni(const char *filename, float *grid, bool isNoise);
+ int updateGridFromVDB(const char *filename, float *grid, bool isNoise);
+ int updateGridFromRaw(const char *filename, float *grid, bool isNoise);
void updateMeshFromFile(const char *filename);
void updateParticlesFromFile(const char *filename, bool isSecondarySys, bool isVelData);
- int updateGridFromFile(const char *filename, float *grid);
+ int updateGridFromFile(const char *filename, float *grid, bool isNoise);
};
#endif