Smoke simulation is a subset of the fluids system, and can be used for simulating collections of airborne solids, liquid particulates and gases, such as those that make up smoke. It simulates the fluid movement of air and generates animated voxel textures representing the density, heat, and velocity of other fluids or suspended particles (e.g. smoke) which can be used for rendering.
Smoke and fire are emitted into a Domain from a mesh object or particle system. Smoke movement is controlled by airflow inside the domain, which can be influenced by smoke collision objects. Smoke will also be affected by the scene’s gravity and force fields. Airflow inside the domain can affect other physics simulations via the Smoke Flow force field.
Create a Domain Object that defines the bounds of the simulation volume.
Define a Flow object or objects which will emit smoke and fire.
Set Collision objects to make the smoke interact with objects in the scene.
Assign a Volumetric material to the domain object.
Save the blend-file.
Bake the simulation.
There is a Quick Smoke operator which will automatically create a domain object with a basic smoke/fire material. It can be found in, or with the operator search menu F3.
Blender’s smoke simulation is based on the paper Wavelet Turbulence for Fluid Simulation and associated sample code.