[Bf-blender-cvs] [527920e] soc-2014-fluid: using bake buton, reading more settings

Roman Pogribnyi noreply at git.blender.org
Sun Sep 21 16:38:14 CEST 2014


Commit: 527920ecf62ec0b1f99255efe1f4605404f0ce4b
Author: Roman Pogribnyi
Date:   Sat Sep 20 16:48:46 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB527920ecf62ec0b1f99255efe1f4605404f0ce4b

using bake buton, reading more settings

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

M	.gitignore
M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp
M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/python/manta_pp/grid.cpp
M	source/blender/python/manta_pp/grid.h
M	source/blender/python/manta_pp/grid.h.reg
M	source/blender/python/manta_pp/grid.h.reg.cpp

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

diff --git a/.gitignore b/.gitignore
index 6bc7b33..f5b00f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,11 @@ Desktop.ini
 # local patches
 /*.patch
 /*.diff
+
+.gitignore
+Roman_Pogribnyi/
+Roman_Pogribnyi.tar.gz
+Archive.zip
+Roman_Pogribnyi 2/
+make_diffs.txt
+series
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index d181d2e..235ffd9 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -321,7 +321,7 @@ void run_manta_scene(Scene *s, SmokeModifierData *smd)
 	args->s = *s;
 //	args.frame_num = smd->domain->manta_end_frame - smd->domain->manta_start_frame;
 	int rc = pthread_create(&manta_thread, NULL, run_manta_sim_thread, (void *)args);
-//	pthread_join(manta_thread,NULL);
+	pthread_join(manta_thread,NULL);
 //	pthread_detach(manta_thread);
 }
 
@@ -344,8 +344,8 @@ void *run_manta_sim_thread(void *arguments)
 			break;
 		printf("Simulation Step");
 		manta_write_effectors(s, smd);
-		smd->domain->manta_sim_frame = fr;
-		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << fr) )->str();
+		smd->domain->manta_sim_frame = fr /*s->r.cfra*/;
+		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << fr /*s->r.cfra*/) )->str();
 		std::string py_string_0 = string("sim_step(").append(frame_str);
 		std::string py_string_1 = py_string_0.append(")\0");
 		PyRun_SimpleString(py_string_1.c_str());
