[Bf-blender-cvs] [93d31ac344c] fluid-mantaflow: improved pointcache and now also supporting FLIP visualization again

Sebastián Barschkis noreply at git.blender.org
Sun Jul 2 19:26:29 CEST 2017


Commit: 93d31ac344c5dd80a7e093eeae248dc8c0842957
Author: Sebastián Barschkis
Date:   Sun Jul 2 19:13:59 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB93d31ac344c5dd80a7e093eeae248dc8c0842957

improved pointcache and now also supporting FLIP visualization again

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

M	intern/mantaflow/extern/manta_fluid_API.h
M	intern/mantaflow/intern/FLUID.cpp
M	intern/mantaflow/intern/FLUID.h
M	intern/mantaflow/intern/manta_fluid_API.cpp
M	intern/mantaflow/intern/strings/liquid_script.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/dynamicpaint.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/makesdna/DNA_particle_types.h
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h
index 29f749bdc25..75824b3ad42 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -44,7 +44,8 @@ void smoke_manta_export(struct FLUID* smoke, struct SmokeModifierData *smd);
 void smoke_step(struct FLUID *smoke, int framenr);
 void smoke_dissolve(struct FLUID *smoke, int speed, int log);
 void smoke_dissolve_wavelet(struct FLUID *smoke, int speed, int log);
-void smoke_export(struct FLUID *smoke, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat, float **vx, float **vy, float **vz, float **r, float **g, float **b, int **obstacles, float **phi, float **pp, float **pvel);
+void smoke_export(struct FLUID *smoke, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat, float **vx, float **vy, float **vz, float **r, float **g, float **b, int **obstacles);
+void liquid_export(struct FLUID *liquid, float **phi, float **pp, float **pvel, float **ppSnd, float **pvelSnd);
 void smoke_turbulence_export(struct FLUID *smoke, float **dens, float **react, float **flame, float **fuel, float **r, float **g, float **b , float **tcu, float **tcv, float **tcw, float **tcu2, float **tcv2, float **tcw2);
 float *smoke_get_density(struct FLUID *smoke);
 float *smoke_get_fuel(struct FLUID *smoke);
@@ -87,15 +88,25 @@ void smoke_ensure_heat(struct FLUID *smoke, struct SmokeModifierData *smd);
 void smoke_ensure_fire(struct FLUID *smoke, struct SmokeModifierData *smd);
 void smoke_ensure_colors(struct FLUID *smoke, struct SmokeModifierData *smd);
 
+// Liquid grids
 float *liquid_get_phiin(struct FLUID *liquid);
 float *liquid_get_phiobs(struct FLUID *liquid);
 float *liquid_get_phiout(struct FLUID *liquid);
 void liquid_ensure_init(struct FLUID *liquid, struct SmokeModifierData *smd);
+void liquid_manta_export(struct FLUID* smoke, struct SmokeModifierData *smd);
+
+// Liquid Mantaflow IO
 void liquid_save_mesh(struct FLUID *liquid, char *filename);
+void liquid_save_mesh_high(struct FLUID *liquid, char *filename);
 void liquid_save_particles(struct FLUID *liquid, char *filename);
 void liquid_save_particle_velocities(struct FLUID *liquid, char *filename);
 void liquid_save_data(struct FLUID *liquid, char *pathname);
+void liquid_save_data_high(struct FLUID *liquid, char *pathname);
 void liquid_load_data(struct FLUID *liquid, char *pathname);
+void liquid_load_data_high(struct FLUID *liquid, char *pathname);
+void liquid_update_mesh_data(struct FLUID *liquid, char *filename);
+
+// Liquid mesh
 int liquid_get_num_verts(struct FLUID *liquid);
 int liquid_get_num_normals(struct FLUID *liquid);
 int liquid_get_num_triangles(struct FLUID *liquid);
@@ -108,24 +119,35 @@ float liquid_get_normal_z_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_x_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_y_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_z_at(struct FLUID *liquid, int i);
-int liquid_get_num_particles(struct FLUID *liquid);
-int liquid_get_particle_flag_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_x_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_y_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_z_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_x_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_y_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_z_at(struct FLUID *liquid, int i);
-float *liquid_get_particle_data(struct FLUID *liquid);
-float *liquid_get_particle_velocity(struct FLUID *liquid);
-void liquid_update_mesh_data(struct FLUID *liquid, char *filename);
-void liquid_save_mesh_high(struct FLUID *liquid, char *filename);
-void liquid_save_data_high(struct FLUID *liquid, char *pathname);
-void liquid_load_data_high(struct FLUID *liquid, char *pathname);
-void liquid_manta_export(struct FLUID* smoke, struct SmokeModifierData *smd);
-void liquid_set_particle_data(struct FLUID* liquid, float* buffer, int numParts);
-void liquid_set_particle_velocity(struct FLUID* liquid, float* buffer, int numParts);
 
+// Liquids particles
+int liquid_get_num_flip_particles(struct FLUID *liquid);
+int liquid_get_num_snd_particles(struct FLUID *liquid);
+
+int liquid_get_flip_particle_flag_at(struct FLUID *liquid, int i);
+int liquid_get_snd_particle_flag_at(struct FLUID *liquid, int i);
+
+float liquid_get_flip_particle_position_x_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_position_y_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_position_z_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_x_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_y_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_z_at(struct FLUID *liquid, int i);
+
+float liquid_get_flip_particle_velocity_x_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_velocity_y_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_velocity_z_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_x_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_y_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_z_at(struct FLUID *liquid, int i);
+
+void liquid_set_flip_particle_data(struct FLUID* liquid, float* buffer, int numParts);
+void liquid_set_snd_particle_data(struct FLUID* liquid, float* buffer, int numParts);
+
+void liquid_set_flip_particle_velocity(struct FLUID* liquid, float* buffer, int numParts);
+void liquid_set_snd_particle_velocity(struct FLUID* liquid, float* buffer, int numParts);
+
+// Fluids in general
 int *fluid_get_num_obstacle(struct FLUID *fluid);
 float *fluid_get_inflow(struct FLUID *fluid);
 int fluid_get_res_x(struct FLUID *fluid);
diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 956407c36c3..e0c8074476e 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -124,8 +124,10 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
 	mNumTriangles = 0;
 
 	// Particles
-	mParticleData      = NULL;
-	mParticleVelocity  = NULL;
+	mFlipParticleData      = NULL;
+	mFlipParticleVelocity  = NULL;
+	mSndParticleData       = NULL;
+	mSndParticleVelocity   = NULL;
 
 	// Only start Mantaflow once. No need to start whenever new FLUID objected is allocated
 	if (!mantaInitialized)
@@ -476,8 +478,10 @@ FLUID::~FLUID()
 	mPhiOut = NULL;
 	mPhi    = NULL;
 
-	mParticleData      = NULL;
-	mParticleVelocity  = NULL;
+	mFlipParticleData      = NULL;
+	mFlipParticleVelocity  = NULL;
+	mSndParticleData       = NULL;
+	mSndParticleVelocity   = NULL;
 
 	// Reset flags
 	mUsingHeat    = false;
@@ -1083,8 +1087,10 @@ void FLUID::updatePointers()
 		mPhiOut = (float*) getDataPointer("phiOut" + solver_ext, solver);
 		mPhi    = (float*) getDataPointer("phi" + solver_ext, solver);
 
