[Bf-blender-cvs] [d18ae102f34] fluid-mantaflow: added minimal guiding UI controls

Sebastián Barschkis noreply at git.blender.org
Fri Aug 4 23:08:52 CEST 2017


Commit: d18ae102f34f8f0c10af160e2ee3ad20c165bd7b
Author: Sebastián Barschkis
Date:   Fri Aug 4 23:08:06 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBd18ae102f34f8f0c10af160e2ee3ad20c165bd7b

added minimal guiding UI controls

minimal controls = toggle guiding and set tornado velocity strength

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

M	intern/mantaflow/intern/FLUID.cpp
M	intern/mantaflow/intern/strings/smoke_script.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 4848f55f85e..37220921e5e 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -565,6 +565,8 @@ std::string FLUID::getRealValue(const std::string& varName,  SmokeModifierData *
 		ss << (smd->domain->active_fields & SM_ACTIVE_FIRE ? "True" : "False");
 	else if (varName == "USING_HIGHRES")
 		ss << (smd->domain->flags & MOD_SMOKE_HIGHRES ? "True" : "False");
+	else if (varName == "USING_GUIDING")
+		ss << (smd->domain->flags & MOD_SMOKE_GUIDING ? "True" : "False");
 	else if (varName == "SOLVER_DIM")
 		ss << smd->domain->manta_solver_res;
 	else if (varName == "DO_OPEN") {
@@ -677,6 +679,8 @@ std::string FLUID::getRealValue(const std::string& varName,  SmokeModifierData *
 		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 == "GUIDING_STRENGTH")
+		ss << smd->domain->guiding_strength;
 	else if (varName == "GRAVITY_X")
 		ss << smd->domain->gravity[0];
 	else if (varName == "GRAVITY_Y")
diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h
index db690fa8b3c..e4857af04d4 100644
--- a/intern/mantaflow/intern/strings/smoke_script.h
+++ b/intern/mantaflow/intern/strings/smoke_script.h
@@ -42,7 +42,7 @@ if doOpen_s$ID$:\n\
     setOpenBound(flags=flags_s$ID$, bWidth=boundaryWidth_s$ID$, openBound=boundConditions_s$ID$, type=FlagOutflow|FlagEmpty)\n\
 \n\
 # TODO (sebbas): just put this code here out of convenience - removing this later anyways\n\
-getSpiralVelocity(flags=flags_s$ID$, vel=velT_s$ID$, strength=6, with3D=True)\n\
+getSpiralVelocity(flags=flags_s$ID$, vel=velT_s$ID$, strength=$GUIDING_STRENGTH$, with3D=True)\n\
 setGradientYWeight(W=weightG_s$ID$, minY=0, maxY=res_s$ID$/2, valAtMin=valAtMin_s$ID$, valAtMax=valAtMin_s$ID$)\n\
 setGradientYWeight(W=weightG_s$ID$, minY=res_s$ID$/2, maxY=res_s$ID$, valAtMin=valAtMax_s$ID$, valAtMax=valAtMax_s$ID$)\n";
 
@@ -63,6 +63,7 @@ mantaMsg('Smoke variables low')\n\
 using_colors_s$ID$    = $USING_COLORS$\n\
 using_heat_s$ID$      = $USING_HEAT$\n\
 using_fire_s$ID$      = $USING_FIRE$\n\
+using_guiding_s$ID$   = $USING_GUIDING$\n\
 vorticity_s$ID$       = $VORTICITY$\n\
 \n\
 # fluid guiding params\n\
@@ -335,10 +336,12 @@ def step_low_$ID$():\n\
     mantaMsg('Walls')\n\
     setWallBcs(flags=flags_s$ID$, vel=vel_s$ID$, obvel=obvel_s$ID$)\n\
     \n\
-    mantaMsg('Guiding')\n\
-    PD_fluid_guiding(vel=vel_s$ID$, velT=velT_s$ID$, flags=flags_s$ID$, weight=weightG_s$ID$, blurRadius=beta_s$ID$, pressure=pressure_s$ID$, tau=tau_s$ID$, sigma=sigma_s$ID$, theta=theta_s$ID$, preconditioner=$PRECONDITIONER$, zeroPressureFixing=not doOpen_s$ID$)\n\
-    #mantaMsg('Pressure')\n\
-    #solvePressure(flags=flags_s$ID$, vel=vel_s$ID$, pressure=pressure_s$ID$, preconditioner=$PRECONDITIONER$, zeroPressureFixing=not doOpen_s$ID$) # closed domains require pressure fixing\n\
+    if using_guiding_s$ID$:\n\
+        mantaMsg('Guiding')\n\
+        PD_fluid_guiding(vel=vel_s$ID$, velT=velT_s$ID$, flags=flags_s$ID$, weight=weightG_s$ID$, blurRadius=beta_s$ID$, pressure=pressure_s$ID$, tau=tau_s$ID$, sigma=sigma_s$ID$, theta=theta_s$ID$, preconditioner=$PRECONDITIONER$, zeroPressureFixing=not doOpen_s$ID$)\n\
+    else:\n\
+        mantaMsg('Pressure')\n\
+        solvePressure(flags=flags_s$ID$, vel=vel_s$ID$, pressure=pressure_s$ID$, preconditioner=$PRECONDITIONER$, zeroPressureFixing=not doOpen_s$ID$) # closed domains require pressure fixing\n\
 \n\
 def process_burn_low_$ID$():\n\
     mantaMsg('Process burn low')\n\
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 531e66c8dd7..ddf4b748352 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -386,6 +386,31 @@ class PHYSICS_PT_smoke_particles(PhysicButtonsPanel, Panel):
         sub4.active = domain.use_tracer_particles
         sub4.prop(domain, "particle_tracer_amount", text="Amount")
 
+class PHYSICS_PT_smoke_guiding(PhysicButtonsPanel, Panel):
+    bl_label = "Fluid Guiding"
+    COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+    @classmethod
+    def poll(cls, context):
+        md = context.smoke
+        rd = context.scene.render
+        return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        domain = context.smoke.domain_settings
+
+        split = layout.split()
+
+        col = split.column()
+        col.enabled = not domain.point_cache.is_baked
+        col.prop(domain, "use_guiding", text="Guiding")
+
+        col = split.column()
+        col.enabled = not domain.point_cache.is_baked
+        col.active = domain.use_guiding
+        col.prop(domain, "guiding_strength", text="Strength")
+
 class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel):
     bl_label = "Fluid Groups"
     bl_options = {'DEFAULT_CLOSED'}
@@ -571,6 +596,7 @@ classes = (
     PHYSICS_PT_smoke_adaptive_domain,
     PHYSICS_PT_smoke_quality,
     PHYSICS_PT_smoke_particles,
+    PHYSICS_PT_smoke_guiding,
     PHYSICS_PT_smoke_groups,
     PHYSICS_PT_smoke_cache,
     PHYSICS_PT_smoke_field_weights,
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index c7efe7ab78a..c1be6259f71 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -548,6 +548,9 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->domain->particle_bubble_rise = 0.5f;
 			smd->domain->particle_type = 0;
 
+			/* guiding */
+			smd->domain->guiding_strength = 6.0f;
+
 			/*mantaflow settings*/
 			smd->domain->manta_solver_res = 3;
 			smd->domain->noise_pos_scale = 2.0f;
@@ -675,6 +678,8 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData
 		tsmd->domain->particle_velocity_threshold = smd->domain->particle_velocity_threshold;
 		tsmd->domain->particle_bubble_rise = smd->domain->particle_bubble_rise;
 
+		tsmd->domain->guiding_strength = smd->domain->guiding_strength;
+
 		tsmd->domain->manta_solver_res = smd->domain->manta_solver_res;
 		tsmd->domain->noise_pos_scale = smd->domain->noise_pos_scale;
 		tsmd->domain->noise_time_anim = smd->domain->noise_time_anim;
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index d0ed5c3e6e4..50f70a71a51 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -51,6 +51,7 @@ enum {
 	MOD_SMOKE_ADAPTIVE_DOMAIN = (1 << 7),
 	MOD_SMOKE_USE_SURFACE_CACHE = (1 << 8),
 	MOD_SMOKE_USE_VOLUME_CACHE = (1 << 9),
+	MOD_SMOKE_GUIDING = (1 << 10),
 };
 
 /* border collisions */
@@ -254,7 +255,9 @@ typedef struct SmokeDomainSettings {
 	float particle_float_amount;
 	float particle_tracer_amount;
 	int particle_type;
-	float pad4;
+
+	/* fluid guiding parameters */
+	float guiding_strength;
 
 	/* Display settings */
 	char slice_method, axis_slice_method;
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index d6ad4285c74..31b30edcd55 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -1326,6 +1326,18 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Amount", "Amount of tracer particles (probability of sampling a new particle in a cell)");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache");
 
+	prop = RNA_def_property(srna, "use_guiding", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_GUIDING);
+	RNA_def_property_ui_text(prop, "Guiding", "Enable smoke velocity guiding");
+	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+
+	prop = RNA_def_property(srna, "guiding_strength", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_range(prop, 0.0, 100.0);
+	RNA_def_property_ui_range(prop, 0.0, 1.0, 0.02, 5);
+	RNA_def_property_ui_text(prop, "Strength", "Guiding velocity strength (higher value results in faster guiding velocity)");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache");
+
 	/* display settings */
 
 	prop = RNA_def_property(srna, "slice_method", PROP_ENUM, PROP_NONE);




More information about the Bf-blender-cvs mailing list