[Bf-blender-cvs] [d39b661722c] fluid-mantaflow: various fluid guiding improvements
Sebastián Barschkis
noreply at git.blender.org
Fri Aug 25 12:40:23 CEST 2017
Commit: d39b661722ced7e50896f5458ccb25c185c03ec1
Author: Sebastián Barschkis
Date: Mon Aug 21 11:47:33 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBd39b661722ced7e50896f5458ccb25c185c03ec1
various fluid guiding improvements
the domain settings for fluid guiding are gone now. guiding objects handle settings individually, guiding functions kick in automatically if there is a guiding object present.
===================================================================
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/shared_script.h
M intern/mantaflow/intern/strings/smoke_script.h
M release/scripts/startup/bl_ui/properties_physics_smoke.py
M source/blender/blenkernel/intern/smoke.c
M source/blender/makesdna/DNA_smoke_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 628acc72345..4c3c9e19195 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -93,8 +93,6 @@ void smoke_ensure_colors(struct FLUID *smoke, struct SmokeModifierData *smd);
float *smoke_get_guide_velocity_x(struct FLUID *smoke);
float *smoke_get_guide_velocity_y(struct FLUID *smoke);
float *smoke_get_guide_velocity_z(struct FLUID *smoke);
-float *smoke_get_phiguidein(struct FLUID *smoke);
-int *smoke_get_num_guide(struct FLUID *fluid);
// Liquid grids
float *liquid_get_phiin(struct FLUID *liquid);
@@ -160,9 +158,13 @@ void liquid_set_snd_particle_type(struct FLUID* liquid, int* buffer, int numPart
// Fluids in general
int *fluid_get_num_obstacle(struct FLUID *fluid);
float *fluid_get_inflow(struct FLUID *fluid);
+float *fluid_get_phiguidein(struct FLUID *fluid);
+int *fluid_get_num_guide(struct FLUID *fluid);
int fluid_get_res_x(struct FLUID *fluid);
int fluid_get_res_y(struct FLUID *fluid);
int fluid_get_res_z(struct FLUID *fluid);
+void fluid_ensure_guiding(struct FLUID *fluid, struct SmokeModifierData *smd);
+
#ifdef __cplusplus
}
diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 44563e0eb9d..18fec6791cc 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -61,6 +61,7 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
mUsingHeat = smd->domain->active_fields & SM_ACTIVE_HEAT;
mUsingFire = smd->domain->active_fields & SM_ACTIVE_FIRE;
mUsingColors = smd->domain->active_fields & SM_ACTIVE_COLORS;
+ mUsingGuiding = smd->domain->active_fields & SM_ACTIVE_GUIDING;
mUsingHighRes = smd->domain->flags & MOD_SMOKE_HIGHRES;
mUsingLiquid = smd->domain->type == MOD_SMOKE_DOMAIN_TYPE_LIQUID;
mUsingSmoke = smd->domain->type == MOD_SMOKE_DOMAIN_TYPE_GAS;
@@ -126,6 +127,8 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
mPhiOutIn = NULL;
mPhi = NULL;
+ mNumGuide = NULL;
+
mNumVertices = 0;
mNumNormals = 0;
mNumTriangles = 0;
@@ -146,6 +149,7 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
if (mUsingLiquid) {
initDomain(smd);
initLiquid(smd);
+ if (mUsingGuiding) initGuiding(smd);
updatePointers();
@@ -174,9 +178,10 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : mCurrentID(++solverID)
if (mUsingSmoke) {
initDomain(smd);
initSmoke(smd);
- if (mUsingHeat) initHeat(smd);
- if (mUsingFire) initFire(smd);
- if (mUsingColors) initColors(smd);
+ if (mUsingHeat) initHeat(smd);
+ if (mUsingFire) initFire(smd);
+ if (mUsingColors) initColors(smd);
+ if (mUsingGuiding) initGuiding(smd);
updatePointers(); // Needs to be after heat, fire, color init
@@ -237,7 +242,6 @@ void FLUID::initSmoke(SmokeModifierData *smd)
std::string tmpString = smoke_alloc_low
+ smoke_variables_low
+ smoke_bounds_low
- + smoke_guiding
+ smoke_adaptive_step
+ smoke_export_low
+ smoke_pre_step_low
@@ -381,6 +385,20 @@ void FLUID::initLiquidHigh(SmokeModifierData *smd)
mUsingHighRes = true;
}
+void FLUID::initGuiding(SmokeModifierData *smd)
+{
+ if (!mPhiGuideIn) {
+ std::string tmpString = fluid_alloc_guiding_low
+ + fluid_with_guiding;
+ std::string finalString = parseScript(tmpString, smd);
+ mCommands.clear();
+ mCommands.push_back(finalString);
+
+ runPythonString(mCommands);
+ mUsingGuiding = true;
+ }
+}
+
void FLUID::step(int framenr)
{
// manta_write_effectors(this); // TODO in Mantaflow
@@ -425,6 +443,9 @@ FLUID::~FLUID()
tmpString += smoke_delete_fire_high;
tmpString += smoke_delete_colors_high;
+ // Guiding
+ tmpString += fluid_delete_guiding_low;
+
// Cleanup multigrid
tmpString += fluid_multigrid_cleanup_low;
if (mUsingHighRes) tmpString += fluid_multigrid_cleanup_high;
@@ -485,6 +506,8 @@ FLUID::~FLUID()
mTextureV2 = NULL;
mTextureW2 = NULL;
+ mNumGuide = NULL;
+
// Liquid
mPhiIn = NULL;
mPhiObsIn = NULL;
@@ -502,6 +525,7 @@ FLUID::~FLUID()
mUsingHeat = false;
mUsingFire = false;
mUsingColors = false;
+ mUsingGuiding = false;
mUsingHighRes = false;
}
@@ -575,7 +599,7 @@ std::string FLUID::getRealValue(const std::string& varName, SmokeModifierData *
else if (varName == "USING_HIGHRES")
ss << (smd->domain->flags & MOD_SMOKE_HIGHRES ? "True" : "False");
else if (varName == "USING_GUIDING")
- ss << (smd->domain->flags & MOD_SMOKE_GUIDING ? "True" : "False");
+ ss << (smd->domain->active_fields & SM_ACTIVE_GUIDING ? "True" : "False");
else if (varName == "SOLVER_DIM")
ss << smd->domain->manta_solver_res;
else if (varName == "DO_OPEN") {
@@ -755,6 +779,7 @@ void FLUID::exportSmokeScript(SmokeModifierData *smd)
bool heat = smd->domain->active_fields & SM_ACTIVE_HEAT;
bool colors = smd->domain->active_fields & SM_ACTIVE_COLORS;
bool fire = smd->domain->active_fields & SM_ACTIVE_FIRE;
+ bool guiding = smd->domain->active_fields & SM_ACTIVE_GUIDING;
std::string manta_script;
@@ -772,6 +797,8 @@ void FLUID::exportSmokeScript(SmokeModifierData *smd)
manta_script += smoke_alloc_colors_low;
if (fire)
manta_script += smoke_alloc_fire_low;
+ if (guiding)
+ manta_script += fluid_alloc_guiding_low;
if (highres) {
manta_script += fluid_variables_high
@@ -790,6 +817,8 @@ void FLUID::exportSmokeScript(SmokeModifierData *smd)
}
manta_script += smoke_import_low;
+ if (guiding)
+ manta_script += fluid_import_low;
if (highres)
manta_script += smoke_import_high;
@@ -835,6 +864,7 @@ void FLUID::exportSmokeData(SmokeModifierData *smd)
void FLUID::exportLiquidScript(SmokeModifierData *smd)
{
bool highres = smd->domain->flags & MOD_SMOKE_HIGHRES;
+ bool guiding = smd->domain->active_fields & SM_ACTIVE_GUIDING;
std::string manta_script;
@@ -855,6 +885,7 @@ void FLUID::exportLiquidScript(SmokeModifierData *smd)
}
manta_script += liquid_import_low;
+ manta_script += fluid_import_low;
if (highres)
manta_script += liquid_import_high;
@@ -862,6 +893,8 @@ void FLUID::exportLiquidScript(SmokeModifierData *smd)
manta_script += liquid_post_step_low;
manta_script += liquid_step_low;
+ if (guiding)
+ manta_script += fluid_import_low;
if (highres)
manta_script += liquid_step_high;
@@ -1122,6 +1155,15 @@ void FLUID::updatePointers()
mPhiObsIn = (float*) getDataPointer("phiObsIn" + solver_ext, solver);
mPhiOutIn = (float*) getDataPointer("phiOutIn" + solver_ext, solver);
+ if (mUsingGuiding) {
+ mPhiGuideIn = (float*) getDataPointer("phiGuideIn" + solver_ext, solver);
+ mNumGuide = (int*) getDataPointer("numGuides" + solver_ext, solver);
+
+ mGuideVelocityX = (float*) getDataPointer("x_guidevel" + solver_ext, solver);
+ mGuideVelocityY = (float*) getDataPointer("y_guidevel" + solver_ext, solver);
+ mGuideVelocityZ = (float*) getDataPointer("z_guidevel" + solver_ext, solver);
+ }
+
// Liquid
if (mUsingLiquid) {
mPhiIn = (float*) getDataPointer("phiIn" + solver_ext, solver);
@@ -1143,13 +1185,6 @@ void FLUID::updatePointers()
mInVelocityY = (float*) getDataPointer("y_invel" + solver_ext, solver);
mInVelocityZ = (float*) getDataPointer("z_invel" + solver_ext, solver);
- mPhiGuideIn = (float*) getDataPointer("phiGuideIn" + solver_ext, solver);
- mNumGuide = (int*) getDataPointer("numGuides" + solver_ext, solver);
-
- mGuideVelocityX = (float*) getDataPointer("x_guidevel" + solver_ext, solver);
- mGuideVelocityY = (float*) getDataPointer("y_guidevel" + solver_ext, solver);
- mGuideVelocityZ = (float*) getDataPointer("z_guidevel" + solver_ext, solver);
-
if (mUsingHeat) {
mHeat = (float*) getDataPointer("heat" + solver_ext, solver);
}
diff --git a/intern/mantaflow/intern/FLUID.h b/intern/mantaflow/intern/FLUID.h
index f2c3dfa6034..d01572eafba 100644
--- a/intern/mantaflow/intern/FLUID.h
+++ b/intern/mantaflow/intern/FLUID.h
@@ -55,6 +55,7 @@ public:
void initColorsHigh(struct SmokeModifierData *smd);
void initLiquid(SmokeModifierData *smd);
void initLiquidHigh(SmokeModifierData *smd);
+ void initGuiding(SmokeModifierData *smd);
// Pointer transfer Mantaflow -> Blender
void updatePointers();
@@ -214,6 +215,7 @@ private:
bool mUsingHeat;
bool mUsingColors;
bool mUsingFire;
+ bool mUsingGuiding;
bool mUsingHighRes;
bool mUsingLiquid;
bool mUsingSmoke;
diff --git a/intern/mantaflow/intern/manta_fluid_API.cpp b/intern/mantaflow/intern/manta_fluid_API.cpp
index 959b92eb851..d420789d60f 100644
--- a/intern/mantaflow/intern/manta_fluid_API.cpp
+++ b/intern/mantaflow/intern/manta_fluid_API.cpp
@@ -459,7 +459,7 @@ extern "C" int *fluid_get_num_obstacle(FLUID *fluid)
return fluid->getNumObstacle();
}
-extern "C" int *smoke_get_num_guide(FLUID *fluid)
+extern "C" int *fluid_get_num_guide(FLUID *fluid)
{
return fluid->getNumGuide();
}
@@ -522,11 +522,6 @@ extern "C" void smoke_ensure_colors(FLUID *smoke, struct SmokeModifierData *smd)
}
}
-extern "C" float *smoke_get_phiguidein(FLUID *smoke)
-{
- return smoke->getPhiGuideIn();
-}
-
extern "C" void liquid_ensure_init(FLUID *smoke, struct SmokeModifierData *smd)
{
if (smoke) {
@@ -535,6 +530,19 @@ extern "C" void liquid_ensure_init(FLUID *smoke, struct SmokeModifierData *smd)
}
}
+extern "C" void fluid_ensure_guiding(FLUID *fluid, struct SmokeModifierData *smd)
+{
+ if (fluid) {
+ fluid->initGuiding(smd);
+ fluid->updatePointers();
+ }
+}
+
+extern "C" float *fluid_get_phiguidein(FLUID *fluid)
+{
+ return fluid->getPhiGuideIn();
+}
+
extern "C" float *liquid_get_phiin(FLUID *liquid)
{
return liquid->getPhiIn();
diff --git a/intern/mantaflow/intern/strings/shared_script.h b/intern/mantaflow/intern/strings/shared_script.h
index fb5d3c4ad73..2c03427d400 100644
--- a/intern/mantaflow/intern/strings/shared_script.h
+++ b/intern/mantaflow/intern/strings/shared_script.h
@@ -76,7 +76,15 @@ boundConditions_s$ID$ = '$BOUNDCONDITIONS$'\n\
boundaryWidth_s$ID$ = 1\n\
\n\
using_highres_s$ID$ = $USING_HIGHRES$\n\
-using_adaptTime_s$ID$ = $USIN
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list