Fluid: Added an option to delete fluid inside obstacles

Simple checkbox that - if enabled - will tell the solver to clear density or liquid particles in obstacle cells.
This commit is contained in:
Sebastián Barschkis 2020-03-04 17:23:09 +01:00
parent b32fd73b24
commit 6958ec3f7f
7 changed files with 17 additions and 7 deletions

View File

@ -977,6 +977,8 @@ std::string MANTA::getRealValue(const std::string &varName, FluidModifierData *m
ss << (mmd->domain->flags & FLUID_DOMAIN_USE_SPEED_VECTORS ? "True" : "False");
else if (varName == "USING_FRACTIONS")
ss << (mmd->domain->flags & FLUID_DOMAIN_USE_FRACTIONS ? "True" : "False");
else if (varName == "DELETE_IN_OBSTACLE")
ss << (mmd->domain->flags & FLUID_DOMAIN_DELETE_IN_OBSTACLE ? "True" : "False");
else
std::cout << "ERROR: Unknown option: " << varName << std::endl;
return ss.str();

View File

@ -96,9 +96,10 @@ gravity_s$ID$ = vec3($GRAVITY_X$, $GRAVITY_Y$, $GRAVITY_Z$)\n\
gs_s$ID$ = vec3($RESX$, $RESY$, $RESZ$)\n\
maxVel_s$ID$ = 0\n\
\n\
doOpen_s$ID$ = $DO_OPEN$\n\
boundConditions_s$ID$ = '$BOUND_CONDITIONS$'\n\
boundaryWidth_s$ID$ = $BOUNDARY_WIDTH$\n\
doOpen_s$ID$ = $DO_OPEN$\n\
boundConditions_s$ID$ = '$BOUND_CONDITIONS$'\n\
boundaryWidth_s$ID$ = $BOUNDARY_WIDTH$\n\
deleteInObstacle_s$ID$ = $DELETE_IN_OBSTACLE$\n\
\n\
using_smoke_s$ID$ = $USING_SMOKE$\n\
using_liquid_s$ID$ = $USING_LIQUID$\n\

View File

@ -212,7 +212,7 @@ def liquid_step_$ID$():\n\
mantaMsg('Liquid step')\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\
pp_s$ID$.advectInGrid(flags=flags_s$ID$, vel=vel_s$ID$, integrationMode=IntRK4, deleteInObstacle=deleteInObstacle_s$ID$, stopInObstacle=False)\n\
\n\
mantaMsg('Pushing particles out of obstacles')\n\
pushOutofObs(parts=pp_s$ID$, flags=flags_s$ID$, phiObs=phiObs_s$ID$)\n\

View File

@ -379,7 +379,8 @@ def smoke_step_$ID$():\n\
resampleVec3ToMac(source=obvelC_s$ID$, target=obvel_s$ID$)\n\
\n\
# Cells inside obstacle should not contain any density, fire, etc.\n\
resetInObstacle(flags=flags_s$ID$, density=density_s$ID$, vel=vel_s$ID$, heat=heat_s$ID$, fuel=fuel_s$ID$, flame=flame_s$ID$, red=color_r_s$ID$, green=color_g_s$ID$, blue=color_b_s$ID$)\n\
if deleteInObstacle_s$ID$:\n\
resetInObstacle(flags=flags_s$ID$, density=density_s$ID$, vel=vel_s$ID$, heat=heat_s$ID$, fuel=fuel_s$ID$, flame=flame_s$ID$, red=color_r_s$ID$, green=color_g_s$ID$, blue=color_b_s$ID$)\n\
\n\
# add initial velocity\n\
if using_invel_s$ID$:\n\

View File

@ -271,10 +271,10 @@ class PHYSICS_PT_settings(PhysicButtonsPanel, Panel):
col.prop(effector_settings, "use_plane_init", text="Is Planar")
col.prop(effector_settings, "surface_distance", text="Surface Thickness")
col.prop(effector_settings, "delete_in_obstacle", text="Delete In Obstacle")
if effector_settings.effector_type == 'GUIDE':
col.prop(effector_settings, "velocity_factor", text="Velocity Factor")
col = flow.column()
col.prop(effector_settings, "guide_mode", text="Guide Mode")

View File

@ -41,6 +41,7 @@ enum {
FLUID_DOMAIN_USE_SPEED_VECTORS = (1 << 11), /* Generate mesh speed vectors. */
FLUID_DOMAIN_EXPORT_MANTA_SCRIPT = (1 << 12), /* Export mantaflow script during bake. */
FLUID_DOMAIN_USE_FRACTIONS = (1 << 13), /* Use second order obstacles. */
FLUID_DOMAIN_DELETE_IN_OBSTACLE = (1 << 14), /* Delete fluid inside obstacles. */
};
/* Border collisions. */
@ -494,7 +495,7 @@ enum {
FLUID_FLOW_USE_PART_SIZE = (1 << 4),
/* Control when to apply inflow. */
FLUID_FLOW_USE_INFLOW = (1 << 5),
/* Control when to apply inflow. */
/* Control how to initialize flow objects. */
FLUID_FLOW_USE_PLANE_INIT = (1 << 6),
};

View File

@ -2539,6 +2539,11 @@ static void rna_def_fluid_effector_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Is Planar", "Treat this object as a planar, unclosed mesh");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_reset");
prop = RNA_def_property(srna, "delete_in_obstacle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", FLUID_DOMAIN_DELETE_IN_OBSTACLE);
RNA_def_property_ui_text(prop, "Clear In Obstacle", "Delete fluid inside obstacles");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Fluid_reset");
prop = RNA_def_property(srna, "velocity_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "vel_multi");
RNA_def_property_range(prop, -100.0, 100.0);