The reason that FumeFX can accurately simulate the behavior of fire and smoke is because it is based on the laws of fluid dynamics. This means that you can now mimic real combustion without studying physics. Still, in order to understand the basic concepts behind FumeFX, it may help to spend a brief moment to consider the influence of physics on the program’s design.
To begin, fluid gases, such as fire and smoke, do not have a set size or shape. So, in physics, a fluid is generally regarded as a continuum, rather than as a bunch of individual molecules. FumeFX approaches fluid from the same viewpoint; it operates on an adaptive 3D grid of voxels (volumetric pixels), which mimics a continuum of fluid. This grid expands and shrinks with the movement or absence of fluid. Also, in the real world combustion is a combination of fuel, temperature, smoke, and velocity; accordingly these are the same properties that affect your simulation in FumeFX. Their values are defined in each voxel of the FumeFX grid. And, of course, external forces, such as gravity or solid objects, can also be used to influence your effects. These combined parameters will determine how your simulation behaves.
So, for example, smoke is affected by gravity and temperature is affected by buoyancy. The higher the temperature of the smoke, the faster it will rise, depending on buoyancy parameter. And, the denser the smoke is, the faster it will fall, depending on the force of gravity.
Of course, physics aside, FumeFX also includes a wide array of options that allow you control the rendered appearance of your simulation. These include parameters such as colors, opacity, and shadows, all of which allow you to tailor your effect to your aesthetic needs.
The FumeFX Grid
The FumeFX grid is a core element of FumeFX. It consists of an area of voxels that will be affected by simulation. By choosing the size of this grid, you set the maximum limits for the simulation area. Within the boundaries of this space, an adaptive grid expands and shrinks to contain just those voxels that are producing fluid.
Grid detail level is set with grid spacing. If you cut the spacing in half, you will increase detail, but also dramatically increase the size, memory, and time required for simulation.
You add this grid into your scene from the main Command Panel in 3ds Max. To do this, first choose the Create Geometry icon; then, select FumeFX from the drop down menu of categories. Now you can click and drag in the active viewport to create the grid.
The FumeFX Grid
To learn more about the FumeFX Grid and its controls, click here.
Where the FumeFX Grid handles all of the heavy lifting once a scene has been set up and is ready for simulation, the system can't do anything without sources to simulate with. Sources in FumeFX define everything from a point of origin for the simulation to begin (the "fire starter"), to more complex collision objects and forces (like Wind and Gravity) that will react with the simulation as it progresses.
Unlike particle based effects which fake smoke and fire behavior, FumeFX uses true physics so that selected objects can spontaneously burst into flame and react to other scene. These sources are the building blocks upon which simulations are built.
In order to associate objects with FumeFX, you create helpers to make the simulation engine "aware" of the selected objects within the FumeFX Grid volume. These non-rendering helpers have additional parameters associated with them so that users can fine tune how the source will affect the final simulation.
Simple Source, Object Source, Particle Source, FumeFX Source, Effector, Void Source, Gravity and Spline Follow.
To learn more about FumeFX Sources, click here.
Simulations are created through the calculations of the FumeFX solver. This proceeds in steps that correspond to 3ds Max frames; or, if you require greater accuracy and stability, it can also simulate in multiple steps per frame.
Simulation stems from whatever object that you pick as your FumeFX Object Source. In the parameters for this source, you will choose the values for smoke, temperature, fire, and velocity – the main elements of simulation. During simulation these values are set at every voxel that the source touches.
At the beginning of each step, the FumeFX solver applies any external influences that are within the boundaries of the grid. These can be FumeFX sources that add fire, smoke or movement; space warps that will force fluid movement similar to the way in which they force particles; or even solid objects that block or interrupt fluid movement. Then, forces such as gravity and buoyancy are applied. And finally, “post-processing” is done; this is where forces such as dissipation and diffusion are applied, fuel is burned and smoke is created.
The results of the simulation are saved at the end of each step in files – with the extension “.fxd” – that remember the values for each voxel within the FumeFX grid. Simulation is done with floating point precision; output files are saved with half that precision. You will need a lot of disk space for long and detailed simulations, perhaps tens of Gigabytes (see Memory Requirements for more details).
After the simulation is finished and caches saved, it is possible to further refine the existing simulation by adding details using Wavelet Turbulence mode. Wavelet mode operates on the Default mode caches by upscaling them and applying procedurally generated detail and swirling.
As a final step, it is possible to optimize caches and even to retime them by using Retimer mode.
Memory requirements and recommendations
FumeFX operates on three-dimensional grid of voxels; accordingly, a grid of 10x10x10 means 1000 voxels. Each voxel requires one float (4 bytes) per Smoke, Temperature, or Fuel/Fire channel, or three floats (12 bytes) per Velocity or Fluid Mapping channel.
During simulation, FumeFX uses approximately double the memory than is needed for output of the results. And, you will need roughly twice that amount, should you choose to export texture coordinates. Memory usage of the simulation is displayed on the status window while the simulation runs.