[Bf-blender-cvs] [89436dd] fluid-mantaflow: now using scene gravity in all mantaflow scripts (smoke and liquid)
Sebastián Barschkis
noreply at git.blender.org
Mon Aug 15 23:01:22 CEST 2016
Commit: 89436dd5194dfcd8071c3f4f0944bae7062e7ce9
Author: Sebastián Barschkis
Date: Mon Aug 15 22:59:31 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB89436dd5194dfcd8071c3f4f0944bae7062e7ce9
now using scene gravity in all mantaflow scripts (smoke and liquid)
===================================================================
M intern/mantaflow/intern/SMOKE.cpp
M intern/mantaflow/intern/strings/liquid_script.h
M intern/mantaflow/intern/strings/shared_script.h
M intern/mantaflow/intern/strings/smoke_script.h
M source/blender/blenkernel/intern/smoke.c
M source/blender/makesdna/DNA_smoke_types.h
===================================================================
diff --git a/intern/mantaflow/intern/SMOKE.cpp b/intern/mantaflow/intern/SMOKE.cpp
index b6a7b71..15c81bb 100644
--- a/intern/mantaflow/intern/SMOKE.cpp
+++ b/intern/mantaflow/intern/SMOKE.cpp
@@ -581,6 +581,12 @@ std::string SMOKE::getRealValue(const std::string& varName, SmokeModifierData *
ss << md->scene->r.cfra;
else if (varName == "RANDOMNESS")
ss << smd->domain->particle_randomness;
+ else if (varName == "GRAVITY_X")
+ ss << smd->domain->gravity[0];
+ else if (varName == "GRAVITY_Y")
+ ss << smd->domain->gravity[1];
+ else if (varName == "GRAVITY_Z")
+ ss << smd->domain->gravity[2];
else if (varName == "MANTA_EXPORT_PATH") {
char parent_dir[1024];
BLI_split_dir_part(smd->domain->manta_filepath, parent_dir, sizeof(parent_dir));
diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index afae08d..3841247 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -61,7 +61,6 @@ particleNumber = 2\n\
radiusFactor = 1.0\n\
randomness = $RANDOMNESS$\n\
\n\
-gravity = (0,0,-1)\n\
step = -1\n\
maxVel = 0\n\
\n\
diff --git a/intern/mantaflow/intern/strings/shared_script.h b/intern/mantaflow/intern/strings/shared_script.h
index 8acae58..d7ad241 100644
--- a/intern/mantaflow/intern/strings/shared_script.h
+++ b/intern/mantaflow/intern/strings/shared_script.h
@@ -45,10 +45,12 @@ const std::string fluid_solver_low = "\n\
mantaMsg('Solver low')\n\
dim = $SOLVER_DIM$\n\
res = $RES$\n\
+gravity = vec3($GRAVITY_X$, $GRAVITY_Y$, $GRAVITY_Z$)\n\
gs = vec3($RESX$, $RESY$, $RESZ$)\n\
\n\
if dim == 2:\n\
gs.z = 1\n\
+ gravity = vec3($GRAVITY_X$,$GRAVITY_Z$,0)\n\
\n\
doOpen = $DO_OPEN$\n\
boundConditions = '$BOUNDCONDITIONS$'\n\
diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h
index 5876ebc..7cba85b 100644
--- a/intern/mantaflow/intern/strings/smoke_script.h
+++ b/intern/mantaflow/intern/strings/smoke_script.h
@@ -246,12 +246,10 @@ def step_low():\n\
\n\
if using_heat:\n\
mantaMsg('Adding heat buoyancy')\n\
- gravity=vec3(0,0,-1) if dim==3 else vec3(0,-1,0)\n\
addBuoyancy(flags=flags, density=density, vel=vel, gravity=gravity, coefficient=$ALPHA$)\n\
addBuoyancy(flags=flags, density=heat, vel=vel, gravity=gravity, coefficient=$BETA$)\n\
else:\n\
mantaMsg('Adding buoyancy')\n\
- gravity=vec3(0,0,-0.01 * $ALPHA$) if dim==3 else vec3(0,-0.01* $ALPHA$,0)\n\
addBuoyancy(density=density, vel=vel, gravity=gravity, flags=flags)\n\
\n\
copyRealToVec3(sourceX=x_force, sourceY=y_force, sourceZ=z_force, target=forces)\n\
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 3417017..155eeb7 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -289,6 +289,29 @@ static void smoke_set_domain_from_derivedmesh(SmokeDomainSettings *sds, Object *
sds->cell_size[2] /= (float)sds->base_res[2];
}
+static void smoke_set_domain_gravity(Scene *scene, SmokeDomainSettings *sds)
+{
+ float gravity[3] = {0.0f, 0.0f, -1.0f};
+ float gravity_mag;
+
+ /* use global gravity if enabled */
+ if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
+ copy_v3_v3(gravity, scene->physics_settings.gravity);
+ /* map default value to 1.0 */
+ mul_v3_fl(gravity, 1.0f / 9.810f);
+ }
+
+ /* convert gravity to domain space */
+ gravity_mag = len_v3(gravity);
+ mul_mat3_m4_v3(sds->imat, gravity);
+ normalize_v3(gravity);
+ mul_v3_fl(gravity, gravity_mag);
+
+ sds->gravity[0] = gravity[0];
+ sds->gravity[1] = gravity[1];
+ sds->gravity[2] = gravity[2];
+}
+
static int smokeModifier_init(SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
{
if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid)
@@ -534,6 +557,10 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
smd->domain->noise = MOD_SMOKE_NOISEWAVE;
smd->domain->diss_speed = 5;
smd->domain->active_fields = 0;
+
+ smd->domain->gravity[0] = 0.0;
+ smd->domain->gravity[1] = 0.0;
+ smd->domain->gravity[2] = -9.81;;
smd->domain->adapt_margin = 4;
smd->domain->adapt_res = 0;
@@ -2815,7 +2842,8 @@ static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *
invert_m4_m4(sds->imat, ob->obmat);
copy_m4_m4(sds->obmat, ob->obmat);
smoke_set_domain_from_derivedmesh(sds, ob, domain_dm, (sds->flags & MOD_SMOKE_ADAPTIVE_DOMAIN) != 0);
-
+
+#ifndef WITH_MANTA
/* use global gravity if enabled */
if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
copy_v3_v3(gravity, scene->physics_settings.gravity);
@@ -2827,6 +2855,9 @@ static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *
mul_mat3_m4_v3(sds->imat, gravity);
normalize_v3(gravity);
mul_v3_fl(gravity, gravity_mag);
+#else
+ smoke_set_domain_gravity(scene, sds);
+#endif
/* adapt timestep for different framerates, dt = 0.1 is at 25fps */
dt = DT_DEFAULT * (25.0f / fps);
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index 1c418f5..2f8a46a 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -131,11 +131,13 @@ typedef struct SmokeDomainSettings {
int total_cells;
float dx; /* 1.0f / res */
float scale; /* largest domain size */
+ float gravity[3];
/* user settings */
int adapt_margin;
int adapt_res;
float adapt_threshold;
+ char pad3[4]; /* unused */
float alpha;
float beta;
More information about the Bf-blender-cvs
mailing list