2006-02-27 11:56:04 +00:00
|
|
|
/******************************************************************************
|
|
|
|
*
|
|
|
|
* El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
|
|
|
|
* All code distributed as part of El'Beem is covered by the version 2 of the
|
|
|
|
* GNU General Public License. See the file COPYING for details.
|
- bugfixes
#4742 exported normals are now correct
#4821 & 4956 for complex movements in/outflows can now also
use the animated mesh option
- new features
* isosurface subdivision: directly
creates a finer surface mesh from the simulation data.
this increases simulation time and harddisk usage, though, so
be careful - usually values of 2-4 should be enough.
* fluidsim particles: extended model for particle
simulation and generation. When isosurface subdivision is enabled,
the particles are now included in the surface generation,
giving a better impression of a single connected surface.
Note - the particles are only included in the final surface
mesh, so the preview surface shows none of the particle
effects.
* particle loading: different types of particles can now be selected for
display: drops, floats and tracers. This is a bit obsolete
due to the extensions mentioned above, but might still be useful.
Floats are just particles floating on the fluid surface, could
be used for e.g. foam.
* moving objects impact factor: this is another tweaking option,
as the handling of moving objects is still not conserving
mass. setting this to zero simply deletes the fluid, 1 is
the default, while larger values cause a stronger
impact. For tweaking the simulation: if fluid disappears, try
increasing this value, and if too much is appearing reduce it.
You can even use negative values for some strange results :)
- more code cleanup, e.g. removed config file writing in fluidsim.c,
added additional safety checks for particles & fluidsim domains (these
currently dont work together). I also removed the "build particles"
debug message in effects.c (seemed to be unnecessary?).
Some more info on the new features:
Here are two test animations showing the difference between
using the particle generation with isosurface subdivision.
This is how it would look with the old solver version:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_1noparts.mpg
and this with the new one:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_2wparts.mpg
Both simulations use a resolution of 64, however, the version with particles
takes significantly longer (almost twice as long).
The .blend file for a similar setup can be found here:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_testmanc4.blend
(Minor Tips for this file: dont enable subdivions of characters until rendering,
thus leave off for simulation, as it uses the rendering settings! For making
nice pictures switch on subdivion, and OSA.)
And here's a picture of old vs. new (for webpage or so):
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_manc4compare.png
2006-11-05 16:30:29 +00:00
|
|
|
* Copyright 2003-2006 Nils Thuerey
|
2006-02-27 11:56:04 +00:00
|
|
|
*
|
|
|
|
* API header
|
|
|
|
*/
|
|
|
|
#ifndef ELBEEM_API_H
|
|
|
|
#define ELBEEM_API_H
|
|
|
|
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
// simulation run callback function type (elbeemSimulationSettings->runsimCallback)
|
|
|
|
// best use with FLUIDSIM_CBxxx defines below.
|
|
|
|
// >parameters
|
|
|
|
// return values: 0=continue, 1=stop, 2=abort
|
|
|
|
// data pointer: user data pointer from elbeemSimulationSettings->runsimUserData
|
|
|
|
// status integer: 1=running simulation, 2=new frame saved
|
|
|
|
// frame integer: if status is 1, contains current frame number
|
|
|
|
typedef int (*elbeemRunSimulationCallback)(void *data, int status, int frame);
|
|
|
|
#define FLUIDSIM_CBRET_CONTINUE 0
|
|
|
|
#define FLUIDSIM_CBRET_STOP 1
|
|
|
|
#define FLUIDSIM_CBRET_ABORT 2
|
|
|
|
#define FLUIDSIM_CBSTATUS_STEP 1
|
|
|
|
#define FLUIDSIM_CBSTATUS_NEWFRAME 2
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
// global settings for the simulation
|
|
|
|
typedef struct elbeemSimulationSettings {
|
|
|
|
/* version number */
|
|
|
|
short version;
|
2006-05-11 08:09:02 +00:00
|
|
|
/* id number of simulation domain, needed if more than a
|
|
|
|
* single domain should be simulated */
|
2008-07-25 18:57:16 +00:00
|
|
|
short domainId; // unused within blender
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* geometrical extent */
|
|
|
|
float geoStart[3], geoSize[3];
|
|
|
|
|
|
|
|
/* resolutions */
|
|
|
|
short resolutionxyz;
|
|
|
|
short previewresxyz;
|
|
|
|
/* size of the domain in real units (meters along largest resolution x,y,z extent) */
|
|
|
|
float realsize;
|
|
|
|
|
|
|
|
/* fluid properties */
|
|
|
|
double viscosity;
|
|
|
|
/* gravity strength */
|
|
|
|
float gravity[3];
|
|
|
|
/* anim start end time */
|
|
|
|
float animStart, aniFrameTime;
|
|
|
|
/* no. of frames to simulate & output */
|
|
|
|
short noOfFrames;
|
|
|
|
/* g star param (LBM compressibility) */
|
|
|
|
float gstar;
|
|
|
|
/* activate refinement? */
|
|
|
|
short maxRefine;
|
2006-05-11 08:09:02 +00:00
|
|
|
/* probability for surface particle generation (0.0=off) */
|
2006-02-27 11:56:04 +00:00
|
|
|
float generateParticles;
|
2006-05-11 08:09:02 +00:00
|
|
|
/* amount of tracer particles to generate (0=off) */
|
|
|
|
int numTracerParticles;
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* store output path, and file prefix for baked fluid surface */
|
|
|
|
char outputPath[160+80];
|
|
|
|
|
|
|
|
/* channel for frame time, visc & gravity animations */
|
|
|
|
int channelSizeFrameTime;
|
|
|
|
float *channelFrameTime;
|
|
|
|
int channelSizeViscosity;
|
|
|
|
float *channelViscosity;
|
|
|
|
int channelSizeGravity;
|
|
|
|
float *channelGravity; // vector
|
|
|
|
|
|
|
|
/* boundary types and settings for domain walls */
|
- bugfixes
#4742 exported normals are now correct
#4821 & 4956 for complex movements in/outflows can now also
use the animated mesh option
- new features
* isosurface subdivision: directly
creates a finer surface mesh from the simulation data.
this increases simulation time and harddisk usage, though, so
be careful - usually values of 2-4 should be enough.
* fluidsim particles: extended model for particle
simulation and generation. When isosurface subdivision is enabled,
the particles are now included in the surface generation,
giving a better impression of a single connected surface.
Note - the particles are only included in the final surface
mesh, so the preview surface shows none of the particle
effects.
* particle loading: different types of particles can now be selected for
display: drops, floats and tracers. This is a bit obsolete
due to the extensions mentioned above, but might still be useful.
Floats are just particles floating on the fluid surface, could
be used for e.g. foam.
* moving objects impact factor: this is another tweaking option,
as the handling of moving objects is still not conserving
mass. setting this to zero simply deletes the fluid, 1 is
the default, while larger values cause a stronger
impact. For tweaking the simulation: if fluid disappears, try
increasing this value, and if too much is appearing reduce it.
You can even use negative values for some strange results :)
- more code cleanup, e.g. removed config file writing in fluidsim.c,
added additional safety checks for particles & fluidsim domains (these
currently dont work together). I also removed the "build particles"
debug message in effects.c (seemed to be unnecessary?).
Some more info on the new features:
Here are two test animations showing the difference between
using the particle generation with isosurface subdivision.
This is how it would look with the old solver version:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_1noparts.mpg
and this with the new one:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_2wparts.mpg
Both simulations use a resolution of 64, however, the version with particles
takes significantly longer (almost twice as long).
The .blend file for a similar setup can be found here:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_testmanc4.blend
(Minor Tips for this file: dont enable subdivions of characters until rendering,
thus leave off for simulation, as it uses the rendering settings! For making
nice pictures switch on subdivion, and OSA.)
And here's a picture of old vs. new (for webpage or so):
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_manc4compare.png
2006-11-05 16:30:29 +00:00
|
|
|
short domainobsType;
|
|
|
|
float domainobsPartslip;
|
2006-02-27 11:56:04 +00:00
|
|
|
/* generate speed vectors for vertices (e.g. for image based motion blur)*/
|
|
|
|
short generateVertexVectors;
|
|
|
|
/* strength of surface smoothing */
|
|
|
|
float surfaceSmoothing;
|
- bugfixes
#4742 exported normals are now correct
#4821 & 4956 for complex movements in/outflows can now also
use the animated mesh option
- new features
* isosurface subdivision: directly
creates a finer surface mesh from the simulation data.
this increases simulation time and harddisk usage, though, so
be careful - usually values of 2-4 should be enough.
* fluidsim particles: extended model for particle
simulation and generation. When isosurface subdivision is enabled,
the particles are now included in the surface generation,
giving a better impression of a single connected surface.
Note - the particles are only included in the final surface
mesh, so the preview surface shows none of the particle
effects.
* particle loading: different types of particles can now be selected for
display: drops, floats and tracers. This is a bit obsolete
due to the extensions mentioned above, but might still be useful.
Floats are just particles floating on the fluid surface, could
be used for e.g. foam.
* moving objects impact factor: this is another tweaking option,
as the handling of moving objects is still not conserving
mass. setting this to zero simply deletes the fluid, 1 is
the default, while larger values cause a stronger
impact. For tweaking the simulation: if fluid disappears, try
increasing this value, and if too much is appearing reduce it.
You can even use negative values for some strange results :)
- more code cleanup, e.g. removed config file writing in fluidsim.c,
added additional safety checks for particles & fluidsim domains (these
currently dont work together). I also removed the "build particles"
debug message in effects.c (seemed to be unnecessary?).
Some more info on the new features:
Here are two test animations showing the difference between
using the particle generation with isosurface subdivision.
This is how it would look with the old solver version:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_1noparts.mpg
and this with the new one:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_2wparts.mpg
Both simulations use a resolution of 64, however, the version with particles
takes significantly longer (almost twice as long).
The .blend file for a similar setup can be found here:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_testmanc4.blend
(Minor Tips for this file: dont enable subdivions of characters until rendering,
thus leave off for simulation, as it uses the rendering settings! For making
nice pictures switch on subdivion, and OSA.)
And here's a picture of old vs. new (for webpage or so):
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_manc4compare.png
2006-11-05 16:30:29 +00:00
|
|
|
/* no. of surface subdivisions */
|
|
|
|
int surfaceSubdivs;
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* global transformation to apply to fluidsim mesh */
|
|
|
|
float surfaceTrafo[4*4];
|
2006-03-29 07:35:54 +00:00
|
|
|
|
|
|
|
/* development variables, testing for upcoming releases...*/
|
|
|
|
float farFieldSize;
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
/* callback function to notify calling program of performed simulation steps
|
|
|
|
* or newly available frame data, if NULL it is ignored */
|
|
|
|
elbeemRunSimulationCallback runsimCallback;
|
|
|
|
/* pointer passed to runsimCallback for user data storage */
|
|
|
|
void* runsimUserData;
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
} elbeemSimulationSettings;
|
|
|
|
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
// defines for elbeemMesh->type below
|
2008-07-04 15:23:21 +00:00
|
|
|
/* please keep in sync with DNA_object_fluidsim.h */
|
2006-05-11 08:09:02 +00:00
|
|
|
#define OB_FLUIDSIM_FLUID 4
|
|
|
|
#define OB_FLUIDSIM_OBSTACLE 8
|
|
|
|
#define OB_FLUIDSIM_INFLOW 16
|
|
|
|
#define OB_FLUIDSIM_OUTFLOW 32
|
2008-07-04 15:23:21 +00:00
|
|
|
#define OB_FLUIDSIM_PARTICLE 64
|
|
|
|
#define OB_FLUIDSIM_CONTROL 128
|
2006-05-11 08:09:02 +00:00
|
|
|
|
|
|
|
// defines for elbeemMesh->obstacleType below
|
|
|
|
#define FLUIDSIM_OBSTACLE_NOSLIP 1
|
|
|
|
#define FLUIDSIM_OBSTACLE_PARTSLIP 2
|
|
|
|
#define FLUIDSIM_OBSTACLE_FREESLIP 3
|
|
|
|
|
|
|
|
#define OB_VOLUMEINIT_VOLUME 1
|
|
|
|
#define OB_VOLUMEINIT_SHELL 2
|
|
|
|
#define OB_VOLUMEINIT_BOTH (OB_VOLUMEINIT_SHELL|OB_VOLUMEINIT_VOLUME)
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
// a single mesh object
|
|
|
|
typedef struct elbeemMesh {
|
2008-07-06 21:55:03 +00:00
|
|
|
/* obstacle,fluid or inflow or control ... */
|
2006-02-27 11:56:04 +00:00
|
|
|
short type;
|
2006-05-11 08:09:02 +00:00
|
|
|
/* id of simulation domain it belongs to */
|
|
|
|
short parentDomainId;
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* vertices */
|
|
|
|
int numVertices;
|
2006-05-11 08:09:02 +00:00
|
|
|
float *vertices; // = float[n][3];
|
|
|
|
/* animated vertices */
|
|
|
|
int channelSizeVertices;
|
|
|
|
float *channelVertices; // = float[channelSizeVertices* (n*3+1) ];
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* triangles */
|
|
|
|
int numTriangles;
|
|
|
|
int *triangles; // = int[][3];
|
|
|
|
|
|
|
|
/* animation channels */
|
|
|
|
int channelSizeTranslation;
|
|
|
|
float *channelTranslation;
|
|
|
|
int channelSizeRotation;
|
|
|
|
float *channelRotation;
|
|
|
|
int channelSizeScale;
|
|
|
|
float *channelScale;
|
|
|
|
|
|
|
|
/* active channel */
|
|
|
|
int channelSizeActive;
|
|
|
|
float *channelActive;
|
|
|
|
/* initial velocity channel (e.g. for inflow) */
|
|
|
|
int channelSizeInitialVel;
|
|
|
|
float *channelInitialVel; // vector
|
|
|
|
/* use initial velocity in object coordinates? (e.g. for rotation) */
|
|
|
|
short localInivelCoords;
|
|
|
|
/* boundary types and settings */
|
|
|
|
short obstacleType;
|
|
|
|
float obstaclePartslip;
|
- bugfixes
#4742 exported normals are now correct
#4821 & 4956 for complex movements in/outflows can now also
use the animated mesh option
- new features
* isosurface subdivision: directly
creates a finer surface mesh from the simulation data.
this increases simulation time and harddisk usage, though, so
be careful - usually values of 2-4 should be enough.
* fluidsim particles: extended model for particle
simulation and generation. When isosurface subdivision is enabled,
the particles are now included in the surface generation,
giving a better impression of a single connected surface.
Note - the particles are only included in the final surface
mesh, so the preview surface shows none of the particle
effects.
* particle loading: different types of particles can now be selected for
display: drops, floats and tracers. This is a bit obsolete
due to the extensions mentioned above, but might still be useful.
Floats are just particles floating on the fluid surface, could
be used for e.g. foam.
* moving objects impact factor: this is another tweaking option,
as the handling of moving objects is still not conserving
mass. setting this to zero simply deletes the fluid, 1 is
the default, while larger values cause a stronger
impact. For tweaking the simulation: if fluid disappears, try
increasing this value, and if too much is appearing reduce it.
You can even use negative values for some strange results :)
- more code cleanup, e.g. removed config file writing in fluidsim.c,
added additional safety checks for particles & fluidsim domains (these
currently dont work together). I also removed the "build particles"
debug message in effects.c (seemed to be unnecessary?).
Some more info on the new features:
Here are two test animations showing the difference between
using the particle generation with isosurface subdivision.
This is how it would look with the old solver version:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_1noparts.mpg
and this with the new one:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_2wparts.mpg
Both simulations use a resolution of 64, however, the version with particles
takes significantly longer (almost twice as long).
The .blend file for a similar setup can be found here:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_testmanc4.blend
(Minor Tips for this file: dont enable subdivions of characters until rendering,
thus leave off for simulation, as it uses the rendering settings! For making
nice pictures switch on subdivion, and OSA.)
And here's a picture of old vs. new (for webpage or so):
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_manc4compare.png
2006-11-05 16:30:29 +00:00
|
|
|
/* amount of force transfer from fluid to obj, 0=off, 1=normal */
|
|
|
|
float obstacleImpactFactor;
|
2006-05-11 08:09:02 +00:00
|
|
|
/* init volume, shell or both? use OB_VOLUMEINIT_xxx defines above */
|
|
|
|
short volumeInitType;
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/* name of the mesh, mostly for debugging */
|
2007-11-21 22:12:16 +00:00
|
|
|
const char *name;
|
2008-07-06 21:55:03 +00:00
|
|
|
|
|
|
|
/* fluid control settings */
|
2008-07-07 09:23:12 +00:00
|
|
|
float cpsTimeStart;
|
|
|
|
float cpsTimeEnd;
|
2008-07-08 17:38:33 +00:00
|
|
|
float cpsQuality;
|
2008-07-07 09:23:12 +00:00
|
|
|
|
2008-07-07 14:36:33 +00:00
|
|
|
int channelSizeAttractforceStrength;
|
|
|
|
float *channelAttractforceStrength;
|
|
|
|
int channelSizeAttractforceRadius;
|
|
|
|
float *channelAttractforceRadius;
|
|
|
|
int channelSizeVelocityforceStrength;
|
|
|
|
float *channelVelocityforceStrength;
|
|
|
|
int channelSizeVelocityforceRadius;
|
|
|
|
float *channelVelocityforceRadius;
|
2006-02-27 11:56:04 +00:00
|
|
|
} elbeemMesh;
|
|
|
|
|
|
|
|
// API functions
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
// reset elbeemSimulationSettings struct with defaults
|
|
|
|
void elbeemResetSettings(struct elbeemSimulationSettings*);
|
|
|
|
|
2006-03-29 07:35:54 +00:00
|
|
|
// start fluidsim init (returns !=0 upon failure)
|
2006-05-11 08:09:02 +00:00
|
|
|
int elbeemInit(void);
|
|
|
|
|
2008-07-25 18:57:16 +00:00
|
|
|
// frees fluidsim
|
|
|
|
int elbeemFree(void);
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
// start fluidsim init (returns !=0 upon failure)
|
|
|
|
int elbeemAddDomain(struct elbeemSimulationSettings*);
|
|
|
|
|
2006-03-29 07:35:54 +00:00
|
|
|
// get failure message during simulation or init
|
|
|
|
// if an error occured (the string is copied into buffer,
|
|
|
|
// max. length = 256 chars )
|
|
|
|
void elbeemGetErrorString(char *buffer);
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
// reset elbeemMesh struct with zeroes
|
|
|
|
void elbeemResetMesh(struct elbeemMesh*);
|
|
|
|
|
|
|
|
// add mesh as fluidsim object
|
|
|
|
int elbeemAddMesh(struct elbeemMesh*);
|
|
|
|
|
|
|
|
// do the actual simulation
|
|
|
|
int elbeemSimulate(void);
|
|
|
|
|
2006-05-11 08:09:02 +00:00
|
|
|
// continue a previously stopped simulation
|
|
|
|
int elbeemContinueSimulation(void);
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
|
2006-03-29 07:35:54 +00:00
|
|
|
// helper functions
|
|
|
|
|
|
|
|
// simplify animation channels
|
2006-02-27 11:56:04 +00:00
|
|
|
// returns if the channel and its size changed
|
|
|
|
int elbeemSimplifyChannelFloat(float *channel, int *size);
|
|
|
|
int elbeemSimplifyChannelVec3(float *channel, int *size);
|
|
|
|
|
2006-03-29 07:35:54 +00:00
|
|
|
// helper functions implemented in utilities.cpp
|
|
|
|
|
|
|
|
/* set elbeem debug output level (0=off to 10=full on) */
|
|
|
|
void elbeemSetDebugLevel(int level);
|
|
|
|
/* elbeem debug output function, prints if debug level >0 */
|
|
|
|
void elbeemDebugOut(char *msg);
|
|
|
|
|
|
|
|
/* estimate how much memory a given setup will require */
|
|
|
|
double elbeemEstimateMemreq(int res,
|
|
|
|
float sx, float sy, float sz,
|
|
|
|
int refine, char *retstr);
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif // __cplusplus
|
|
|
|
|
2006-03-29 07:35:54 +00:00
|
|
|
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
/******************************************************************************/
|
2006-03-29 07:35:54 +00:00
|
|
|
// internal defines, do not use for initializing elbeemMesh
|
|
|
|
// structs, for these use OB_xxx defines above
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
/*! fluid geometry init types */
|
2008-07-06 18:19:42 +00:00
|
|
|
// type "int" used, so max is 8
|
2006-02-27 11:56:04 +00:00
|
|
|
#define FGI_FLAGSTART 16
|
|
|
|
#define FGI_FLUID (1<<(FGI_FLAGSTART+ 0))
|
|
|
|
#define FGI_NO_FLUID (1<<(FGI_FLAGSTART+ 1))
|
|
|
|
#define FGI_BNDNO (1<<(FGI_FLAGSTART+ 2))
|
|
|
|
#define FGI_BNDFREE (1<<(FGI_FLAGSTART+ 3))
|
|
|
|
#define FGI_BNDPART (1<<(FGI_FLAGSTART+ 4))
|
|
|
|
#define FGI_NO_BND (1<<(FGI_FLAGSTART+ 5))
|
|
|
|
#define FGI_MBNDINFLOW (1<<(FGI_FLAGSTART+ 6))
|
|
|
|
#define FGI_MBNDOUTFLOW (1<<(FGI_FLAGSTART+ 7))
|
2008-07-06 18:19:42 +00:00
|
|
|
#define FGI_CONTROL (1<<(FGI_FLAGSTART+ 8))
|
2006-02-27 11:56:04 +00:00
|
|
|
|
- bugfixes
#4742 exported normals are now correct
#4821 & 4956 for complex movements in/outflows can now also
use the animated mesh option
- new features
* isosurface subdivision: directly
creates a finer surface mesh from the simulation data.
this increases simulation time and harddisk usage, though, so
be careful - usually values of 2-4 should be enough.
* fluidsim particles: extended model for particle
simulation and generation. When isosurface subdivision is enabled,
the particles are now included in the surface generation,
giving a better impression of a single connected surface.
Note - the particles are only included in the final surface
mesh, so the preview surface shows none of the particle
effects.
* particle loading: different types of particles can now be selected for
display: drops, floats and tracers. This is a bit obsolete
due to the extensions mentioned above, but might still be useful.
Floats are just particles floating on the fluid surface, could
be used for e.g. foam.
* moving objects impact factor: this is another tweaking option,
as the handling of moving objects is still not conserving
mass. setting this to zero simply deletes the fluid, 1 is
the default, while larger values cause a stronger
impact. For tweaking the simulation: if fluid disappears, try
increasing this value, and if too much is appearing reduce it.
You can even use negative values for some strange results :)
- more code cleanup, e.g. removed config file writing in fluidsim.c,
added additional safety checks for particles & fluidsim domains (these
currently dont work together). I also removed the "build particles"
debug message in effects.c (seemed to be unnecessary?).
Some more info on the new features:
Here are two test animations showing the difference between
using the particle generation with isosurface subdivision.
This is how it would look with the old solver version:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_1noparts.mpg
and this with the new one:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_fl6manc4_2wparts.mpg
Both simulations use a resolution of 64, however, the version with particles
takes significantly longer (almost twice as long).
The .blend file for a similar setup can be found here:
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_testmanc4.blend
(Minor Tips for this file: dont enable subdivions of characters until rendering,
thus leave off for simulation, as it uses the rendering settings! For making
nice pictures switch on subdivion, and OSA.)
And here's a picture of old vs. new (for webpage or so):
http://www10.informatik.uni-erlangen.de/~sinithue/blender/fluid6_manc4compare.png
2006-11-05 16:30:29 +00:00
|
|
|
// all boundary types at once
|
|
|
|
#define FGI_ALLBOUNDS ( FGI_BNDNO | FGI_BNDFREE | FGI_BNDPART | FGI_MBNDINFLOW | FGI_MBNDOUTFLOW )
|
|
|
|
|
2006-02-27 11:56:04 +00:00
|
|
|
|
|
|
|
#endif // ELBEEM_API_H
|