[Bf-blender-cvs] [7548135] soc-2014-fluid: Manta vars initialization, support for inflow objs in setup file, *.obj export for bounding box[ -1, 1]

Roman Pogribnyi noreply at git.blender.org
Mon Jun 16 23:15:04 CEST 2014


Commit: 7548135aec7e2abdf8bea9252e40448ae20c7145
Author: Roman Pogribnyi
Date:   Mon Jun 16 23:11:58 2014 +0200
https://developer.blender.org/rB7548135aec7e2abdf8bea9252e40448ae20c7145

Manta vars initialization, support for inflow objs in setup file, *.obj export for bounding box[ -1,1]

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

M	intern/smoke/intern/MANTA.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/smoke.c

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

diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 72722e9..3bc48f7 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -167,7 +167,6 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	float noise_time_anim = smd->domain->noise_time_anim;
 	
 	FLUID_3D *fluid = smd->domain->fluid;
-	
 	ofstream manta_setup_file;
 	manta_setup_file.open("manta_scene.py", std::fstream::trunc);
 	stringstream ss; /*setup contents*/
@@ -176,6 +175,10 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	ss << "from manta import * \n";
 	ss << "import os, shutil, math, sys \n";
 	
+	if (!file_exists("manta_flow.obj")){
+		return;
+	}
+	
 /*Data Declaration*/
 	/*Wavelets variables*/
 	int upres = smd->domain->amplify;
@@ -201,8 +204,13 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	manta_gen_noise(ss, "s", 0, "noise", 256, true, noise_clamp, noise_clamp_neg, noise_clamp_pos, noise_val_scale, noise_val_offset, noise_time_anim);
 
 /*Inflow source - for now, using mock sphere */
-	ss << "source    = s.create(Cylinder, center=gs*vec3(0.3,0.2,0.5), radius=res*0.081, z=gs*vec3(0.081, 0, 0))\n";
-	ss << "sourceVel = s.create(Cylinder, center=gs*vec3(0.3,0.2,0.5), radius=res*0.15 , z=gs*vec3(0.15 , 0, 0))\n";
+	ss << "source = s.create(Mesh)\n";
+	ss << "source.load('manta_flow.obj')\n";
+	ss << "sourceVel = s.create(Mesh)\n";
+	ss << "sourceVel.load('manta_flow.obj')\n";
+
+//	ss << "source    = s.create(Cylinder, center=gs*vec3(0.3,0.2,0.5), radius=res*0.081, z=gs*vec3(0.081, 0, 0))\n";
+//	ss << "sourceVel = s.create(Cylinder, center=gs*vec3(0.3,0.2,0.5), radius=res*0.15 , z=gs*vec3(0.15 , 0, 0))\n";
 	
 /*Wavelets: larger solver*/
 	if(wavelets && upres>0)
@@ -216,7 +224,11 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 		ss << "xl_flags.initDomain() \n";
 		ss << "xl_flags.fillGrid() \n";
 			
-		ss << "xl_source = xl.create(Cylinder, center=xl_gs*vec3(0.3,0.2,0.5), radius=xl_gs.x*0.081, z=xl_gs*vec3(0.081, 0, 0)) \n";
+//		ss << "xl_source = xl.create(Cylinder, center=xl_gs*vec3(0.3,0.2,0.5), radius=xl_gs.x*0.081, z=xl_gs*vec3(0.081, 0, 0)) \n";
+		ss << "xl_source = s.create(Mesh)\n";
+		ss << "xl_source.load('manta_flow.obj')\n";
+		ss << "xl_source.scale(vec3("<< upres <<", " << upres <<", " << upres << "))\n";
+
 		/*Obstacle handling*/
 		if (file_exists("manta_coll.obj"))
 		{
@@ -280,8 +292,10 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	}
 	ss << "  applyInflow=False\n";
 	ss << "  if (t>=0 and t<75):\n";
