[Bf-blender-cvs] [e0504bf] openvdb: Move fluid matrices to SmokeDomainSettings.

Kévin Dietrich noreply at git.blender.org
Fri Jun 5 14:07:20 CEST 2015


Commit: e0504bf9bbb34dc3a1d08336457d80d279223600
Author: Kévin Dietrich
Date:   Fri May 22 04:41:08 2015 +0200
Branches: openvdb
https://developer.blender.org/rBe0504bf9bbb34dc3a1d08336457d80d279223600

Move fluid matrices to SmokeDomainSettings.

===================================================================

M	source/blender/blenkernel/intern/smoke.c
M	source/blender/makesdna/DNA_smoke_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 28de417..a52c276 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -3044,19 +3044,10 @@ int smoke_get_data_flags(SmokeDomainSettings *sds)
 
 #ifdef WITH_OPENVDB
 
-static struct FluidDomainDescr get_fluid_description(SmokeDomainSettings *sds)
+static void compute_fluid_matrices(SmokeDomainSettings *sds)
 {
-	FluidDomainDescr descr;
 	float voxel_size[3], voxel_size_high[3], bbox_min[3];
 
-	descr.active_fields = sds->active_fields;
-	descr.fluid_fields = smoke_get_data_flags(sds);
-	copy_v3_v3(descr.obj_shift_f, sds->obj_shift_f);
-	copy_v3_v3_int(descr.shift, sds->shift);
-	copy_v3_v3(descr.active_color, sds->active_color);
-
-	copy_m4_m4(descr.obmat, sds->obmat);
-
 	/* Construct a matrix which represents the fluid object:
 	 * vs 0  0  0
 	 * 0  vs 0  0
@@ -3076,19 +3067,17 @@ static struct FluidDomainDescr get_fluid_description(SmokeDomainSettings *sds)
 
 	/* construct low res matrix */
 	copy_v3_v3(voxel_size, sds->cell_size);
-	size_to_mat4(descr.fluidmat, voxel_size);
-	copy_v3_v3(descr.fluidmat[3], bbox_min);
-	mul_m4_m4m4(descr.fluidmat, sds->obmat, descr.fluidmat);
+	size_to_mat4(sds->fluidmat, voxel_size);
+	copy_v3_v3(sds->fluidmat[3], bbox_min);
+	mul_m4_m4m4(sds->fluidmat, sds->obmat, sds->fluidmat);
 
 	if (sds->wt) {
 		/* construct high res matrix */
 		mul_v3_v3fl(voxel_size_high, sds->cell_size, 1.0f / (float)(sds->amplify + 1));
-		size_to_mat4(descr.fluidmathigh, voxel_size_high);
-		copy_v3_v3(descr.fluidmathigh[3], bbox_min);
-		mul_m4_m4m4(descr.fluidmathigh, sds->obmat, descr.fluidmathigh);
+		size_to_mat4(sds->fluidmat_wt, voxel_size_high);
+		copy_v3_v3(sds->fluidmat_wt[3], bbox_min);
+		mul_m4_m4m4(sds->fluidmat_wt, sds->obmat, sds->fluidmat_wt);
 	}
-
-	return descr;
 }
 
 static void OpenVDB_read_fluid_settings(SmokeDomainSettings *sds, struct OpenVDBReader *reader)
