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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to