[Bf-blender-cvs] [d9ba9993d8b] fluid-mantaflow: added setup for bubble particles

Sebastián Barschkis noreply at git.blender.org
Tue Jul 18 10:28:33 CEST 2017


Commit: d9ba9993d8b441be1513ba27b1bdf752636b09d2
Author: Sebastián Barschkis
Date:   Tue Jul 18 10:27:51 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBd9ba9993d8b441be1513ba27b1bdf752636b09d2

added setup for bubble particles

blender internal particle setup (not manta side), i.e. UI, particle system creation / deletion, particle IO.

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

M	intern/mantaflow/intern/FLUID.cpp
M	intern/mantaflow/intern/strings/liquid_script.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/dynamicpaint.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/makesdna/DNA_particle_types.h
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/makesrna/intern/rna_particle.c
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index fa8d1b2e2a7..4e09415c683 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -659,6 +659,14 @@ std::string FLUID::getRealValue(const std::string& varName,  SmokeModifierData *
 		ss << smd->domain->particle_band_width;
 	else if (varName == "SNDPARTICLE_VEL_THRESH")
 		ss << smd->domain->particle_velocity_threshold;
+	else if (varName == "USING_DROP_PARTS")
+		ss << (smd->domain->particle_type & MOD_SMOKE_PARTICLE_DROP ? "True" : "False");
+	else if (varName == "USING_BUBBLE_PARTS")
+		ss << (smd->domain->particle_type & MOD_SMOKE_PARTICLE_BUBBLE ? "True" : "False");
+	else if (varName == "USING_FLOAT_PARTS")
+		ss << (smd->domain->particle_type & MOD_SMOKE_PARTICLE_FLOAT ? "True" : "False");
+	else if (varName == "USING_TRACER_PARTS")
+		ss << (smd->domain->particle_type & MOD_SMOKE_PARTICLE_TRACER ? "True" : "False");
 	else if (varName == "GRAVITY_X")
 		ss << smd->domain->gravity[0];
 	else if (varName == "GRAVITY_Y")
diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index eb8ddbfde91..0e42b170964 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -42,7 +42,13 @@ adjustedNarrowBandWidth_s$ID$ = $PARTICLE_BAND_WIDTH$ # only used in adjustNumbe
 particleNumber_s$ID$ = $PARTICLE_NUMBER$\n\
 minParticles_s$ID$   = pow(particleNumber_s$ID$, dim_s$ID$)\n\
 radiusFactor_s$ID$   = $PARTICLE_RADIUS$\n\
-randomness_s$ID$     = $PARTICLE_RANDOMNESS$\n";
+randomness_s$ID$     = $PARTICLE_RANDOMNESS$\n\
+maxVel_s$ID$         = 1 # just declared here, do not set\n\
+\n\
+using_drops_s$ID$   = $USING_DROP_PARTS$\n\
+using_bubbles_s$ID$ = $USING_BUBBLE_PARTS$\n\
+using_floats_s$ID$  = $USING_FLOAT_PARTS$\n\
+using_tracers_s$ID$ = $USING_TRACER_PARTS$\n";
 
 const std::string liquid_variables_high = "\n\
 mantaMsg('Liquid variables high')\n";
@@ -185,8 +191,21 @@ def manta_step_$ID$(framenr):\n\
 const std::string liquid_step_low = "\n\
 def liquid_step_$ID$():\n\
     mantaMsg('Liquid step low')\n\
+    \n\
+    # TODO (sebbas): liquid inflow\n\
+    # add initial velocity\n\
+    #mapWeights_s$ID$.clear() # mis-use mapWeights\n\
+    #setInitialVelocity(flags=flags_s$ID$, vel=vel_s$ID$, invel=invel_s$ID$)\n\
+    #resampleVec3ToMac(source=invel_s$ID$, target=mapWeights_s$ID$)\n\
+    #addGridToPartsVec3(source=invel_s$ID$, parts=pp_s$ID$, target=pVel_pp$ID$)\n\
+    \n\
     mantaMsg('Advecting particles')\n\
     pp_s$ID$.advectInGrid(flags=flags_s$ID$, vel=vel_s$ID$, integrationMode=IntRK4, deleteInObstacle=False, stopInObstacle=False)\n\
+    \n\
+    mantaMsg('Sampling secondary particles')\n\
+    if (using_drops_s$ID$ or using_bubbles_s$ID$ or using_floats_s$ID$ or using_tracers_s$ID$):\n\
+        sampleSndParts(parts=ppSnd_s$ID$, flags=flags_s$ID$, vel=vel_s$ID$, partVel=pVelSnd_pp$ID$, partType=pTypeSnd_pp$ID$, phi=phi_s$ID$, dropVelThresh=$SNDPARTICLE_VEL_THRESH$, bubbleRise=0.5, minParticles=2, maxParticles=8, gravity=gravity_s$ID$, drops=using_drops_s$ID$, bubbles=using_bubbles_s$ID$, floats=using_floats_s$ID$, tracers=using_tracers_s$ID$)\n\
+    \n\
     mantaMsg('Pushing particles out of obstacles')\n\
     pushOutofObs(parts=pp_s$ID$, flags=flags_s$ID$, phiObs=phiObs_s$ID$)\n\
     pushOutofObs(parts=ppSnd_s$ID$, flags=flags_s$ID$, phiObs=phiObs_s$ID$, shift=1.0)\n\
@@ -246,8 +265,6 @@ def liquid_step_$ID$():\n\
     if using_highres_s$ID$:\n\
         interpolateGrid(target=phi_xl$ID$, source=phiParts_s$ID$)\n\
     \n\
-    sampleSndParts(parts=ppSnd_s$ID$, flags=flags_s$ID$, vel=vel_s$ID$, partVel=pVelSnd_pp$ID$, phi=phi_s$ID$, thresh=$SNDPARTICLE_VEL_THRESH$, minParticles=2, maxParticles=8, gravity=gravity_s$ID$)\n\
-    \n\
     # set source grids for resampling, used in adjustNumber!\n\
     pVel_pp$ID$.setSource(vel_s$ID$, isMAC=True)\n\
     adjustNumber(parts=pp_s$ID$, vel=vel_s$ID$, flags=flags_s$ID$, minParticles=1*minParticles_s$ID$, maxParticles=2*minParticles_s$ID$, phi=phi_s$ID$, exclude=phiObs_s$ID$, radiusFactor=radiusFactor_s$ID$, narrowBand=adjustedNarrowBandWidth_s$ID$)\n\
@@ -425,7 +442,11 @@ if 'narrowBandWidth_s$ID$'  in globals() : del narrowBandWidth_s$ID$\n\
 if 'combineBandWidth_s$ID$' in globals() : del combineBandWidth_s$ID$\n\
 if 'minParticles_s$ID$'     in globals() : del minParticles_s$ID$\n\
 if 'particleNumber_s$ID$'   in globals() : del particleNumber_s$ID$\n\
-if 'maxVel_s$ID$'           in globals() : del maxVel_s$ID$\n";
+if 'maxVel_s$ID$'           in globals() : del maxVel_s$ID$\n\
+if 'using_drops_s$ID$'      in globals() : del using_drops_s$ID$\n\
+if 'using_bubbles_s$ID$'    in globals() : del using_bubbles_s$ID$\n\
+if 'using_floats_s$ID$'     in globals() : del using_floats_s$ID$\n\
+if 'using_tracers_s$ID$'    in globals() : del using_tracers_s$ID$\n";
 
 const std::string liquid_delete_variables_high = "\n\
 mantaMsg('Deleting highres liquid variables')\n";
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 28182fb7bd9..c2092a606ca 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -362,6 +362,7 @@ class PHYSICS_PT_smoke_particles(PhysicButtonsPanel, Panel):
         col.enabled = not domain.point_cache.is_baked
         col.prop(domain, "use_flip_particles", text="FLIP")
         col.prop(domain, "use_drop_particles", text="Drop")
+        col.prop(domain, "use_bubble_particles", text="Bubble")
         col.prop(domain, "use_float_particles", text="Float")
         #col.prop(domain, "use_tracer_particles", text="Tracer")
 
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index bb298a13cd4..f3a5fef204d 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -5847,7 +5847,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
 					/* Particle brush: */
 					if (brush->collision == MOD_DPAINT_COL_PSYS) {
 						if (brush->psys && brush->psys->part &&
-						    ELEM(brush->psys->part->type, PART_EMITTER, PART_FLUID, PART_MANTA_FLIP, PART_MANTA_DROP, PART_MANTA_FLOAT, PART_MANTA_TRACER) &&
+						    ELEM(brush->psys->part->type, PART_EMITTER, PART_FLUID, PART_MANTA_FLIP, PART_MANTA_DROP, PART_MANTA_BUBBLE, PART_MANTA_FLOAT, PART_MANTA_TRACER) &&
 						    psys_check_enabled(brushObj, brush->psys, G.is_rendering))
 						{
 							/* Paint a particle system */
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index e53424d1c66..0a0880fdf06 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -550,6 +550,7 @@ static void initialize_particle_texture(ParticleSimulationData *sim, ParticleDat
 		break;
 	case PART_MANTA_FLIP:
 	case PART_MANTA_DROP:
+	case PART_MANTA_BUBBLE:
 	case PART_MANTA_FLOAT:
 	case PART_MANTA_TRACER:
 		break;
@@ -3783,6 +3784,7 @@ static void particles_manta_step(ParticleSimulationData *sim, int UNUSED(cfra),
 			// Sanity check: parts also enabled in fluid domain?
 			if ((part->type == PART_MANTA_FLIP && !(sds->particle_type & MOD_SMOKE_PARTICLE_FLIP)) ||
 				(part->type == PART_MANTA_DROP && !(sds->particle_type & MOD_SMOKE_PARTICLE_DROP)) ||
+				(part->type == PART_MANTA_BUBBLE && !(sds->particle_type & MOD_SMOKE_PARTICLE_BUBBLE)) ||
 				(part->type == PART_MANTA_FLOAT && !(sds->particle_type & MOD_SMOKE_PARTICLE_FLOAT)) ||
 				(part->type == PART_MANTA_TRACER && !(sds->particle_type & MOD_SMOKE_PARTICLE_TRACER)) )
 			{
@@ -3792,7 +3794,7 @@ static void particles_manta_step(ParticleSimulationData *sim, int UNUSED(cfra),
 
 			if (part->type == PART_MANTA_FLIP)
 				totpart = liquid_get_num_flip_particles(sds->fluid);
-			if (part->type == PART_MANTA_DROP || part->type == PART_MANTA_FLOAT || part->type == PART_MANTA_TRACER)
+			if (part->type == PART_MANTA_DROP || part->type == PART_MANTA_BUBBLE || part->type == PART_MANTA_FLOAT || part->type == PART_MANTA_TRACER)
 				totpart = liquid_get_num_snd_particles(sds->fluid);
 
 			// Sanity check: no particle files present yet
@@ -3823,7 +3825,7 @@ static void particles_manta_step(ParticleSimulationData *sim, int UNUSED(cfra),
 					velZ = liquid_get_flip_particle_velocity_z_at(sds->fluid, p);
 					flagActivePart = liquid_get_flip_particle_flag_at(sds->fluid, p);
 				}
-				if (part->type == PART_MANTA_DROP || part->type == PART_MANTA_FLOAT || part->type == PART_MANTA_TRACER) {
+				if (part->type == PART_MANTA_DROP || part->type == PART_MANTA_BUBBLE || part->type == PART_MANTA_FLOAT || part->type == PART_MANTA_TRACER) {
 					posX = liquid_get_snd_particle_position_x_at(sds->fluid, p);
 					posY = liquid_get_snd_particle_position_y_at(sds->fluid, p);
 					posZ = liquid_get_snd_particle_position_z_at(sds->fluid, p);
@@ -3836,9 +3838,10 @@ static void particles_manta_step(ParticleSimulationData *sim, int UNUSED(cfra),
 
 				// printf("system type is %d and particle type is %d\n", part->type, type);
 				// check if type of particle type matches current particle system type (only important for snd particles)
-				if ((part->type == PART_MANTA_DROP) && type != 0) continue; // // mantaflow convention: ParticleType DROP = 0
-				if ((part->type == PART_MANTA_FLOAT) && type != 1) continue; // // mantaflow convention: ParticleType FLOAT = 1
-				if ((part->type == PART_MANTA_TRACER) && type != 2) continue; // // mantaflow convention: ParticleType TRACER = 2
+				if ((part->type == PART_MANTA_DROP) && (type != PDROPLET)) continue;
+				if ((part->type == PART_MANTA_BUBBLE) && (type != PBUBBLE)) continue;
+				if ((part->type == PART_MANTA_FLOAT) && (type != PFLOAT)) continue;
+				if ((part->type == PART_MANTA_TRACER) && (type != PTRACER)) continue;
 
 				// Only allow active particles, i.e. filter out dead particles that just Mantaflow needs
 				if (flagActivePart == 0) { // mantaflow convention: PNONE = 0 (regu

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list