@@ -3151,39 +3140,40 @@ static void OpenVDB_export_smoke(SmokeDomainSettings *sds, struct OpenVDBWriter
 		float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *vx, *vy, *vz, *r, *g, *b;
 		unsigned char *obstacles;
 
+		compute_fluid_matrices(sds);
 		smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat,
 		             &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
 
 		OpenVDBWriter_add_meta_int(writer, "dx", dx);
 		OpenVDBWriter_add_meta_int(writer, "dt", dx);
 
-		OpenVDB_export_grid_fl(writer, "shadow", sds->shadow, sds->res, sds->obmat);
-		OpenVDB_export_grid_fl(writer, "density", dens, sds->res, sds->obmat);
+		OpenVDB_export_grid_fl(writer, "shadow", sds->shadow, sds->res, sds->fluidmat);
+		OpenVDB_export_grid_fl(writer, "density", dens, sds->res, sds->fluidmat);
 
 		if (fluid_fields & SM_ACTIVE_HEAT) {
-			OpenVDB_export_grid_fl(writer, "heat", heat, sds->res, sds->obmat);
-			OpenVDB_export_grid_fl(writer, "heatold", heatold, sds->res, sds->obmat);
+			OpenVDB_export_grid_fl(writer, "heat", heat, sds->res, sds->fluidmat);
+			OpenVDB_export_grid_fl(writer, "heatold", heatold, sds->res, sds->fluidmat);
 		}
 
 		if (fluid_fields & SM_ACTIVE_FIRE) {
-			OpenVDB_export_grid_fl(writer, "flame", flame, sds->res, sds->obmat);
-			OpenVDB_export_grid_fl(writer, "fuel", fuel, sds->res, sds->obmat);
-			OpenVDB_export_grid_fl(writer, "react", react, sds->res, sds->obmat);
+			OpenVDB_export_grid_fl(writer, "flame", flame, sds->res, sds->fluidmat);
+			OpenVDB_export_grid_fl(writer, "fuel", fuel, sds->res, sds->fluidmat);
+			OpenVDB_export_grid_fl(writer, "react", react, sds->res, sds->fluidmat);
 		}
 
 		if (fluid_fields & SM_ACTIVE_COLORS) {
-//			OpenVDB_export_grid_fl(writer, "red", r, sds->res, sds->obmat);
-//			OpenVDB_export_grid_fl(writer, "green", g, sds->res, sds->obmat);
-//			OpenVDB_export_grid_fl(writer, "blue", b, sds->res, sds->obmat);
-			OpenVDB_export_grid_vec(writer, "color", r, g, b, sds->res, sds->obmat);
+//			OpenVDB_export_grid_fl(writer, "red", r, sds->res, sds->fluidmat);
+//			OpenVDB_export_grid_fl(writer, "green", g, sds->res, sds->fluidmat);
+//			OpenVDB_export_grid_fl(writer, "blue", b, sds->res, sds->fluidmat);
+			OpenVDB_export_grid_vec(writer, "color", r, g, b, sds->res, sds->fluidmat);
 		}
 
-//		OpenVDB_export_grid_fl(writer, "vx", vx, sds->res, sds->obmat);
-//		OpenVDB_export_grid_fl(writer, "vy", vy, sds->res, sds->obmat);
-//		OpenVDB_export_grid_fl(writer, "vz", vz, sds->res, sds->obmat);
-		OpenVDB_export_grid_vec(writer, "velocity", vx, vy, vz, sds->res, sds->obmat);
+//		OpenVDB_export_grid_fl(writer, "vx", vx, sds->res, sds->fluidmat);
+//		OpenVDB_export_grid_fl(writer, "vy", vy, sds->res, sds->fluidmat);
+//		OpenVDB_export_grid_fl(writer, "vz", vz, sds->res, sds->fluidmat);
+		OpenVDB_export_grid_vec(writer, "velocity", vx, vy, vz, sds->res, sds->fluidmat);
 
-		OpenVDB_export_grid_ch(writer, "obstacles", obstacles, sds->res, sds->obmat);
+		OpenVDB_export_grid_ch(writer, "obstacles", obstacles, sds->res, sds->fluidmat);
 	}
 
 	if (sds->wt) {
@@ -3191,25 +3181,25 @@ static void OpenVDB_export_smoke(SmokeDomainSettings *sds, struct OpenVDBWriter
 
 		smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
 
-		OpenVDB_export_grid_fl(writer, "density high", dens, sds->res_wt, sds->obmat);
+		OpenVDB_export_grid_fl(writer, "density high", dens, sds->res_wt, sds->fluidmat_wt);
 
 		if (fluid_fields & SM_ACTIVE_FIRE) {
-			OpenVDB_export_grid_fl(writer, "flame high", flame, sds->res_wt, sds->obmat);
-			OpenVDB_export_grid_fl(writer, "fuel high", fuel, sds->res_wt, sds->obmat);
-			OpenVDB_export_grid_fl(writer, "react high", react, sds->res_wt, sds->obmat);
+			OpenVDB_export_grid_fl(writer, "flame high", flame, sds->res_wt, sds->fluidmat_wt);
+			OpenVDB_export_grid_fl(writer, "fuel high", fuel, sds->res_wt, sds->fluidmat_wt);
+			OpenVDB_export_grid_fl(writer, "react high", react, sds->res_wt, sds->fluidmat_wt);
 		}
 
 		if (fluid_fields & SM_ACTIVE_COLORS) {
-//			OpenVDB_export_grid_fl(writer, "red high", r, sds->res, sds->obmat);
-//			OpenVDB_export_grid_fl(writer, "green high", g, sds->res, sds->obmat);
-//			OpenVDB_export_grid_fl(writer, "blue high", b, sds->res, sds->obmat);
-			OpenVDB_export_grid_vec(writer, "color high", r, g, b, sds->res_wt, sds->obmat);
+//			OpenVDB_export_grid_fl(writer, "red high", r, sds->res, sds->fluidmat_wt);
+//			OpenVDB_export_grid_fl(writer, "green high", g, sds->res, sds->fluidmat_wt);
+//			OpenVDB_export_grid_fl(writer, "blue high", b, sds->res, sds->fluidmat_wt);
+			OpenVDB_export_grid_vec(writer, "color high", r, g, b, sds->res_wt, sds->fluidmat_wt);
 		}
 
-//		OpenVDB_export_grid_fl(writer, "tcu", tcu, sds->res, sds->obmat);
-//		OpenVDB_export_grid_fl(writer, "tcv", tcv, sds->res, sds->obmat);
-//		OpenVDB_export_grid_fl(writer, "tcw", tcw, sds->res, sds->obmat);
-		OpenVDB_export_grid_vec(writer, "tex_co", tcu, tcv, tcw, sds->res, sds->obmat);
+//		OpenVDB_export_grid_fl(writer, "tcu", tcu, sds->res, sds->fluidmat);
+//		OpenVDB_export_grid_fl(writer, "tcv", tcv, sds->res, sds->fluidmat);
+//		OpenVDB_export_grid_fl(writer, "tcw", tcw, sds->res, sds->fluidmat);
+		OpenVDB_export_grid_vec(writer, "tex_co", tcu, tcv, tcw, sds->res, sds->fluidmat);
 	}
 }
 
