forked from bartvdbraak/blender
3bea663ffa
#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
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
/******************************************************************************
|
|
*
|
|
* El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
|
|
* Copyright 2003-2006 Nils Thuerey
|
|
*
|
|
* Interface for a geometry shader
|
|
*
|
|
*****************************************************************************/
|
|
#ifndef NTL_GEOMETRYSHADER_H
|
|
#define NTL_GEOMETRYSHADER_H
|
|
|
|
#include "ntl_geometryclass.h"
|
|
class ntlGeometryObject;
|
|
class ntlRenderGlobals;
|
|
|
|
class ntlGeometryShader :
|
|
public ntlGeometryClass
|
|
{
|
|
|
|
public:
|
|
|
|
//! Default constructor
|
|
inline ntlGeometryShader() :
|
|
ntlGeometryClass(), mOutFilename("")
|
|
{};
|
|
//! Default destructor
|
|
virtual ~ntlGeometryShader() {};
|
|
|
|
//! Return type id
|
|
virtual int getTypeId() { return GEOCLASSTID_SHADER; }
|
|
|
|
/*! Initialize object, should return !=0 upon error */
|
|
virtual int initializeShader() = 0;
|
|
|
|
/*! Do further object initialization after all geometry has been constructed, should return !=0 upon error */
|
|
virtual int postGeoConstrInit(ntlRenderGlobals *glob) { glob=NULL; /*unused*/ return 0; };
|
|
|
|
/*! Get start iterator for all objects */
|
|
virtual vector<ntlGeometryObject *>::iterator getObjectsBegin() { return mObjects.begin(); }
|
|
/*! Get end iterator for all objects */
|
|
virtual vector<ntlGeometryObject *>::iterator getObjectsEnd() { return mObjects.end(); }
|
|
|
|
/*! notify object that dump is in progress (e.g. for field dump) */
|
|
virtual void notifyShaderOfDump(int dumptype, int frameNr,char *frameNrStr,string outfilename) = 0;
|
|
|
|
/*! get ouput filename, returns global render outfile if empty */
|
|
string getOutFilename( void ) { return mOutFilename; }
|
|
|
|
protected:
|
|
|
|
//! vector for the objects
|
|
vector<ntlGeometryObject *> mObjects;
|
|
|
|
|
|
/*! surface output name for this simulation */
|
|
string mOutFilename;
|
|
};
|
|
|
|
#endif
|
|
|