Commit: 362f5e892be7167e45bd2c693f72e3f255c055db
Author: Sebastián Barschkis
Date: Tue Aug 9 15:24:02 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB362f5e892be7167e45bd2c693f72e3f255c055db
fix for outflow: only delete content from cells inside mesh
===================================================================
M source/blender/blenkernel/intern/smoke.c
===================================================================
diff --git a/source/blender/blenkernel/intern/smoke.c
b/source/blender/blenkernel/intern/smoke.c
index 8aecfde..60c53ff 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -2192,12 +2192,17 @@ static void adjustDomainResolution(SmokeDomainSettings
*sds, int new_shift[3], E
}
}
-BLI_INLINE void apply_outflow_fields(int index, float *density, float *heat,
float *fuel, float *react, float *color_r, float *color_g, float *color_b,
float *phi, int *flags)
+BLI_INLINE void apply_outflow_fields(int index, float inflow_value, float
*density, float *heat, float *fuel, float *react, float *color_r, float
*color_g, float *color_b, float *phi, int *flags)
{
+ /* set liquid outflow */
if (phi) {
phi[index] = 0.5f; // mantaflow convetion
- flags[index] = 20; // mantaflow convetion
}
+ if (inflow_value < 0.f) { // only set outflow inside mesh
+ flags[index] = 20; // mantaflow convetion (FlagOutflow |
FlagEmpty)
+ }
+
+ /* set smoke outflow */
density[index] = 0.f;
if (heat) {
heat[index] = 0.f;
@@ -2556,7 +2561,7 @@ static void update_flowsfluids(Scene *scene, Object *ob,
SmokeDomainSettings *sd
if (dx < 0 || dy < 0 ||
dz < 0 || dx >= sds->res[0] || dy >= sds->res[1] || dz >= sds->res[2]) continue;
if (sfs->behavior ==
MOD_SMOKE_FLOW_BEHAVIOR_OUTFLOW) { // outflow
-
apply_outflow_fields(d_index, density, heat, fuel, react, color_r, color_g,
color_b, phi, flags);
+
apply_outflow_fields(d_index, inflow_map[e_index], density, heat, fuel, react,
color_r, color_g, color_b, phi, flags);
}
else if (sfs->behavior
== MOD_SMOKE_FLOW_BEHAVIOR_INFLOW || (sfs->behavior ==
MOD_SMOKE_FLOW_BEHAVIOR_GEOMETRY && smd2->time == 2)) { // inflow
apply_inflow_fields(sfs, emission_map[e_index], inflow_map[e_index], d_index,
density, heat, fuel, react, color_r, color_g, color_b, phi);
@@ -2647,7 +2652,7 @@ static void update_flowsfluids(Scene *scene, Object *ob,
SmokeDomainSettings *sd
if (sfs->behavior == MOD_SMOKE_FLOW_BEHAVIOR_OUTFLOW) { // outflow
if (interpolated_value) {
-
apply_outflow_fields(index_big, bigdensity, NULL,
bigfuel, bigreact, bigcolor_r, bigcolor_g, bigcolor_b, bigphi, bigflags);
+
apply_outflow_fields(index_big,
inflow_map_high[index_big], bigdensity, NULL, bigfuel, bigreact, bigcolor_r,
bigcolor_g, bigcolor_b, bigphi, bigflags);
}
}
else if (sfs->behavior == MOD_SMOKE_FLOW_BEHAVIOR_INFLOW ||
(sfs->behavior == MOD_SMOKE_FLOW_BEHAVIOR_GEOMETRY && smd2->time == 2)) { //
inflow
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs