Making Fire with ICE: A Particle Walkthrough

The following is a simple example of how you can create a basic fire using ICE particles. This is designed to show you where things are in the ICE tree and get you comfortable with connecting nodes together and editing properties.

If you want, you can take it further and create a compound of your connected nodes and/or use particle shaders on your fire.

But first things first: go through the steps below to complete the fire, then take a look at how things are connected in A Closer Look at the ICE Tree.

 

To make fire with ICE particles

1. Create a polygon mesh disc and make its inner radius smaller so that it’s almost closed. This is the particle emitter.

2. Emit particles from the disc by choosing ICE > Create > Emit Particles from Selection on the Simulate toolbar.

This automatically creates a point cloud and sets up the node and compound connections in the ICE Tree that are needed to emit particles.

The point cloud exists, but no particles are emitted on the first frame. Click the play button in the playback controls below the timeline to see the particles being emitted.

By default, they’re small yellow points. You’ll also notice a bounding box around the particles to indicate that the point cloud is selected.

 

3. With the point cloud selected, open the ICE tree by choosing ICE > Edit > Open ICE Tree from the Simulate toolbar or pressing Alt+9.

4. The ICE tree has a large graph area in the center where you drag in compounds and nodes and connect them together.

As you can see, there are four nodes already connected for you: the emitter’s Get Data node, the Emit from Surface compound, the Simulate Particles node, and the ICETree node. These are all explained later in A Closer Look at the ICE Tree.

 

Nodes are represented as boxes with rounded edges, containing ports which are displayed as small, colored circles. Base nodes are operators working on the lowest level of object data, while compounds are collectives of nodes and possibly other compounds. Compounds are often referred to generically as nodes when they’re in the ICE tree because they look the same as base nodes.

Ports on the left side of the boxes are input ports, while the ones on the right side are output ports. As you can see, each node can have one or more input and output ports.

On the left side of the ICE Tree is the preset manager, which houses all the compounds and nodes.

For more information on the ICE tree and all its parts, see The ICE Tree View.

5. In the ICE Tree, double-click the Emit from Surface compound to open its property editor. In it, set these parameters to these values to define how the particles will look and act when they are emitted:

Rate

1000 (particles per second)

Size

0.2 - 0.5, depending on the Shape you choose.

Shape

Set it to any shape you like for display, such as Sphere or Cone.

Select Emit Direction

Set it to Use Initial Direction Vector.

Direction

-1 in Y (this seems unintuitive right now, but it works when forces and turbulence are added later)

Speed

0 (the particles stay on the emitter for now, but they will be moved by forces later)

6. From the preset manager on the left, click the Task tab at the top, then select Particles from the drop-down list. This opens the Particles tab which contains all the compounds directly related to creating particle effects.

 

7. Under the Emission Control group, select the Set Particle Age Limit compound and drag it into the white area (the view). This creates a node for it.

As its name indicates, this compound limits the life span of the particles. If you don’t put a limit on their age, particles stay in the scene throughout the whole simulation.

8. Click on this compound’s gray circle (output port) called Execute and drag toward the gray circle (input port) called Execute on Emit on the Emit from Surface compound.

Release the mouse when the Execute on Emit label looks highlighted—this means that the ports are connected.

 

You can connect ports together only if their data matches in type and context. For details on what this means, see Connecting ICE Nodes.

Normally, you would now open the Set Particle Age Limit compound’s property editor and set the particles life span value (in seconds) there. However, you’re going to drive the age limit with another compound called Turbulize Around Value.

9. In the Modifiers group in the preset manager, select the Turbulize Around Value compound and drag it into the tree area. This compound randomizes the particle’s age limit using a turbulence field so that the particle lifetimes are not too uniform as they’re emitted.

10. Plug this compound’s Value output into the Age Limit port on the Set Particle Age Limit compound.

11. Open the Turbulence Around Value compound’s property editor and set these values (you can leave the others as is):

Base Value
(This makes half a second the average age limit)

0.5

Variance
(Amount of variation on either side of the Base Value)

1

Turbulence Scale

3.5

Animated option

On

Animation Speed

0.3

Complexity

1

For an explanation of each parameter here, click the ? icon in the property editor to open up the online help for this topic.

12. In the Deleting Particles group in the preset manager, select Delete Particle at Age Limit and drag it into the tree area. This compound does what its name suggests.

13. Plug this compound’s Execute output into Port2 on the ICETree node.

 

When you plug compounds into the ICETree node, their output gets evaluated at every frame. When you plug compounds into any of the Emit compounds, their output is evaluated only once, upon particle emission.

Now to add some force to make those particles move!

14. In the Forces group in the preset manager, select Add Forces and drag it into the tree area. This compound is a hub for other forces, whose values it blends together and then outputs into the ICETree node.

15. You need to make some more ports on the ICETree node, so right-click on Port3 and choose Insert Port Before.

16. Plug the Add Forces compound’s Execute output into Port3 on the ICETree node.

17. In the Modifiers group in the preset manager, select the Turbulize Around Value compound again and drag it into the tree area. This time, you’re going to drive the force value with a turbulence field so that it has a nice random movement.

18. Plug this compound’s Value output into the Force1 port on the Add Forces compound. If there was another force plugged into the Add Forces compound, it would blend that with the Turbulence value and create one output.

19. Double-click this Turbulence Around Value compound to open its property editor and set these values (you can leave the others as is):

Base Value
(this is the force moving the flames upward)

1.5 in Y

Variance

2.5 in Y; 1 in both X and Z

Turbulence Scale

3

Animated option

On

Animation Speed

1

Complexity

1

The particles are moving upward in a random way when you play the simulation.

And finally, add some color:

20. In the Modifiers group, select the Modify Particle Color compound and drag it into the tree area. This lets you change the color of the particle at every frame.

21. Make a new port above Port4 on the ICETree node, then plug the Modify Particle Color compound’s Execute output into Port4.

22. Double-click the Modify Particle Color compound to open its property editor, and change the Source Parameter to be Age Percentage. This uses the color gradient for the duration of the particle’s life.

Set these values on the color gradient:

 

The colors you set for the particles in the ICE tree are only for display in the viewport. When you render the particles, you can set it up so that the shaders use this color for rendering, but you can also set up the colors separately in the shaders.

This is what your final result should look like, depending on how many variations you made to the parameters.

 

This exercise was designed to help you get used to working in the ICE tree and seeing how a few basic compounds work in order to create an effect. However, you can continue tweaking the parameters here, adding more compounds to the tree, and rendering the final look with particle shaders.

Whats Next?

• If you want more information on each of the compounds you’ve used in creating this fire, see below in A Closer Look at the ICE Tree.

• If you want to continue and create a compound of your own using this ICE tree you just created, see Creating Your Own ICE Particle Compound.

• If you want to continue and render your fire using ICE particle shaders, see Making Fire with ICE, Part II: Rendering the Flames.

A Closer Look at the ICE Tree

Now let’s look more closely at this masterpiece you’ve just created in order to understand the different pieces of the ICE tree. Data is processed from each node and compound from left to right in an ICE tree, all ending up in the ICETree node.

 

Here’s a description of each of the ICE particle system elements:

1

The ICETree node is the main node in an ICE tree. Because this is a particle simulation, the ICETree node is simulated. At each frame, it processes all nodes and compounds that are connected to its ports, from top to bottom. In this example, particle emission is done first, then particles are deleted, then forces are set, then colors are modified, and finally, the particle simulation is calculated.

See The Simulation Region and the ICETree Node for more information.

2

The disc is the particle emitter object: nothing more than that. The Get Data node that is created for it simply does that: gets the disc’s object data from the scene so that it can be used in the ICE tree.

3

The Emit from Surface compound is responsible for emitting the particles. At every frame, it adds points and sets their properties such as size, color, velocity, mass, shape, etc. It has a port called Execute on Emit: whatever node or compound is connected to that port only modifies the particles that have been emitted at that frame (new particles), never on particles that existed at a previous frame.

The Emit compounds are always plugged into the top of the ICETree node in a particle simulation because you need to emit the particles before anything else can happen to them.

See Creating ICE Particle Emissions for more information.

4

The Simulate Particles node updates the position and velocity of each particle at each frame based on its mass, position, and velocity (based on the forces affecting them) of the previous frame. Updating each frame based on the previous frame is what makes the particles simulated.

The Simulate Particles node is usually plugged into the bottom of the ICETree node because it needs to take all information from the compounds that precede it and then use that information to update each particle at each frame.

5

The Set Particle Age Limit compound sets the age limit of the particle when it is born. This determines how long the particle will live, in number of seconds or frames. Setting the particle age limit is not enough to delete the particle, however; you need another compound to do that - see 7 below.

You plug it into the Emit compound because you want this information to be set each time a new particle is born, but not reset every frame.

See ICE Particle Lifespan for more information.

6

The Turbulize Around Value compound adds noise as a turbulence field to the age limit of the particles, driving the age limit value. If you had another value entered for the Age Limit, it’s overwritten by this compound’s value.

Turbulence is great to use with many types of physical effects because it creates a noise pattern that helps particles look more natural. In this case, it makes it look as if the flames are flickering.