-		mParticleData     = (std::vector<pData>*) getDataPointer("ppSnd" + solver_ext, solver);
-		mParticleVelocity = (std::vector<pVel>*) getDataPointer("pVelSnd" + parts_ext, parts);
+		mFlipParticleData     = (std::vector<pData>*) getDataPointer("pp" + solver_ext, solver);
+		mFlipParticleVelocity = (std::vector<pVel>*) getDataPointer("pVel" + parts_ext, parts);
+		mSndParticleData      = (std::vector<pData>*) getDataPointer("ppSnd" + solver_ext, solver);
+		mSndParticleVelocity  = (std::vector<pVel>*) getDataPointer("pVelSnd" + parts_ext, parts);
 	}
 	
 	// Smoke
@@ -1148,11 +1154,11 @@ void FLUID::updatePointersHigh()
 	}
 }
 
-void FLUID::setParticleData(float* buffer, int numParts)
+void FLUID::setFlipParticleData(float* buffer, int numParts)
 {
-	mParticleData->resize(numParts);
+	mFlipParticleData->resize(numParts);
 	FLUID::pData* bufferPData = (FLUID::pData*) buffer;
-	for (std::vector<pData>::iterator it = mParticleData->begin(); it != mParticleData->end(); ++it) {
+	for (std::vector<pData>::iterator it = mFlipParticleData->begin(); it != mFlipParticleData->end(); ++it) {
 		it->pos[0] = bufferPData->pos[0];
 		it->pos[1] = bufferPData->pos[1];
 		it->pos[2] = bufferPData->pos[2];
@@ -1161,11 +1167,36 @@ void FLUID::setParticleData(float* buffer, int numParts)
 	}
 }
 
-void FLUID::setParticleVelocity(float* buffer, int numParts)
+void FLUID::setSndParticleData(float* buffer, int numParts)
 {
-	mParticleVelocity->resize(numParts);
+	mSndParticleData->resize(numParts);
+	FLUID::pData* bufferPData = (FLUID::pData*) buffer;
+	for (std::vector<pData>::iterator it = mSndParticleData->begin(); it != mSndParticleData->end(); ++it) {
+		it->pos[0] = bufferPData->pos[0];
+		it->pos[1] = bufferPData->pos[1];
+		it->pos[2] = bufferPData->pos[2];
+		it->flag = bufferPData->flag;
+		bufferPData++;
+	}
+}
+
+void FLUID::setFlipParticleVelocity(float* buffer, int numParts)
+{
+	mFlipParticleVelocity->resize(numParts);
+	FLUID::pVel* bufferPVel = (FLUID::pVel*) buffer;
+	for (std::vector<pVel>::iterator it = mFlipParticleVelocity->begin(); it != mFlipParticleVelocity->end(); ++it) {
+		it->pos[0] = bufferPVel->pos[0];
+		it->pos[1] = bufferPVel->pos[1];
+		it->pos[2] = bufferPVel->pos[2];
+		bufferPVel++;
+	}
+}
+
+void FLUID::setSndParticleVelocity(float* buffer, int numParts)
+{
+	mSndParticleVelocity->resize(numParts);
 	FLUID::pVel* bufferPVel = (FLUID::pVel*) buffer;
-	for (std::vector<pVel>::iterator it = mParticleVelocity->begin(); it != mParticleVelocity->end(); ++it) {
+	for (std::vector<pVel>::iterator it = mSndParticleVelocity->begin(); it != mSndParticleVelocity->end(); ++it) {
 		it->pos[0] = bufferPVel->pos[0];
 		it->pos[1] = bufferPVel->pos[1];
 		it->pos[2] = bufferPVel->pos[2];
diff --git a/intern/mantaflow/intern/FLUID.h b/intern/mantaflow/intern/FLUID.h
index 02f2a6a1d6a..f2887d8d9df 100644
--- a/intern/mantaflow/intern/FLUID.h
+++ b/intern/mantaflow/intern/FLUID.h
@@ -153,26 +153,44 @@ public:
 	inline int getTriangleXAt(int i) { return mTrianglesX[i]; }
 	inline int getTriangleYAt(int i) { return mTrianglesY[i]; }
 	inline int getTriangleZAt(int i) { return mTrianglesZ[i]; }


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list