last modification of this documentation: January 14th 2010
this page is best viewed with Mozilla Firefox or IE8
On the emFluid3 web page you can:
This documentation has the following chapters:
If you feel that something is not well explained (or not explained at all) then please write me a short e-mail.
I will then update the documentation and/or make a demo scene as quickly as possible.
On my Vimeo page are many video tutorials in which I show and explain different aspects and techniques concerning emFluid3 and its usage. You might also try to search for "emFluid3" on Vimeo to find some videos made by other people, as for example Oliver's cool "How to setup a flamethrower with emFluid3, emRPC and MR" tutorial.
Note: Scenes that were created using versions 3.01 (or higher) of this plug-in will work just fine with this new version.
This plug-in comes as a so called "Add-On", here's how to install it:


Note: all of the emFluid3 compounds are "public", meaning that you can look inside the compounds to see how things are done. This also means that you have the possibility of modifying the existing compounds, i.e. you could add further functionality to some of the compounds to meet the needs of a special project.
The typical emFluid3 setup is not just a single compound but rather a group of several compounds that need to be connected in a very specific way.
In the following video an overview of the main setup and its different compounds is given.

The main compound of this plug-in is quite a "monster", especially due to all its output ports, and even though it might seem a little intimidating at first sight it is in fact quite easy to use.
This main compound won't work on its own, it requires a few additional compounds to be plugged into it. These additional compounds are
TIP (use the compound "explode me"): The easiest and quickest way to get your emFluid3 setup "ready to rumble" is to simple use the compound "explode me" as demonstrated in the following video tutorial (viewed best in full screen):
Should you be interested in building your setup entirely from scratch then please take a look at the following video tutorial:
The input ports
The output ports
Introduction for humans (normal users):
The main compound has a whole bunch of output ports, but you can ignore most of them when using emFluid3.
Typical setups will in fact only use 3-4 of them:
- the two execute ports
- the "Burn Positions" port
- the "Heat" port.
For example the setup contained in the "explode me" compound uses exactly those four ports.
Introduction for humanoids (TDs, Geeks, Nerds):
The main compound has a whole bunch of output ports and most of them are not required when using emFluid3 in a "normal" way. There may be cases however when you might want to go beyond the usual set of features and this version of emFluid3 will allow you to do so. The many output ports give you access to all the internal 3D grids (as flat arrays) of the fluid solver, therefore permitting you to eventually create a new plug-in by using emFluid3 as its core.
As a concrete example you might take a look into the main compound: once you are in the compound all the stuff in the lower-right takes care of the "Debug" mode. Latter is a 100% ICE (no hard coded stuff) and a good example of what you can do with the "Grid (Array)" output ports.
The output ports in detail:

Whenever you are using combustion (= burning fuel with oxygen) this port outputs an array of so-called "burn positions" that you can use with the "emFluid3 _ Particle Emitter" compound.
So what exactly are "burn positions"? At each frame some of the fuel contained in the fluid box is burned. The positions where fuel is burned are stored in an array of 3D vectors that you can use by connecting this port to whatever you like, typically the "emFluid3 _ Particle Emitter" compound.
Use the parameter "Amount per cubic SI Unit of Fuel" of the compound emFluid3 __ Behavior to control the amount of positions that are generated.
These ports give you access to the solver's internal data grids which are stored as flat arrays.
Use the values from the ports "Cells in X/Y/Z" to calculate your indices when "peeking and poking" in the arrays:
Let's say that
Nx = Cells in X
Ny = Cells in Y
Nz = Cells in Z
then the index of the cell (i,j,k) in the array is calculated as
index = i + j*Nx + k*Nx*Ny

This compound can be used to emit particles from the so-called "burn positions".
Aside from the input port called "Burn Positions" this compound is mainly the same as the other particle emitter compounds of ICE as for example "Emit from Surface": You can define the initial values of the particles (size, mass, color, etc.) and perform executions on emission, for example set the particle's age limit.
The input port "Burn Positions":
This input expects an array of positions (as 3D Vectors). This array is automatically generated by emFluid3's main compound whenever fluid is burned. Exactly one particle is emitted per burn position, so in order to control the total amount of particles you need to control the amount of burn positions. This can be done in the compound emFluid3 __ Behavior via the parameter "Amount per cubic SI Unit of Fuel".

The parameters in this compound let you control the data's so-called "behavior".
This compound is a simplified and more user-friendly version of the compound "emFluid3 __ Behavior Advanced":
only the commonly used parameters are exposed, but you can enter the "Behavior" compound at any time to access the "Behavior Advanced" compound and its parameters.
The input ports:
The output port "Behavior":
This port must be connected to the input port "In Behavior" of the main compound.

