[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