[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