@@ -358,200 +358,25 @@ void *run_manta_sim_thread(void *arguments)
 
 void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 {
-	 /*create python file with 2-spaces indentation*/
+//	 /*create python file with 2-spaces indentation*/
 	bool wavelets = smd->domain->flags & MOD_SMOKE_HIGHRES;
-	bool noise_clamp = smd->domain->flags & MOD_SMOKE_NOISE_CLAMP; 
-	float noise_clamp_neg = smd->domain->noise_clamp_neg;
-	float noise_clamp_pos = smd->domain->noise_clamp_pos;
-	float noise_val_scale = smd->domain->noise_val_scale;
-	float noise_val_offset = smd->domain->noise_val_offset;
-	float noise_time_anim = smd->domain->noise_time_anim;
-	int num_sim_frames = smd->domain->manta_end_frame - smd->domain->manta_start_frame + 1;
-	if(num_sim_frames < 1)
-		return;
-	ofstream manta_setup_file;
-//	manta_setup_file.open("manta_scene.py", std::fstream::trunc);
-	stringstream ss; /*setup contents*/
-	
-	/*header*/
-	ss << "from manta import * \n";
-	ss << "import os, shutil, math, sys \n";
-	if (!file_exists("manta_flow.obj")){
-		return;
-	}
-	add_mesh_transform_method(ss);
-	/*Data Declaration*/
-	/*Wavelets variables*/
-	int upres = smd->domain->amplify+1;
-	ss << "uvs = " << smd->domain->manta_uvs_num << "\n";
-	ss << "velInflow = vec3(0, 0, 1)"<< "\n";	/*TODO:add UI*/
-	if (wavelets) {
-		ss << "upres = " << upres << "\n";
-		ss << "wltStrength = " << smd->domain->strength << "\n";
-		if(upres > 0)/*TODO:add UI*/
-		{	ss << "octaves = int( math.log(upres)/ math.log(2.0) + 0.5 ) \n";	}
-		else
-		{	ss << "octaves = 0"<< "\n";	}
-	}
-	else upres = 0;
-	
-	/*Solver Resolution*/
-	ss << "res = " << smd->domain->maxres << " \n";
-	manta_create_solver(ss, "s", "main", "gs", smd->domain->fluid->xRes(), smd->domain->fluid->yRes(), smd->domain->fluid->zRes(), smd->domain->manta_solver_res);
-	ss << "s.timestep = " << smd->domain->time_scale << " \n";
-	
-	/*Noise Field*/
-	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 sources*/
-	ss << "source = s.create(Mesh)\n";
-	ss << "source.load('manta_flow.obj')\n";
-	ss << "transform_back(source, gs)\n";
-	ss << "sourceVel = s.create(Mesh)\n";
-	ss << "sourceVel.load('manta_flow.obj')\n";
-	ss << "transform_back(sourceVel, gs)\n";
-	
-	/*Wavelets: larger solver*/
-	if(wavelets && upres>0)
-	{
-		manta_create_solver(ss, "xl", "larger", "xl_gs", smd->domain->fluid->xRes() * upres, smd->domain->fluid->yRes()* upres, smd->domain->fluid->zRes() * upres, smd->domain->manta_solver_res);
-		ss << "xl.timestep = " << smd->domain->time_scale * 0.5f<< " \n";
-		
-		ss << "xl_vel = xl.create(MACGrid) \n";
-		ss << "xl_density = xl.create(RealGrid) \n";/*smoke simulation*/
-		ss << "xl_flags = xl.create(FlagGrid) \n";
-		ss << "xl_flags.initDomain() \n";
-		ss << "xl_flags.fillGrid() \n";		
-		ss << "xl_source = s.create(Mesh)\n";
-		ss << "xl_source.load('manta_flow.obj')\n";
-		ss << "transform_back(xl_source, gs)\n";
-		
-		/*High-res obstacle handling*/
-		if (file_exists("manta_coll.obj"))
-		{
-			ss << "xl_obs = s.create(Mesh)\n";
-			ss << "xl_obs.load('manta_coll.obj')\n";
-			ss << "transform_back(xl_obs, gs)\n";
-			ss << "xl_obs.applyToGrid(grid=xl_flags, value=FlagObstacle,cutoff=3)\n";
-		}
-		manta_gen_noise(ss, "xl", 0, "xl_noise", 256, true, noise_clamp, noise_clamp_neg, noise_clamp_pos, noise_val_scale, noise_val_offset, noise_time_anim * (float)upres);
-	}
-	/*Flow setup*/
-	ss << "flags = s.create(FlagGrid) \n";/*must always be present*/
-	ss << "flags.initDomain() \n";
-	ss << "flags.fillGrid() \n";
-	/*Obstacle handling*/
-	if (file_exists("manta_coll.obj"))
-	{
-		ss << "obs = s.create(Mesh)\n";
-		ss << "obs.load('manta_coll.obj')\n";
-		ss << "transform_back(obs, gs)\n";
-		ss << "obs.applyToGrid(grid=flags, value=FlagObstacle, cutoff=3)\n";
-		ss << "sdf_obs  = s.create(LevelsetGrid)\n";
-		ss << "obs.meshSDF(obs, sdf_obs, 1.1)\n";
-	}
-	/*Create the array of UV grids*/
-	if(wavelets){
-		ss << "uv = [] \n";
-		ss << "for i in range(uvs): \n";
-		ss << "  uvGrid = s.create(VecGrid) \n";
-		ss << "  uv.append(uvGrid) \n";
-		ss << "  resetUvGrid( uv[i] ) \n";
-	}
-	/*Grids setup*/
-	/*For now, only one grid of each kind is needed*/
-	ss << "vel = s.create(MACGrid) \n";
-	ss << "density = s.create(RealGrid) \n";/*smoke simulation*/
-	ss << "pressure = s.create(RealGrid) \n";/*must always be present*/
-	ss << "energy = s.create(RealGrid) \n";
-	ss << "tempFlag  = s.create(FlagGrid)\n";
-	ss << "sdf_flow  = s.create(LevelsetGrid)\n";
-	ss << "forces = s.create(MACGrid)\n";
-	
-	ss << "source.meshSDF(source, sdf_flow, 1.1)\n";
-	ss << "source_shape = s.create(Cylinder, center=gs*vec3(0.5,0.1,0.5), radius=res*0.14, z=gs*vec3(0, 0.02, 0))\n";
-	/*Wavelets noise field*/
-	if (wavelets){
-		ss << "xl_wltnoise = s.create(NoiseField, loadFromFile=True) \n";
-		ss << "xl_wltnoise.posScale = vec3( int(1.0*gs.x) ) * 0.5 \n";
-		/*scale according to lowres sim , smaller numbers mean larger vortices*/
-		if (upres > 0){
-			ss << "xl_wltnoise.posScale = xl_wltnoise.posScale * " << (1./(float)upres) << ((upres == 1)?". \n":"\n");
-		}
-		ss << "xl_wltnoise.timeAnim = 0.1 \n";
-	}
-	
-	/*Flow solving steps, main loop*/
-	ss << "def sim_step(t):\n";
-	ss << "  forces.load('manta_forces.uni')\n";
-	ss << "  addForceField(flags=flags, vel=vel,force=forces)\n";
-	ss << "  addBuoyancy(density=density, vel=vel, gravity=vec3(0,0," << (-smd->domain->beta) << "), flags=flags) \n";
-	
-	manta_advect_SemiLagr(ss, 1, "flags", "vel", "density", 2);
-	manta_advect_SemiLagr(ss, 1, "flags", "vel", "vel", 2);
-	
-	if(wavelets){
-		ss << "  for i in range(uvs): \n";
-		manta_advect_SemiLagr(ss, 2, "flags", "vel", "uv[i]", 2);
-		ss << "    updateUvWeight( resetTime=16.5 , index=i, numUvs=uvs, uv=uv[i] )\n"; 
-	}
-	ss << "  applyInflow=False\n";
-	ss << "  if (t>=0 and t<75):\n";
-	if (noise_val_scale > 0.)
-		ss << "    densityInflowMeshNoise( flags=flags, density=density, noise=noise, mesh=source, scale=3, sigma=0.5 )\n";
-	else
-		ss << "    densityInflowMesh(flags=flags, density=density, mesh=source, value=1)\n";	
-	ss << "    applyInflow=True\n";
-	
-	ss << "  setWallBcs(flags=flags, vel=vel) \n";
-//	ss << "  addBuoyancy(density=density, vel=vel, gravity=vec3(0,-6e-4,0), flags=flags) \n";
-	ss << "  vorticityConfinement( vel=vel, flags=flags, strength=" << smd->domain->vorticity / 10. << " ) \n";
-	
-	manta_solve_pressure(ss,"flags", "vel", "pressure",true,smd->domain->border_collisions, smd->domain->manta_solver_res,1.0,0.01);
-	ss << "  setWallBcs(flags=flags, vel=vel) \n";
-	
-	/*determine weighting*/
-	ss << "  computeEnergy(flags=flags, vel=vel, energy=energy)\n";
-	/* mark outer obstacle region by extrapolating flags for 2 layers */
-	ss << "  tempFlag.copyFrom(flags)\n";
-	ss << "  extrapolateSimpleFlags( flags=flags, val=tempFlag, distance=2, flagFrom=FlagObstacle, flagTo=FlagFluid )\n";
-	/*now extrapolate energy weights into obstacles to fix boundary layer*/
-	ss << "  extrapolateSimpleFlags( flags=tempFlag, val=energy, distance=6, flagFrom=FlagFluid, flagTo=FlagObstacle )\n";
-	ss << "  computeWaveletCoeffs(energy)\n";
-	/*Saving output*/
-	ss << "  density.save('den%04d_temp.uni' % t) \n";
-	ss << "  os.rename('den%04d_temp.uni' % t, 'den%04d.uni' % t) \n";
-	ss << "  s.step()\n";
-	ss << " \n";
-	
-	if (wavelets && upres > 0){
-		ss << "  interpolateMACGrid( source=vel, target=xl_vel ) \n";
-		/*add all necessary octaves*/
-		ss << "  sStr = 1.0 * wltStrength  \n";
-		ss << "  sPos = 2.0  \n";
-		ss << "  for o in range(octaves): \n";
-		ss << "    for i in range(uvs): \n";
-		ss << "      uvWeight = getUvWeight(uv[i])  \n";
-		ss << "      applyNoiseVec3( flags=xl_flags, target=xl_vel, noise=xl_wltnoise, scale=sStr * uvWeight, scaleSpatial=sPos , weight=energy, uv=uv[i] ) \n";
-		ss << "    sStr *= 0.06 # magic kolmogorov factor \n";
-		ss << "    sPos *= 2.0 \n";
-		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";
-		if (noise_val_scale > 0.)
-			ss << "    densityInflowMeshNoise( flags=xl_flags, density=xl_density, noise=xl_noise, mesh=xl_source, scale=3, sigma=0.5 ) \n";
-		else
-			ss << "    densityInflowMesh(flags=xl_flags, density=xl_density, mesh=source, value=1)\n";
-		ss << "  xl_density.save('densityXl_%04d.uni' % t)\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";
-	}
-//	manta_setup_file << ss.rdbuf();
-//	manta_setup_file.close();
+//	bool noise_clamp = smd->domain->flags & MOD_SMOKE_NOISE_CLAMP; 
+//	float noise_clamp_neg = smd->domain->noise_clamp_neg;
+//	floa

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list