[Bf-blender-cvs] [d31e796] fluid-mantaflow: plugin changes
Sebastián Barschkis
noreply at git.blender.org
Thu Jan 28 12:36:30 CET 2016
Commit: d31e7960ea7a0e8ca9a137ae93b9c9d601d4cdd7
Author: Sebastián Barschkis
Date: Sun Sep 6 19:57:24 2015 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBd31e7960ea7a0e8ca9a137ae93b9c9d601d4cdd7
plugin changes
===================================================================
M intern/smoke/intern/FLUID_3D.cpp
M source/blender/python/manta_full/source/plugin/fire.cpp
A source/blender/python/manta_pp/plugin/fire.cpp
===================================================================
diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index dc47708..b0332c8 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -701,25 +701,6 @@ void FLUID_3D::initColors(float init_r, float init_g, float init_b)
void FLUID_3D::initFire()
{
if (!_flame) {
- _flame = new float[_totalCells];
- _fuel = new float[_totalCells];
- _fuelTemp = new float[_totalCells];
- _fuelOld = new float[_totalCells];
- _react = new float[_totalCells];
- _reactTemp = new float[_totalCells];
- _reactOld = new float[_totalCells];
-
- for (int x = 0; x < _totalCells; x++)
- {
- _flame[x] = 0.0f;
- _fuel[x] = 0.0f;
- _fuelTemp[x] = 0.0f;
- _fuelOld[x] = 0.0f;
- _react[x] = 0.0f;
- _reactTemp[x] = 0.0f;
- _reactOld[x] = 0.0f;
- }
-
using_fire = true;
PyGILState_STATE gilstate = PyGILState_Ensure();
PyRun_SimpleString(smoke_init_fire_low.c_str());
diff --git a/source/blender/python/manta_full/source/plugin/fire.cpp b/source/blender/python/manta_full/source/plugin/fire.cpp
index ea183ad..21f85ad 100644
--- a/source/blender/python/manta_full/source/plugin/fire.cpp
+++ b/source/blender/python/manta_full/source/plugin/fire.cpp
@@ -15,6 +15,7 @@
#include <float.h>
#include "vectorbase.h"
#include "grid.h"
+#include "levelset.h"
using namespace std;
@@ -44,9 +45,8 @@ const bool withSmoke = true;
const bool withFire = true;
KERNEL (bnd=1)
-void KnProcessBurn(//FlagGrid& flags,
- Grid<Real>& fuel,
- LevelsetGrid& density,
+void KnProcessBurn(Grid<Real>& fuel,
+ Grid<Real>& density,
Grid<Real>& react,
Grid<Real>& heat,
Grid<Real>& red,
@@ -59,53 +59,50 @@ void KnProcessBurn(//FlagGrid& flags,
float dt,
Vec3 flameSmokeColor)
{
- //if (flags.isFluid(i,j,k))
- //{
- // Save initial values
- float origFuel = fuel(i,j,k);
- float origSmoke = density(i,j,k);
- float smokeEmit = 0.0f;
- float flame = 0.0f;
-
- // Process fuel
- fuel(i,j,k) -= burningRate * dt;
- if (fuel(i,j,k) < 0.0f)
- {
- fuel(i,j,k) = 0.0f;
- }
-
- // Process reaction coordinate
- if (origFuel > FLT_EPSILON)
- {
- react(i,j,k) *= fuel(i,j,k) / origFuel;
- flame = pow(react(i,j,k), 0.5f);
- }
- else
- {
- react(i,j,k) = 0.0f;
- }
-
- // Set fluid temperature based on fuel burn rate and "flameSmoke" factor
- smokeEmit = (origFuel < 1.0f) ? (1.0f - origFuel) * 0.5f : 0.0f;
- smokeEmit = (smokeEmit + 0.5f) * (origFuel - fuel(i,j,k)) * 0.1f * flameSmoke;
- density(i,j,k) += smokeEmit;
- clamp(density(i,j,k), 0.0f, 1.0f);
-
- // Set fluid temperature from the flame temperature profile
- if (/*heat(i,j,k) &&*/ flame)
- {
- heat(i,j,k) = (1.0f - flame) * ignitionPoint + flame * tempMax;
- }
-
- // Mix new color
- if (smokeEmit > FLT_EPSILON)
- {
- float smokeFactor = density(i,j,k) / (origSmoke + smokeEmit);
- red(i,j,k) = (red(i,j,k) + flameSmokeColor.x * smokeEmit) * smokeFactor;
- green(i,j,k) = (green(i,j,k) + flameSmokeColor.y * smokeEmit) * smokeFactor;
- blue(i,j,k) = (blue(i,j,k) + flameSmokeColor.z * smokeEmit) * smokeFactor;
- }
- //}
+ // Save initial values
+ float origFuel = fuel(i,j,k);
+ float origSmoke = density(i,j,k);
+ float smokeEmit = 0.0f;
+ float flame = 0.0f;
+
+ // Process fuel
+ fuel(i,j,k) -= burningRate * dt;
+ if (fuel(i,j,k) < 0.0f)
+ {
+ fuel(i,j,k) = 0.0f;
+ }
+
+ // Process reaction coordinate
+ if (origFuel > __FLT_EPSILON__)
+ {
+ react(i,j,k) *= fuel(i,j,k) / origFuel;
+ flame = pow(react(i,j,k), 0.5f);
+ }
+ else
+ {
+ react(i,j,k) = 0.0f;
+ }
+
+ // Set fluid temperature based on fuel burn rate and "flameSmoke" factor
+ smokeEmit = (origFuel < 1.0f) ? (1.0f - origFuel) * 0.5f : 0.0f;
+ smokeEmit = (smokeEmit + 0.5f) * (origFuel - fuel(i,j,k)) * 0.1f * flameSmoke;
+ density(i,j,k) += smokeEmit;
+ clamp(density(i,j,k), 0.0f, 1.0f);
+
+ // Set fluid temperature from the flame temperature profile
+ if (/*heat(i,j,k) &&*/ flame)
+ {
+ heat(i,j,k) = (1.0f - flame) * ignitionPoint + flame * tempMax;
+ }
+
+ // Mix new color
+ if (smokeEmit > __FLT_EPSILON__)
+ {
+ float smokeFactor = density(i,j,k) / (origSmoke + smokeEmit);
+ red(i,j,k) = (red(i,j,k) + flameSmokeColor.x * smokeEmit) * smokeFactor;
+ green(i,j,k) = (green(i,j,k) + flameSmokeColor.y * smokeEmit) * smokeFactor;
+ blue(i,j,k) = (blue(i,j,k) + flameSmokeColor.z * smokeEmit) * smokeFactor;
+ }
}
KERNEL (bnd=1)
@@ -118,15 +115,15 @@ void KnUpdateFlame(Grid<Real>& react, Grid<Real>& flame)
}
PYTHON void processBurn(Grid<Real>& fuel,
- Grid<Real>& density,
- Grid<Real>& react,
- Grid<Real>& heat,
- Grid<Real>& red,
- Grid<Real>& green,
- Grid<Real>& blue)
+ Grid<Real>& density,
+ Grid<Real>& react,
+ Grid<Real>& heat,
+ Grid<Real>& red,
+ Grid<Real>& green,
+ Grid<Real>& blue)
{
KnProcessBurn(fuel, density, react, heat, red, green, blue, burningRate,
- flameSmoke, ignitionPoint, tempMax, dtDefault, flameSmokeColor);
+ flameSmoke, ignitionPoint, tempMax, dtDefault, flameSmokeColor);
}
PYTHON void updateFlame(Grid<Real>& react, Grid<Real>& flame)
diff --git a/source/blender/python/manta_pp/plugin/fire.cpp b/source/blender/python/manta_pp/plugin/fire.cpp
new file mode 100644
index 0000000..1d2c75a
--- /dev/null
+++ b/source/blender/python/manta_pp/plugin/fire.cpp
@@ -0,0 +1,146 @@
+
+
+
+
+
+// DO NOT EDIT !
+// This file is generated using the MantaFlow preprocessor (prep generate).
+
+
+
+
+/******************************************************************************
+ *
+ * MantaFlow fluid solver framework
+ * Copyright 2011 Tobias Pfaff, Nils Thuerey
+ *
+ * This program is free software, distributed under the terms of the
+ * GNU General Public License (GPL)
+ * http://www.gnu.org/licenses
+ *
+ * Fire modeling plugin
+ *
+ ******************************************************************************/
+
+#include <stdio.h>
+#include <float.h>
+#include "vectorbase.h"
+#include "grid.h"
+#include "levelset.h"
+
+using namespace std;
+
+namespace Manta {
+
+// default domain values
+const Real burningRate = 0.75;
+const Real flameSmoke = 1.0;
+const Real flameVorticity = 0.5;
+const Real ignitionPoint = 1.25;
+const Real tempMax = 1.75;
+const Vec3 flameSmokeColor = Vec3(0.7f, 0.7f, 0.7f);
+
+// default flow values
+const Real flowDensity = 1.0;
+const Real flowFuelAmount = 1.0;
+const Real flowTemp = 1.0;
+const Real flowVolumeDensity = 0.0;
+const Real flowSurfaceDistance = 1.5;
+const Vec3 flowColor = Vec3(0.7f, 0.7f, 0.7f);
+
+// other default values
+const Real dtDefault = 0.1;
+const Real fps = 24.0;
+const int absoluteFlow = 1;
+const bool withSmoke = true;
+const bool withFire = true;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ struct KnProcessBurn : public KernelBase { KnProcessBurn(Grid<Real>& fuel, Grid<Real>& density, Grid<Real>& react, Grid<Real>& heat, Grid<Real>& red, Grid<Real>& green, Grid<Real>& blue, float burningRate, float flameSmoke, float ignitionPoint, float tempMax, float dt, Vec3 flameSmokeColor) : KernelBase(&fuel,1) ,fuel(fuel),density(density),react(react),heat(heat),red(red),green(green),blue(blue),burningRate(burningRate),flameSmoke(flameSmoke),ignitionPoint(ignitionPoint),tempMax(tempM [...]
+ // Save initial values
+ float origFuel = fuel(i,j,k);
+ float origSmoke = density(i,j,k);
+ float smokeEmit = 0.0f;
+ float flame = 0.0f;
+
+ // Process fuel
+ fuel(i,j,k) -= burningRate * dt;
+ if (fuel(i,j,k) < 0.0f)
+ {
+ fuel(i,j,k) = 0.0f;
+ }
+
+ // Process reaction coordinate
+ if (origFuel > __FLT_EPSILON__)
+ {
+ react(i,j,k) *= fuel(i,j,k) / origFuel;
+ flame = pow(react(i,j,k), 0.5f);
+ }
+ else
+ {
+ react(i,j,k) = 0.0f;
+ }
+
+ // Set fluid temperature based on fuel burn rate and "flameSmoke" factor
+ smokeEmit = (origFuel < 1.0f) ? (1.0f - origFuel) * 0.5f : 0.0f;
+ smokeEmit = (smokeEmit + 0.5f) * (origFuel - fuel(i,j,k)) * 0.1f * flameSmoke;
+ density(i,j,k) += smokeEmit;
+ clamp(density(i,j,k), 0.0f, 1.0f);
+
+ // Set fluid temperature from the flame temperature profile
+ if (/*heat(i,j,k) &&*/ flame)
+ {
+ heat(i,j,k) = (1.0f - flame) * ignitionPoint + flame * tempMax;
+ }
+
+ // Mix new color
+ if (smokeEmit > __FLT_EPSILON__)
+ {
+ float smokeFactor = density(i,j,k) / (origSmoke + smokeEmit);
+ red(i,j,k) = (red(i,j,k) + flameSmokeColor.x * smokeEmit) * smokeFactor;
+ green(i,j,k) = (green(i,j,k) + flameSmokeColor.y * smokeEmit) * smokeFactor;
+ blue(i,j,k) = (blue(i,j,k) + flameSmokeColor.z * smokeEmit) * smokeFactor;
+ }
+} inline Grid<Real>& getArg0() { return fuel; } typedef Grid<Real> type0;inline Grid<Real>& getArg1() { return density; } typedef Grid<Real> type1;inline Grid<Real>& getArg2() { return react; } typedef Grid<Real> type2;inline Grid<Real>& getArg3() { return heat; } typedef Grid<Real> type3;inline Grid<Real>& getArg4() { return red; } typedef Grid<Real> type4;inline Grid<Real>& getArg5() { return green; } typedef Grid<Real> type5;inline Grid<Real>& getArg6() { return blue; } typedef Grid [...]
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list