[Bf-blender-cvs] [bc6ab0f0771] fluid-mantaflow: updated viscosity settings

Sebastián Barschkis noreply at git.blender.org
Sat Dec 2 16:19:04 CET 2017


Commit: bc6ab0f0771e0a285b64fef8798d8f2aa91f0752
Author: Sebastián Barschkis
Date:   Sat Dec 2 16:13:20 2017 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rBbc6ab0f0771e0a285b64fef8798d8f2aa91f0752

updated viscosity settings

reusing viscosity UI from elbeem fluid

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

M	intern/mantaflow/intern/FLUID.cpp
M	intern/mantaflow/intern/strings/liquid_script.h
M	intern/mantaflow/intern/strings/shared_script.h
M	release/scripts/startup/bl_operators/presets.py
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 6cbf1e949ab..47ed527b306 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -821,7 +821,7 @@ std::string FLUID::getRealValue(const std::string& varName,  SmokeModifierData *
 	else if (varName == "LIQUID_SURFACE_TENSION")
 		ss << smd->domain->surface_tension;
 	else if (varName == "FLUID_VISCOSITY")
-		ss << smd->domain->viscosity;
+		ss << smd->domain->viscosity_base * pow(10.0f, -smd->domain->viscosity_exponent);
 	else if (varName == "FLUID_DOMAIN_SIZE")
 		ss << smd->domain->domain_size;
 	else if (varName == "SNDPARTICLE_TYPES") {
diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index bb26b1ffd81..f9dc24656bc 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -272,7 +272,9 @@ def liquid_step_$ID$():\n\
     if viscosity_s$ID$ > 0.:\n\
         mantaMsg('Viscosity')\n\
         # diffusion param for solve = const * dt / dx^2\n\
-        alphaV = viscosity_s$ID$ * s$ID$.timestep * float(res_s$ID$*res_s$ID$)\n\
+        #alphaV = viscosity_s$ID$ * s$ID$.timestep * float(res_s$ID$*res_s$ID$)\n\
+        # convert world viscosity (viscosityW) to grid space viscosity (alphaV)\n\
+        alphaV = viscosity_s$ID$ * (Real(res_s$ID$*res_s$ID$) / Real(domainSize_s$ID$*domainSize_s$ID$)) * s$ID$.frameLength * s$ID$.timestep\n\
         setWallBcs(flags=flags_s$ID$, vel=vel_s$ID$, obvel=obvel_s$ID$ if using_obstacle_s$ID$ else 0, phiObs=phiObs_s$ID$, fractions=fractions_s$ID$)\n\
         cgSolveDiffusion(flags_s$ID$, vel_s$ID$, alphaV)\n\
     \n\
@@ -280,7 +282,7 @@ def liquid_step_$ID$():\n\
     \n\
     mantaMsg('Calculating curvature')\n\
     getLaplacian(laplacian=curvature_s$ID$, grid=phi_s$ID$)\n\
-    \n\
+\n\
     if using_guiding_s$ID$:\n\
         mantaMsg('Guiding and pressure')\n\
         weightGuide_s$ID$.addConst(alpha_s$ID$)\n\
diff --git a/intern/mantaflow/intern/strings/shared_script.h b/intern/mantaflow/intern/strings/shared_script.h
index e6df80a489e..0b0a2e1dbf9 100644
--- a/intern/mantaflow/intern/strings/shared_script.h
+++ b/intern/mantaflow/intern/strings/shared_script.h
@@ -92,7 +92,8 @@ theta_s$ID$ = 1.0\n\
 # fluid diffusion / viscosity\n\
 domainSize_s$ID$ = $FLUID_DOMAIN_SIZE$ # longest domain side in cm\n\
 if domainSize_s$ID$ == 0: domainSize_s$ID$ = 100 # TODO (sebbas): just for versioning, remove with proper 2.8 versioning\n\
-viscosity_s$ID$  = $FLUID_VISCOSITY$ / (domainSize_s$ID$ / res_s$ID$) * (30.0 / $FPS$) # assuming 30fps\n";
+#viscosity_s$ID$ = $FLUID_VISCOSITY$ / ((domainSize_s$ID$*domainSize_s$ID$) / s$ID$.frameLength)\n\
+viscosity_s$ID$  = $FLUID_VISCOSITY$ # kinmetic viscosity in m^2/s\n";
 
 const std::string fluid_variables_high= "\n\
 upres_xl$ID$  = $UPRES$\n\
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index fdacf24f6e0..48c5489eacc 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -366,6 +366,7 @@ class AddPresetCloth(AddPresetBase, Operator):
     preset_subdir = "cloth"
 
 
+# TODO (sebbas): Remove this when removing elbeem fluid modifier
 class AddPresetFluid(AddPresetBase, Operator):
     """Add or remove a Fluid Preset"""
     bl_idname = "fluid.preset_add"
@@ -384,6 +385,24 @@ class AddPresetFluid(AddPresetBase, Operator):
     preset_subdir = "fluid"
 
 
+class AddPresetSmoke(AddPresetBase, Operator):
+    """Add or remove a Smoke Preset"""
+    bl_idname = "smoke.preset_add"
+    bl_label = "Add Smoke Preset"
+    preset_menu = "SMOKE_MT_presets"
+
+    preset_defines = [
+        "smoke = bpy.context.smoke"
+        ]
+
+    preset_values = [
+        "smoke.domain_settings.viscosity_base",
+        "smoke.domain_settings.viscosity_exponent",
+        ]
+
+    preset_subdir = "smoke"
+
+
 class AddPresetHairDynamics(AddPresetBase, Operator):
     """Add or remove a Hair Dynamics Preset"""
     bl_idname = "particle.hair_dynamics_preset_add"
@@ -686,6 +705,7 @@ classes = (
     AddPresetCamera,
     AddPresetCloth,
     AddPresetFluid,
+    AddPresetSmoke,
     AddPresetHairDynamics,
     AddPresetInteraction,
     AddPresetInterfaceTheme,
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 1bee6a285f1..20971a19630 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -20,13 +20,18 @@
 import bpy
 import os
 from copy import deepcopy
-from bpy.types import Panel
+from bpy.types import Panel, Menu
 
 from .properties_physics_common import (
     point_cache_ui,
     effector_weights_ui,
 )
 
+class SMOKE_MT_presets(Menu):
+    bl_label = "Fluid Presets"
+    preset_subdir = "smoke"
+    preset_operator = "script.execute_preset"
+    draw = Menu.draw_preset
 
 class PhysicButtonsPanel:
     bl_space_type = 'PROPERTIES'
@@ -437,11 +442,21 @@ class PHYSICS_PT_smoke_diffusion(PhysicButtonsPanel, Panel):
 
         col = split.column()
         col.enabled = not domain.point_cache.is_baked
-        col.prop(domain, "viscosity", text="Viscosity")
-        col.prop(domain, "domain_size", text="Size")
+        col.label(text="Viscosity Presets:")
+        sub = col.row(align=True)
+        sub.menu("SMOKE_MT_presets", text=bpy.types.SMOKE_MT_presets.bl_label)
+        sub.operator("smoke.preset_add", text="", icon='ZOOMIN')
+        sub.operator("smoke.preset_add", text="", icon='ZOOMOUT').remove_active = True
+
+        sub = col.column(align=True)
+        sub.prop(domain, "viscosity_base", text="Base")
+        sub.prop(domain, "viscosity_exponent", text="Exponent", slider=True)
 
         col = split.column()
         col.enabled = not domain.point_cache.is_baked
+        col.label(text="Real World Size:")
+        col.prop(domain, "domain_size", text="Meters")
+        col.label(text="Surface tension:")
         col.prop(domain, "surface_tension", text="Tension")
 
 class PHYSICS_PT_smoke_guiding(PhysicButtonsPanel, Panel):
@@ -648,6 +663,7 @@ class PHYSICS_PT_smoke_display_settings(PhysicButtonsPanel, Panel):
         col.template_color_ramp(domain, "color_ramp", expand=True)
 
 classes = (
+    SMOKE_MT_presets,
     PHYSICS_PT_smoke,
     PHYSICS_PT_smoke_flow_source,
     PHYSICS_PT_smoke_flow_advanced,
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index b5f6c5c19fe..57b2db55f01 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -562,8 +562,9 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->domain->particle_tracer_max = 2;
 
 			smd->domain->surface_tension = 0.0f;
-			smd->domain->viscosity = 0.0f;
-			smd->domain->domain_size = 100.0f;
+			smd->domain->viscosity_base = 1.0f;
+			smd->domain->viscosity_exponent = 6.0f;
+			smd->domain->domain_size = 0.5f;
 
 			/* guiding */
 			smd->domain->guiding_alpha = 2.0f;
@@ -708,7 +709,8 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData
 		tsmd->domain->particle_tracer_max = smd->domain->particle_tracer_max;
 
 		tsmd->domain->surface_tension = smd->domain->surface_tension;
-		tsmd->domain->viscosity = smd->domain->viscosity;
+		tsmd->domain->viscosity_base = smd->domain->viscosity_base;
+		tsmd->domain->viscosity_exponent = smd->domain->viscosity_exponent;
 		tsmd->domain->domain_size = smd->domain->domain_size;
 
 		tsmd->domain->guiding_alpha = smd->domain->guiding_alpha;
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index c56fb541646..e313491d22b 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -263,9 +263,9 @@ typedef struct SmokeDomainSettings {
 	int particle_tracer_max;
 	int particle_type;
 	float surface_tension;
-	float viscosity;
+	float viscosity_base;
+	int viscosity_exponent;
 	float domain_size;
-	char pad2[4];
 
 	/* fluid guiding parameters */
 	float guiding_alpha; /* guiding weight scalar (determines strength) */
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 4f5d863f31e..830b863d0ef 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -1420,15 +1420,23 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Tension", "Surface tension of liquid (higher value results in greater hydrophobic behaviour)");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
 
-	prop = RNA_def_property(srna, "viscosity", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_range(prop, 0.0, 100.0);
-	RNA_def_property_ui_range(prop, 0.0, 100.0, 0.01, 6);
-	RNA_def_property_ui_text(prop, "Viscosity", "Viscosity of liquid (higher value results in more viscous liquid)");
+	prop = RNA_def_property(srna, "viscosity_base", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "viscosity_base");
+	RNA_def_property_range(prop, 0, 10);
+	RNA_def_property_ui_text(prop, "Viscosity Base", "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+
+	prop = RNA_def_property(srna, "viscosity_exponent", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "viscosity_exponent");
+	RNA_def_property_range(prop, 0, 10);
+	RNA_def_property_ui_text(prop, "Viscosity Exponent",
+							 "Negative exponent for the viscosity value (to simplify entering small values "
+							 "e.g. 5*10^-6)");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
 
 	prop = RNA_def_property(srna, "domain_size", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_range(prop, 0.001, 10000.0);
-	RNA_def_property_ui_text(prop, "Size", "Domain size in cm (longest domain side)");
+	RNA_def_property_ui_text(prop, "Meters", "Domain size in meters (longest domain side)");
 	RNA_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list