[Bf-blender-cvs] [86e3e95de6] fluid-mantaflow: reordered cleanup before and after smoke step
Sebastián Barschkis
noreply at git.blender.org
Tue Mar 7 01:26:34 CET 2017
Commit: 86e3e95de6feaa5706faddf16ee9cd468866f991
Author: Sebastián Barschkis
Date: Sun Feb 26 15:44:23 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB86e3e95de6feaa5706faddf16ee9cd468866f991
reordered cleanup before and after smoke step
===================================================================
M intern/mantaflow/intern/strings/smoke_script.h
M source/blender/blenkernel/intern/smoke.c
===================================================================
diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h
index d53e214579..4d9b8cdf1f 100644
--- a/intern/mantaflow/intern/strings/smoke_script.h
+++ b/intern/mantaflow/intern/strings/smoke_script.h
@@ -191,52 +191,19 @@ const std::string smoke_pre_step_low = "\n\
def smoke_pre_step_low():\n\
copyRealToVec3(sourceX=x_vel, sourceY=y_vel, sourceZ=z_vel, target=vel)\n\
copyRealToVec3(sourceX=x_obvel, sourceY=y_obvel, sourceZ=z_obvel, target=obvel)\n\
- copyRealToVec3(sourceX=x_force, sourceY=y_force, sourceZ=z_force, target=forces)\n\
- \n\
- clearInObstacle(flags=flags, grid=density)\n\
- clearInObstacle(flags=flags, grid=vel)\n\
- if (using_fire):\n\
- clearInObstacle(flags=flags, grid=fuel)\n\
- clearInObstacle(flags=flags, grid=flame)\n\
- clearInObstacle(flags=flags, grid=react)\n\
- if (using_colors):\n\
- clearInObstacle(flags=flags, grid=color_r)\n\
- clearInObstacle(flags=flags, grid=color_g)\n\
- clearInObstacle(flags=flags, grid=color_b)\n\
- \n\
- averageGrid(grid=obvel, num=numObs)\n";
+ copyRealToVec3(sourceX=x_force, sourceY=y_force, sourceZ=z_force, target=forces)\n";
const std::string smoke_pre_step_high = "\n\
def smoke_pre_step_high():\n\
copyRealToVec3(sourceX=texture_u, sourceY=texture_v, sourceZ=texture_w, target=uv[0])\n\
- copyRealToVec3(sourceX=texture_u2, sourceY=texture_v2, sourceZ=texture_w2, target=uv[1])\n\
- \n\
- clearInObstacle(flags=xl_flags, grid=xl_density)\n\
- clearInObstacle(flags=xl_flags, grid=xl_vel)\n\
- if (using_fire):\n\
- clearInObstacle(flags=xl_flags, grid=xl_fuel)\n\
- clearInObstacle(flags=xl_flags, grid=xl_flame)\n\
- clearInObstacle(flags=xl_flags, grid=xl_react)\n\
- if (using_colors):\n\
- clearInObstacle(flags=xl_flags, grid=xl_color_r)\n\
- clearInObstacle(flags=xl_flags, grid=xl_color_g)\n\
- clearInObstacle(flags=xl_flags, grid=xl_color_b)\n";
+ copyRealToVec3(sourceX=texture_u2, sourceY=texture_v2, sourceZ=texture_w2, target=uv[1])\n";
const std::string smoke_post_step_low = "\n\
def smoke_post_step_low():\n\
- forces.clear()\n\
- #obvel.clear()\n\
- #x_obvel.clear()\n\
- #y_obvel.clear()\n\
- #z_obvel.clear()\n\
- phiObsIn.setConst(0.5)\n\
- \n\
copyVec3ToReal(source=vel, targetX=x_vel, targetY=y_vel, targetZ=z_vel)\n";
const std::string smoke_post_step_high = "\n\
def smoke_post_step_high():\n\
- xl_phiObsIn.setConst(0.5)\n\
- \n\
copyVec3ToReal(source=uv[0], targetX=texture_u, targetY=texture_v, targetZ=texture_w)\n\
copyVec3ToReal(source=uv[1], targetX=texture_u2, targetY=texture_v2, targetZ=texture_w2)\n";
@@ -283,9 +250,24 @@ def manta_step(start_frame):\n\
const std::string smoke_step_low = "\n\
def step_low():\n\
mantaMsg('Smoke step low')\n\
+ \n\
+ mantaMsg('Setting flags')\n\
setObstacleFlags(flags=flags, phiObs=phiObsIn, fractions=fractions, phiOut=phiOut)\n\
flags.fillGrid()\n\
\n\
+ mantaMsg('Clearing cells')\n\
+ clearInObstacle(flags=flags, grid=density)\n\
+ clearInObstacle(flags=flags, grid=vel)\n\
+ clearInObstacle(flags=flags, grid=pressure)\n\
+ if (using_fire):\n\
+ clearInObstacle(flags=flags, grid=fuel)\n\
+ clearInObstacle(flags=flags, grid=flame)\n\
+ clearInObstacle(flags=flags, grid=react)\n\
+ if (using_colors):\n\
+ clearInObstacle(flags=flags, grid=color_r)\n\
+ clearInObstacle(flags=flags, grid=color_g)\n\
+ clearInObstacle(flags=flags, grid=color_b)\n\
+ \n\
mantaMsg('Advecting density')\n\
advectSemiLagrange(flags=flags, vel=vel, grid=density, order=$ADVECT_ORDER$)\n\
\n\
@@ -326,6 +308,7 @@ def step_low():\n\
\n\
mantaMsg('Adding forces')\n\
addForceField(flags=flags, vel=vel, force=forces)\n\
+ forces.clear()\n\
\n\
mantaMsg('Walls')\n\
setWallBcs(flags=flags, vel=vel)\n\
@@ -350,6 +333,18 @@ def step_high():\n\
setObstacleFlags(flags=xl_flags, phiObs=xl_phiObsIn, fractions=xl_fractions)\n\
xl_flags.fillGrid()\n\
\n\
+ mantaMsg('Clearing cells high')\n\
+ clearInObstacle(flags=xl_flags, grid=xl_density)\n\
+ clearInObstacle(flags=xl_flags, grid=xl_vel)\n\
+ if (using_fire):\n\
+ clearInObstacle(flags=xl_flags, grid=xl_fuel)\n\
+ clearInObstacle(flags=xl_flags, grid=xl_flame)\n\
+ clearInObstacle(flags=xl_flags, grid=xl_react)\n\
+ if (using_colors):\n\
+ clearInObstacle(flags=xl_flags, grid=xl_color_r)\n\
+ clearInObstacle(flags=xl_flags, grid=xl_color_g)\n\
+ clearInObstacle(flags=xl_flags, grid=xl_color_b)\n\
+ \n\
interpolateMACGrid(source=vel, target=xl_vel)\n\
for i in range(uvs):\n\
mantaMsg('Advecting UV')\n\
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index a65186861a..b2aa2c7e81 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -977,31 +977,25 @@ static void update_obstacles(Scene *scene, Object *ob, SmokeDomainSettings *sds,
// float *b = smoke_get_color_b(sds->fluid);
float *phiObs = liquid_get_phiobs(sds->fluid);
int *num_obstacles = fluid_get_num_obstacle(sds->fluid);
-// unsigned int z;
+ unsigned int z;
- // TODO (sebbas): Removing for now - better do this directly in Mantaflow
- // TODO: delete old obstacle flags
-// for (z = 0; z < sds->res[0] * sds->res[1] * sds->res[2]; z++)
-// {
-// if (obstacles[z] & 2 && obstaclesAnim[z] == 1) // Only delete moving obstacles, do not delete static obstacles, mantaflow convention: 2 == FlagObstacle
-// {
-// obstaclesAnim[z] = 0;
-// obstacles[z] |= (sds->type == MOD_SMOKE_DOMAIN_TYPE_LIQUID) ? 4 : 1; // mantaflow convention: 4 == FlagEmpty, 1 == FlagFluid
-// }
-//
- /* Make sure phi grids are "fresh" before performing any joins in manta script */
-// if (phi)
-// phi[z] = 0.5f;
-// if (phiObs)
-// phiObs[z] = 0.5f;
-//
-// if (velx && velz && velz) {
-// velx[z] = 0;
-// vely[z] = 0;
-// velz[z] = 0;
-// }
-// }
+ /* Resetting all grids related to moving obstacles */
+ for (z = 0; z < sds->res[0] * sds->res[1] * sds->res[2]; z++)
+ {
+ // TODO (sebbas): when and how reset liquid phi?
+// if (phi)
+// phi[z] = 0.5f;
+ if (phiObs)
+ phiObs[z] = 0.5f;
+ if (num_obstacles)
+ num_obstacles[z] = 0;
+ if (velx && velz && velz) {
+ velx[z] = 0.0f;
+ vely[z] = 0.0f;
+ velz[z] = 0.0f;
+ }
+ }
collobjs = get_collisionobjects(scene, ob, sds->coll_group, &numcollobj, eModifierType_Smoke);
More information about the Bf-blender-cvs
mailing list