[Bf-blender-cvs] [68221b7ebaf] blender-v2.82-release: Fluid: Fixed cache reading issue with larger resolution noise grids

Sebastián Barschkis noreply at git.blender.org
Fri Feb 7 19:38:01 CET 2020


Commit: 68221b7ebafe58a2bbf612ad8c59e24569489be5
Author: Sebastián Barschkis
Date:   Fri Feb 7 19:37:44 2020 +0100
Branches: blender-v2.82-release
https://developer.blender.org/rB68221b7ebafe58a2bbf612ad8c59e24569489be5

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.

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

M	intern/mantaflow/intern/MANTA_main.cpp
M	intern/mantaflow/intern/MANTA_main.h
M	source/blender/blenkernel/intern/fluid.c

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

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(cons

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list