See Modifying ICE Particle Values for more information.

7

The Delete Particle at Age Limit compound deletes the particles when they reach their age limit, as you’ve set up in 5 and 6 above. The age limit is set at birth based on a turbulence field values so the particles appear to be deleted in “waves”, creating long and short flames.

You plug this into the ICETree node because you want it to be evaluated at every frame. And you plug it into the ICETree below the Emit compound but before the Simulate Particles node because it has to happen after the particles are emitted but before the particles are updated at each frame.

 

8

The Add Forces compound is a hub for other forces to be connected into it. It adds up the values of all those forces and then outputs a single vector value to the ICETree node. In this example, only the Turbulence value described in 9 is setting the force, but you could easily add other forces, such as a wind.

The Simulate Particles node moves the particles by getting the force vector on each particle via Add Forces and then updating the particle’s position and velocity at every frame.

See ICE Forces for more information.

 

9

And another Turbulize Around Value compound! This time, it’s using a turbulence field to drive the particles in an upward direction, creating a nice random movement to the fire.

You’ll notice in ICE that you can the same node or compound in different ways, depending on where it’s plugged in. For forces, any port that returns a 3D vector can be used to define a force: just plug it into the Add Forces compound.

Note that you can also use the standard force objects (available from the Get > Forces menu on the Simulate toolbar) in the ICE tree.

See Turbulizing Particle Values for more information on the available Turbulize compounds.

 

10

The Modify Particle Color compound sets the color of the particle based on its age percentage (what percentage of its life it has already lived) and a color gradient.

See ICE Particle Color for more information.

Creating Your Own ICE Particle Compound

Because you’ve made such a beautiful fire effect, you want to share it with the world! You can do this by creating a compound containing all the compounds and nodes you’ve used in this ICE tree.

These next steps quickly show how you can create a compound. These steps are brief, but for more information on creating compounds, make sure to see Building ICE Compounds.

First, you need to create an Execute node to substitute the place of the ICETree node because you can’t store the ICETree node in a compound:

1. In the ICE Tree view, right-click the ICETree node and choose Insert Execute Node.

This creates an Execute node that receives all the inputs that were previously plugged into the ICETree node, and in turn, it is plugged into the ICETree node. How easy was that!

 

2. Select all the nodes and compounds you want to save in your new compound, including the Execute node. You can rectangle-select or press Ctrl or Shift as you add compounds.

To keep the compound generic, you should leave out the emitter object node (Get Disc) so that you can apply this fire effect to any particle emitter.

3. From the ICE Tree toolbar, choose Compounds > Create Compound.

And poof! All the compounds and nodes disappear from view, and you’re left with a generic compound named CompoundNode. It contains all the compounds and nodes that have just disappeared.

 

Congratulations, you have just created your first compound (and it didn’t even hurt that much).

4. Move the cursor over your new compound and click the little “e” in the upper-left corner. This opens up the compound for editing so that you can start exposing ports for it.

 

You now want to expose the different ports from the compounds inside to make only those parameters visible and editable.

The blue bar on the left shows all exposed ports for your compound. The only port that is currently exposed is the Emitter port coming from the Emit from Surface compound.

Before you start exposing other ports, you need to decide on what you really want to be able to change in your compound. In this exercise, just try exposing a few ports to get the hang of it.

 

5. To include a port in the bar, click the black circle beside Expose Input and drag it to a port that you want to expose. The port is then included on the blue bar.

 

6. You can rename this exposed port by either double-clicking on the name, or right-clicking on it and choosing Rename, then entering a new name. This is what the name of the parameter will be in your compound in the ICE tree and in its property editor.

 

7. In the bar at the top, double-click where CompoundNode is written and give your compound a descriptive name, such as Campfire.

You can add a group name for the Category, which will make your compound show up in that group on the Tool tab in the preset manager.

Or you can include a Task name for your compound to put it on the Task tab in the preset manager. You can also include a subtask name to create a group for it on that tab. For example, to create a group called Fires on the Task > Particles tab, enter this as the Tasks name: Particles/Fires.

 

If you like, you can add comments to your compound to document how everything inside it works. See Documenting Trees: Groups and Comments for information.

8. Click the little x in the upper-left corner to close the compound and return to the regular ICE tree. You’ll see your new compound with the ports you exposed and the name you gave it.

 

As final step, you can export your compound to make it available to others, and in the preset manager.

9. Select your compound node and choose Compounds > Export Compound from the ICE Tree toolbar to export your compound. See Exporting Compounds for more information.

And you’re done!



Autodesk Softimage v.7.5