On these pages you will find a short introduction to the Pyro simulation system, which allows you to calculate fog, clouds, smoke, fire and explosions. For further information on all settings on the Pyro Emitter tag, the Pyro Fuel tag, the Pyro Output object or the Pyro Scene settings linked there, please refer to the respective help pages.
To manage different simulation settings within a scene, use the Simulation Scene object.
Certain phases of a pyro simulation can be saved as a Volume Set, which can then be used as a new initial state of a simulation. In addition, the individual properties of a Volume Set object can be detached as separate Volume objects. These can also be used to define an initial state for a Pyro simulation. In addition, these Volume objects can also be used for meshing, i.e., the conversion of e.g., the simulated density of a Pyro simulation to a polygon object.
To render a Pyro simulation saved as a .vdb sequence, you can use, for example, the Redshift Volume object or the Redshift Pyro Volume material already preconfigured for use with Pyro.
The following topics are covered on this page:
First of all, it may be surprising that we are talking about a fluid simulation here. In fact, the same physical laws apply to gases and liquids, so that similar calculation methods can be used for liquids and also gas movements. In Pyro, however, the focus is clearly on gas simulations due to the parameters provided.
In this type of simulation, a volume is first needed in which the gas is created. The gas is given properties such as density, mass, velocity and temperature. The environment of the Gas Emitter also acquires properties, such as temperature, pressure, or the direction and strength of gravity. With this key data, the simulation can then predict the movement of the gases and suspended solids frame by frame. As with other simulations, it is therefore important that you do not jump back-and-forth in time at will, but that the simulation can run frame by frame from the beginning. However, the simulation can also be stored image-wise in memory or as a cache file, which then enables, for example, the combination of the simulation with meshing generators or rendering with Redshift.
In order to be able to calculate the simulation as quickly as possible, the room (or the simulated air in the area of the Pyro Emitter) is divided into firmly defined cubes, the so-called Voxels. You may already know this principle from the OpenVDB system of the Volume Builder object. The size of these Voxels determines the scale of the simulation, as well as its detail density and memory requirements. The smaller the Voxels become, the more detailed and accurate fire or smoke can be calculated, but the more memory and computing power are also required, which must be kept in mind, especially for larger simulation volumes. Therefore, always choose an adjusted Voxel Size. In addition, there is also the option of deliberately starting with a low-resolution simulation, which is easier to shape and calculate quickly, and then converting it to a higher-resolution version in a second step.
Within each Voxel, it is checked whether there is a significant gas density there, for example. The Voxels communicate with their neighbors, e.g., in order to be able to create new Voxels in the neighborhood in the event of a spreading explosion. Since each Voxel space cube requires memory and processing power, Voxels are only created where the simulation deems it necessary, or where you as the user have defined appropriate limits. This has the advantage that you do not have to define a fixed simulation volume yourself, but the simulation itself determines where Voxels are needed.
For the actual simulation, each Voxel is then subdivided again into smaller units in order to be able to calculate and display the characteristic flows and vortices within a flame or a smoke column. In doing so, we already get a meaningful preview of the simulation in the shaded editor views when playing the simulation, without having to cache or render it beforehand.
If we like the simulation, it can be stored image-wise in RAM or permanently as a cache file. Saved cache files can be loaded directly, without renewed computational effort, into other scenes or even transferred to other 3D programs with which the display of simulation data in vdb format is possible.
Finally, the simulation data can then, of course, be rendered as a single image or animation.
As described above, the simulation requires a volume in which the gas is generated, which in turn acquires properties such as density or temperature. For example, imagine this area as the tip of a match. There, friction generates heat, which then ignites the fuel. A reaction occurs with the oxygen and the wood. Additional heat and, for example, soot are generated, which rises as a plume of smoke.
The task of the Emitter is to first describe the place where such a reaction occurs (head of a match). In addition, the energy density of the location must be described, e.g., how much combustible material (fuel) is present there, how much smoke and how much heat should be generated. The description of the fuel component is optional. For example, we can already describe a candle flame as an Emitter if we only define the temperature at the wick and the amount of soot produced. In practice, this is what this looks like:
First, create or select the object that will be your Emitter for fire or smoke. This object can also be hidden later and therefore does not necessarily have to be a visible part of your models. Often, for example, a simple spherical primitive object can be used as an Emitter. Just make sure that the scaling is reasonable, i.e., that it has realistic dimensions.
The following object types can be used as Emitters:
Assign a Pyro Emitter tag to this object, e.g., via the Tags menu of the Object Manager from the Simulation Tags category. This allows you to define, among other things, the amount and type of Pyro components that should be created (e.g., density for simulating smoke, temperature for simulating fire, and fuel for simulating an explosion). The Pyro Fuel tag can also be found in the same menu, but it is actually identical to the Pyro Emitter tag. On the Pyro Fuel tag, the default settings are only designed to simulate an explosion, whereas on the Pyro Emitter tag, flames and smoke are created by default. However, the Pyro Emitter tag can also be reconfigured to be a Pyro Fuel tag and then generate explosions as well. Likewise, the Pyro Fuel tag can also generate smoke and flames if the corresponding options are enabled there.
Note 1:For all splines and also for polygon objects that do not represent a closed volume (such as objects with holes or a simple plane), the Surface option must be enabled on the Pyro Emitter Tag. The Thickness parameter can then also be used to form a volume for such objects in which the Pyro simulation generates hot gas or smoke, for example.
Note 2:When using particles or the MoGraph Matrix object, the Points mode must be enabled on the Pyro Emitter tag. This allows you to define a radius around the positions of the particles or matrices in which Pyro elements are then to be generated in each case. The use of particles can offer additional options, since there, for example, the particle size or - in the case of Thinking Particles - also the color, can be directly transferred to the Pyro simulation. The same applies to the colors of the MoGraph Matrix object.
Note 3:It is not mandatory to use the whole object as Emitter. By assigning Vertex Map tags, Vertex Color tags, or polygon Selection tags, you can restrict the area of an object used for emitting (for example, a torch that should burn only at the top). More information can be found here.
Together with the Pyro Emitter tag, a Pyro Output object is automatically created, at which you can then later select, for example, the properties of the simulation that you want to store as a cache. This is necessary for rendering the simulation with Redshift, but can also be used for passing the simulation to other programs.
Note:If the Pyro Output object has been accidentally deleted, it can be created again using the Create Output Object button in the Pyro settings of the Project Preferences.
At the Pyro Output object, in the Pyro Scene tab, you will find a link to the Pyro Simulation Settings, which are taken from the Project Preferences. There you can find all important simulation settings, such as the Voxel Size already mentioned at the beginning, which significantly influences the level of detail, simulation speed and memory requirements. The Pyro Emitter tag is only responsible for the Emitter and the Pyro Scene settings linked at the Pyro Output object for the calculation of the actual simulation.
If you now run the animation frame-by-frame by pressing the Play Forward function, you will already see the generation of fire and smoke on your object. Note that the behavior and the level of detail of the simulation (as well as its memory requirements) depend very much on the given Voxel Size.
For clarification, the following images show once again the relationship between Pyro Emitter tag, Pyro Output object and the Pyro simulation settings linked in it, already described above. The following figure shows the default case. An object (here a cube) was assigned the Pyro Emitter tag. This creates a Pyro Output object in the scene. Here you will find the Pyro Scene tab in addition to the various cache options. By default, the Pyro simulation settings are linked there, the values of which are taken from Cinema 4D's Project Settings.
A second option is to create a Simulation Scene object from the Cinema 4D Simulate menu. This can be dragged and dropped into the Scene field of the Pyro Scene settings on the Pyro Output object. This will then use the Pyro simulation settings available on the Simulation Scene object. The Pyro settings from the Project Settings then no longer play a role for this simulation.
Since there can be any number of Simulation Scene objects in the scene, they allow the management of different simulation settings that can be easily assigned to the Pyro Output object via drag and drop.
What is missing now is a link between the Pyro simulation settings and the Pyro Emitter tags that should access them. For this purpose, an Elements field is available in the Scene tab of the Simulation Scene object, as well as in the Project Settings. Drag all Pyro Emitter tags (i.e., only the corresponding tags, not the objects) that should use these simulation settings into that list. The following image illustrates this as an example.
By the way, in the same area you will also find a Forces list, where you can link the Force objects that should act on the corresponding Pyro simulation (see also the following figure).
Finally, you can also read directly from the name of the Pyro Output object which simulation settings have been linked in it. With a Pyro Scene link to the Project Settings, the name attachment appears there (Default). If a Simulation Scene object was used, its name appears as an attachment to the Pyro Output object. This can also be seen in the following image.
Another effect of using Simulation Scene objects is that it allows you to create simulations that are independent of each other. With the default approach of assigning Pyro Emitter tags to different objects in the scene, these objects become Emitters for the same Pyro simulation. Thus, all gases simulated in the vicinity of these Pyro Emitters interact with each other, since all simulations are defined using the same settings.
If, on the other hand, completely independent simulations are to be created, each Pyro Emitter tag must be linked via its own Pyro Output object with independent Pyro simulation settings (i.e., mainly Simulation Scene objects).
It is in the nature of physical simulations that they evolve from a defined initial state. For example, in Pyro simulations, by default a cloud slowly emerges from the surface or volume of an object assigned the Pyro Emitter tag. Fuel quantities, temperatures, the density and velocities are set at the Emitter, which are then responsible for the subsequent distribution and movement of the simulation. However, there are also many projects where a certain distribution, e.g., of a Pyro cloud, must already be present from the first animation frame and therefore there is no time for the cloud to initially spread out frame by frame starting from an Emitter. In these cases, an Initial State can be saved. If you have ever worked with a cloth simulation, you already know this principle.
To do this, you first set the desired properties on the Pyro Emitter tag and the associated Pyro Scene settings as usual, and then run the simulation until you reach the animation image that you need as the initial state for the simulation.
By pressing the Set Initial State button within the Pyro Scene settings, the current state of the Pyro simulation can then be saved. A new Volume Set object appears in the scene and lists all Pyro properties that have been noted as the initial state. The type and number of these properties depends on what was enabled for the simulation on the Pyro Emitter tag. By default, these are the properties of density, temperature and velocity. Creating the Volume Set object automatically causes the Pyro properties stored in it to be saved as a .vdb file in your project's directory. This makes it possible to access this frozen Pyro state in other projects as well.
If you now run the animation again from frame 0, the saved initial state will appear directly, and the simulation will continue to develop starting from this state and depending on the settings on the Pyro Emitter tag and in the Pyro Scene. Of course, this can also be used for exciting effects, e.g., if the simulation uses completely different values or even Emitter shapes for the creation of the initial state than the simulation that is assigned this initial state. So it does not necessarily have to be the same simulation,