-	ss << "    densityInflow( flags=flags, density=density, noise=noise, shape=source, scale=1, sigma=0.5 )\n";
-	ss << "    sourceVel.applyToGrid( grid=vel , value=velInflow )\n";
+		ss << "    densityInflowMesh( flags=flags, density=density, noise=noise, mesh=source, scale=1, sigma=0.5 )\n";
+		//ss << "    densityInflow( flags=flags, density=density, noise=noise, shape=source, scale=1, sigma=0.5 )\n";
+		ss << "    sourceVel.applyToGrid(grid=vel , value=velInflow,cutoff = -1)\n";
+		//ss << "    sourceVel.applyToGrid( grid=vel , value=velInflow )\n";
 	ss << "    applyInflow=True\n";
 	
 	ss << "  setWallBcs(flags=flags, vel=vel) \n";
@@ -320,7 +334,8 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 		ss << "  for substep in range(upres):  \n";
 		ss << "    advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=xl_density, order=2)  \n";
 		ss << "  if (applyInflow): \n";
-		ss << "    densityInflow( flags=xl_flags, density=xl_density, noise=xl_noise, shape=xl_source, scale=1, sigma=0.5 ) \n";
+		ss << "    densityInflowMesh( flags=xl_flags, density=xl_density, noise=xl_noise, mesh=xl_source, scale=1, sigma=0.5 ) \n";
+		//ss << "    densityInflow( flags=xl_flags, density=xl_density, noise=xl_noise, shape=xl_source, scale=1, sigma=0.5 ) \n";
 		ss << "  xl.step()   \n";
 	}
 	
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index b653841..3a602ab 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -334,28 +334,21 @@ class OBJECT_OT_MantaButton(bpy.types.Operator):
         def silent_remove(filename):
             if os.path.exists(filename):
                 os.remove(filename)
+
         def transform(obj, domain_obj):
             scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
             for dim in range(3):
-                scale_fac = scale_factor[dim] / 2
-                obj.scale[dim] *= scale_fac / domain_obj.scale[dim]
-                obj.location[dim] = (obj.location[dim] - domain_obj.location[dim])* scale_fac / domain_obj.scale[dim]
-                if dim != 1: #handle y 
-                    obj.location[dim] += scale_fac
-                else:
-                    obj.location[dim] -= scale_fac
-		
+                obj.scale[dim] /= domain_obj.scale[dim]
+                obj.location[dim] -= domain_obj.location[dim] 
+                obj.location[dim] /= domain_obj.scale[dim]
+	
         def transform_back(obj, domain_obj):
             scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
             for dim in range(3):
-                scale_fac = scale_factor[dim] / 2
-                obj.scale[dim] *=  domain_obj.scale[dim] / scale_fac
-                if dim != 1: #handle y
-                    obj.location[dim] -= scale_fac
-                else:
-                    obj.location[dim] += scale_fac
-                obj.location[dim] = (obj.location[dim])* domain_obj.scale[dim] / scale_fac + domain_obj.location[dim]
-		
+                obj.scale[dim] *=  domain_obj.scale[dim]
+                obj.location[dim] *=  domain_obj.scale[dim]
+                obj.location[dim] += domain_obj.location[dim] 
+
         coll_objs = []
         flow_objs = []
         selected_before = []
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 74edd19..36babcb 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -562,6 +562,14 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 
 			smd->domain->viewsettings = MOD_SMOKE_VIEW_SHOWBIG;
 			smd->domain->effector_weights = BKE_add_effector_weights(NULL);
+			
+			/*mantaflow settings*/
+			smd-> domain->manta_solver_res = 3;
+			smd->domain->noise_clamp_neg = 0;
+			smd->domain->noise_clamp_pos = 1;
+			smd->domain->noise_val_scale = 1;
+			smd->domain->noise_val_offset = 0.075;
+			smd->domain->noise_time_anim = 0.2;
 		}
 		else if (smd->type & MOD_SMOKE_TYPE_FLOW)
 		{




More information about the Bf-blender-cvs mailing list