@@ -3384,14 +3374,13 @@ void smokeModifier_OpenVDB_update_transform(SmokeModifierData *smd,
 	cache = BKE_openvdb_get_current_cache(sds);
 
 	for (fr = cache->startframe; fr <= cache->endframe; fr++) {
-		FluidDomainDescr descr = get_fluid_description(sds);
 		/* smd->time is overwritten with scene->r.cfra in smokeModifier_process,
 		 * so we can't use it here... */
 		scene->r.cfra = fr;
 
 		cache_filename(filename, cache->path, cache->name, relbase, fr);
 
-		OpenVDB_update_fluid_transform(filename, descr);
+//		OpenVDB_update_fluid_transform(filename, descr);
 
 		progress = (fr - cache->startframe) / (float)cache->endframe;
 
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index c76897d..d2feb45 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -106,6 +106,8 @@ typedef struct SmokeDomainSettings {
 	float obj_shift_f[3]; /* how much object has shifted since previous smoke frame (used to "lock" domain while drawing) */
 	float imat[4][4]; /* domain object imat */
 	float obmat[4][4]; /* domain obmat */
+	float fluidmat[4][4]; /* low res fluid matrix */
+	float fluidmat_wt[4][4]; /* high res fluid matrix */
 
 	int base_res[3]; /* initial "non-adapted" resolution */
 	int res_min[3]; /* cell min */




More information about the Bf-blender-cvs mailing list