This compound has all parameters concerning the behavior of data and is contained in the "emFluid3 __ Behavior" compound.
The normal usage is to connect the "emFluid3 __ Behavior" compound but you can also connect this compound if you wish.
The input ports:
The output port "Behavior":
This port must be connected to the input port "In Behavior" of the main compound.
This interesting compound is in fact a by-product of the development of emFluid3. During development it was important to be able to "see" what the fluid solver is doing, making it easier to find bugs and other annoying stuff. But even now that emFluid3 is (hopefully!) working correctly this compound can come quite handy when dealing with problems concerning the fluid setup.
Important: please be sure that the particle display is set to "automatic" when using this compound!
The content of the grid cells is visualized by particles that have a certain size, color, shape and orientation. Having a particle display of for example "points" would override those properties and corrupt the visualization.
1) The parameters in the group "Visualization of the Solver's Grid Cells":
These parameters let you fade in/out one or more of the solver's grid contents. For example you could literally look at the fuel or velocity grid. Being able to watch those grids can be extremely helpful when your setup is not working for some reason.
Note that you can use values greater than 1.
2) The parameters in the group "Offset":
These parameters let you offset the grid data visualization in x, y and z, so that you can place the grid data next to the fluid box. Just give it a try!
3) The parameter "Delete Particle at Age Limit":
This parameter (which is "on" by default) will perform a "Delete Particle at Age Limit" in the main compound. This can be turned off if you already have a "Delete Particle at Age Limit" somewhere in your ICE Tree.
4) Take a look at these two short video tutorials to see this compound in action.

This is a special compound that will combine all the data emitters and pass them to the main node.
Both output ports must be connected to the main compound and the compound "emFluid3 ___ Emit Settings" must be connected to the input port "In Settings" (see above picture).
You can plug as many data emitter compounds ("emFluid3 ___ Emit Data from SRT" and "emFluid3 ___ Emit Data from Points") as you wish into this compound.

This compound contains global settings for all data emitters and must be plugged into the "emFluid3 ___ Emit Pass Through" compound.
The available parameters till now are only two global switches to turn on/off all emission from SRT and/or points. More parameters will be available in future releases.

This compound will allow you to add "data" to the fluid box, for example you could add some fuel that will automatically start burning and produce heat and velocity, or you might directly add some velocity to the fluid box.
The data is emitted from the SRT (Scaling/Rotation/Translation) of an object or - in other words - data is emitted at the center of an object. This is a little like painting something in Photoshop using a brush: you choose a type of data (a "color") and "paint" it into the fluid box. Just as in Photoshop you can define a size for the data emitter (= the "brush").
1) "Emitter Settings"
Here you define the position and size of the data emitter. The position is taken directly from the object that is plugged into the "In Name (Position)" port. Some data types as for example velocity will also take the object's rotation.
The data emitter's size is defined by the parameter "Size" (radius). Surplus you can control the emitter's size by checking the parameter "Multiply Size by global Z-Scale", so that the emitter's final size is Size * object's Z-Scale. This way you can control the emitter's size by simply scaling your object in z.
2) "Switches"
These parameters turn on/off the emission of data types.
3) "Rates"
These parameters define the rates at which the different data types are emitted.

Use this compound to emit data from the points of geometry. Any type of geometry can be plugged in here as long as it has some points. Polygon meshes, surface meshes, curves and even other point clouds can be used.
You can plug as many of these compounds into the "emFluid3 ___ Emit Pass Through" compound as you wish.
What this compound does is in fact quite simple: for each point it will simple create a little data emitter (=> theoretically you could emulate this compound by placing an "Emit Data from SRT" at each point of the input geometry).
The compound's parameters are more or less identical to the parameters of the compound "emFluid3 ___ Emit Data from SRT", except for:
1) "Use every Nth Point"
Most often you will want every point to emit data (by setting this parameter to 1), but in some cases it can be better to emit data only from let's say every 10th point of the input geometry. For example you might have a heavy mesh with thousands of points you want to emit data from. In this case using only every let's say 50th point will improve performance whereas the result will nearly be the same.
Note: heavy meshes slow down the whole ICE Tree, because large arrays are built and passed to the emFLuid3 node. To get a better overall performance you might consider using a simplified mesh (i.e. a clone with a "polygon reduction" operator) instead of the original heavy mesh.
2) "Multiply size by Point Size"
If this parameter is checked and your input geometry is a point cloud then the parameter "size" will be multiplied by the size of the points (particles).
3) The parameters concerning the "Velocity" data
Below the parameter "Velocity" are several parameters that define how the velocity data's strength and direction shall be generated for each point. You could for example use the point's velocity vector to define the direction of the velocity data or add some randomness to it.
emFluid3 is not only a simple update of emFluid2, it is in fact a whole new program with many new features and an improvement work flow.
You cannot scale the fluid box during the simulation: The fluid solver works within a container. The size (=the scale) of the container (=fluid box) defines the number of cells for the fluid solver. So, whenever the global size of the container changes the velocity field is reset.
The point cloud should always lay in the world's origin. If this is not the case then particles will probably not behave as expected.
Concerning XSI 7.01 and 7.5
Even though this plug-in works well with these XSI versions, unfortunately there are some known issues: