[Bf-blender-cvs] [b9d1c5c] fluid-mantaflow: high res fixes

Sebastián Barschkis noreply at git.blender.org
Thu Jan 28 12:37:15 CET 2016


Commit: b9d1c5cb77657d6d69afc5fabf3b41c325828c86
Author: Sebastián Barschkis
Date:   Sat Jan 2 17:36:47 2016 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rBb9d1c5cb77657d6d69afc5fabf3b41c325828c86

high res fixes

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/scenarios/smoke.h

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 0e065cc..f17e0b4 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -384,9 +384,12 @@ std::string Manta_API::get_manta_smoke_script(SmokeModifierData *smd)
     std::string smoke_script = "";
 	
 	// Check if high res is enabled
+	// Need to check if wt exists and NOT just check if high res flag is set (smd->domain->flags & MOD_SMOKE_HIGHRES)
+	// because wt might not exist, i.e. when FLUID_3D constructor is called before WTURBULENCE constructor
 	if (smd->domain->wt) {
 		smoke_script = smoke_setup_high + smoke_import_high + smoke_step_high;
 	} else {
+		// TODO: Need to figure out how to handle liquids when high resolution grids are enabled, not just for low res grids
 		if (smd->domain->flags & MOD_SMOKE_MANTA_USE_LIQUID)
 			smoke_script = smoke_setup_low  + liquid_step_low;
 		else
@@ -452,7 +455,7 @@ std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierDa
 		ss << smd->domain->wt->getResBig()[0];
 	else if (varName == "HRESY")
 		if (is2D) {	ss << smd->domain->wt->getResBig()[2];}
-		else{ 		ss << smd->domain->wt->getResBig()[1];}
+		else { 		ss << smd->domain->wt->getResBig()[1];}
 	else if (varName == "HRESZ")
 		if (is2D) {	ss << 1;}
 		else { 		ss << smd->domain->wt->getResBig()[2];}
@@ -579,14 +582,22 @@ std::string Manta_API::parseScript(const string& setup_string, SmokeModifierData
 
 void Manta_API::manta_export_grids(SmokeModifierData *smd)
 {
+	// Export the scene file
 	std::string smoke_script = get_manta_smoke_script(smd);
-	std::string final_script = Manta_API::parseScript(smoke_script, smd) + standalone;
+	
+	std::string final_script = "";
+	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
+		final_script = Manta_API::parseScript(smoke_script, smd) + standalone_high;
+	} else {
+		final_script = Manta_API::parseScript(smoke_script, smd) + standalone_low;
+	}
 	
 	ofstream myfile;
-	myfile.open (smd->domain->_manta_filepath);
+	myfile.open(smd->domain->_manta_filepath);
 	myfile << final_script;
 	myfile.close();
 	
+	// Run python environment to export grids, that is, create the grid files
 	PyGILState_STATE gilstate = PyGILState_Ensure();
 	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
 		PyRun_SimpleString(Manta_API::parseScript(smoke_export_high, smd).c_str());
@@ -702,6 +713,7 @@ void Manta_API::updatePointers(FLUID_3D *fluid)
 
 void Manta_API::updateHighResPointers(WTURBULENCE *wt)
 {
+	cout << "Updating pointers high res" << endl;
 	wt->_densityBig = (float* )pointerFromString(getGridPointer("xl_density", "xl"));;
 	if (wt->using_colors) {
 		wt->_color_rBig = (float* )pointerFromString(getGridPointer("color_r_high", "xl"));
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 5e7afc4..f8c045f 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -120,12 +120,6 @@ color_b_low.add(density) \n\
 color_b_low.multConst(manta_color_b) \n\
 using_colors = True\n";
 
-const string smoke_del_colors_low = "\n\
-del color_r_low \n\
-del color_g_low \n\
-del color_b_low \n\
-using_colors = False";
-
 const string smoke_init_colors_high = "\
 print(\"Initializing colors highres\")\n\
 color_r_high.add(xl_density) \n\
@@ -136,6 +130,18 @@ color_b_high.add(xl_density) \n\
 color_b_high.multConst(manta_color_b) \n\
 using_colors = True\n";
 
+const string smoke_del_colors_low = "\n\
+del color_r_low \n\
+del color_g_low \n\
+del color_b_low \n\
+using_colors = False";
+
+const string smoke_del_colors_high = "\n\
+del color_r_high \n\
+del color_g_high \n\
+del color_b_high \n\
+using_colors = False";
+
 const string smoke_init_heat_low = "\
 print(\"Initializing heat lowres\")\n\
 using_heat = True\n";
@@ -148,29 +154,42 @@ const string smoke_init_fire_high = "\
 print(\"Initializing fire highres\")\n\
 using_fire = True\n";
 
-const string smoke_del_colors_high = "\n\
-del color_r_high \n\
-del color_g_high \n\
-del color_b_high \n\
-using_colors = False";
-
-const string standalone = "\n\
+const string standalone_low = "\n\
 if (GUI):\n\
   gui=Gui()\n\
   gui.show()\n\
   gui.pause()\n\
 \n\
-import_grids()\n\
+import_grids_low()\n\
 \n\
 for step in range(1000):\n\
   apply_inflow()\n\
   \n\
   print('Step '+ str(step))\n\
   if using_fire:\n\
-    process_burn()\n\
+    process_burn_low()\n\
   step_low()\n\
   if using_fire:\n\
-    update_flame()\n\
+    update_flame_low()\n\
+";
+
+const string standalone_high = "\n\
+if (GUI):\n\
+  gui=Gui()\n\
+  gui.show()\n\
+  gui.pause()\n\
+\n\
+import_grids_high()\n\
+\n\
+for step in range(1000):\n\
+  apply_inflow()\n\
+  \n\
+  print('Step '+ str(step))\n\
+  if using_fire:\n\
+    process_burn_high()\n\
+  step_high()\n\
+  if using_fire:\n\
+    update_flame_high()\n\
 ";
 
 /* SMOKE */
@@ -240,16 +259,18 @@ def step_high():\n\
   for o in range(octaves):\n\
     for i in range(uvs):\n\
       uvWeight = getUvWeight(uv[i])\n\
-      applyNoiseVec3( flags=xl_flags, target=xl_vel, noise=xl_wltnoise, scale=sStr * uvWeight, scaleSpatial=sPos , weight=energy, uv=uv[i] )\n\
+      applyNoiseVec3(flags=xl_flags, target=xl_vel, noise=xl_wltnoise, scale=sStr * uvWeight, scaleSpatial=sPos , weight=energy, uv=uv[i])\n\
     sStr *= 0.06 # magic kolmogorov factor \n\
     sPos *= 2.0 \n\
   for substep in range(upres):\n\
     advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=xl_density, order=$ADVECT_ORDER$)\n\
     if using_colors: \n\
+      print ('Advecting colors high')\n\
       advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=color_r_high, order=$ADVECT_ORDER$)\n\
       advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=color_g_high, order=$ADVECT_ORDER$)\n\
       advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=color_b_high, order=$ADVECT_ORDER$)\n\
     if using_fire: \n\
+      print ('Advecting fire high')\n\
       advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=fuel_high, order=$ADVECT_ORDER$)\n\
       advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=react_high, order=$ADVECT_ORDER$)\n\
   xl.step()\n\
@@ -333,7 +354,7 @@ print('Grids exported')\n\
 ";
 
 const string smoke_import_low = "\n\
-def import_grids():\n\
+def import_grids_low():\n\
   print('Importing grids')\n\
   density.load('$MANTA_EXPORT_PATH$density_low.uni')\n\
   flags.load('$MANTA_EXPORT_PATH$flags_low.uni')\n\
@@ -356,7 +377,7 @@ def import_grids():\n\
 ";
 
 const string smoke_import_high = "\n\
-def import_grids():\n\
+def import_grids_high():\n\
   print('Importing grids')\n\
   vel.load('$MANTA_EXPORT_PATH$vel.uni')\n\
   xl_density.load('$MANTA_EXPORT_PATH$xl_density.uni')\n\




More information about the Bf-blender-cvs mailing list