This page provides a tutorial on creating a Dust Devil simulation with Chaos Phoenix in 3ds Max.

Overview


This is an Intermediate Level tutorial. Even though no previous knowledge of Phoenix is required to follow along, re-purposing the setup shown here to another shot may require a deeper understanding of the host platform's tools, and some modifications of the simulation settings.

We start off the tutorial by creating a poly plane and using the Large Scale Smoke preset to generate the Phoenix Source and Simulator. The funnel shape of the dust devil is achieved through the use of an animated 3ds Max Vortex force. Phoenix Turbulence force is used to further break-up the smoke shape. Finally, we tweak the Volumetric Rendering parameters of the Phoenix Simulator for a final render. A Time-Bend Resimulation guide is also provided as an extra option at the end of this tutorial.

The simulation requires Phoenix 4.41 Official Release and V-Ray 5 Update 2.3 Official Release for 3ds Max 2018 or later. You can download official Phoenix and V-Ray from https://download.chaos.com. If you notice a major difference between the results shown here and the behavior of your setup, please reach us using the Support Form.

The Download button below provides you with an archive containing the start and end scenes.

 

Download Project Files

 

Units Setup


Scale is crucial for the behavior of any simulation. The real-world size of the Simulator in units is important for the simulation dynamics. Large-scale simulations appear to move more slowly, while mid-to-small scale simulations have lots of vigorous movement. When you create your Simulator, you must check the Grid rollout where the real-world extents of the Simulator are shown. If the size of the Simulator in the scene cannot be changed, you can cheat the solver into working as if the scale is larger or smaller by changing the Scene Scale option in the Grid rollout.

The Phoenix solver is not affected by how you choose to view the Display Unit Scale - it is just a matter of convenience.

The dust devil effect we're creating is about 1 meter in height so we choose to view the units as Centimeters.

Go to Customize → Units Setup and set Display Unit Scale to Metric Centimeters.

Also, set the System Units such that 1 Unit equals 1 Centimeter.

 

Scene Layout


The final scene consists of the following elements:

  1. A shelled Poly Plane used as the smoke source geometry. An animated Noise modifier is applied to the plane to break-up the emission and produce interesting swirls.
  2. A Phoenix Fire/Smoke Source with the Poly Plane in its Emitter Nodes list. A Radial Gradient texture is used as an Outgoing Velocity mask to produce smoother emission at the edges of the poly plane.
  3. A Phoenix Fire/Smoke Simulator generated by the Large Scale Smoke preset with some tweaks in the Grid, Dynamics and Rendering rollouts.
  4. A 3ds Max Vortex force responsible for creating the funnel. The position of the vortex force is animated which gives the dust devil a more chaotic, realistic appearance.
  5. A Phoenix Turbulence force to break-up the smoke even further. As the purpose of the turbulence is to create large-scale motion, its Size parameter is set to a rather high value.
  6. A V-Ray Sun Light for direct lighting.
  7. A V-Ray Dome Light for ambient lighting.
  8. A V-Ray Physical camera with minor tweaks for final rendering.

 

 

Scene Setup


Set the Time Configuration → Animation Length to 200 so that the Timeslider goes from 0 to 200.

If you need any geometry animation that should interact with the simulation, prepare the animation at this step. After we're done with the basic simulation, we will rescale the timeline to slow down any animation present in the scene and we will use the Resimulation option to slow down the smoke simulation as well.

 


 

Create a Standard Primitives → Plane. The plane is used as the emission object for the smoke.

Set its Length/Width to 480cm/540cm and increase the Length/Width Segments to 10/10.

 


 

Apply a Shell modifier to the plane and leave the Outer Amount at its default value of 1.

Using open geometry or geometry with no thickness (such as the plane in this example) can give you unpredictable simulation results. Making sure that your geometry is clean is crucial for a smooth workflow. Phoenix (and many simulation packages in general) use a volumetric representation of the emission geometry for the simulation. The process of creating this volumetric representation is called voxelization. The algorithms responsible for voxelizing the geometry can fail when using open (with holes) or planar (no thickness) geometry.

The Shell modifier is applied here to turn the plane into what is essentially a very thin box. This is enough to sort out any possible problems with the voxelization at simulation time.

 

 

Phoenix Setup


Select the shelled Plane and left-click the Large Scale Smoke preset icon.

This will generate an entire setup for you consisting of a Phoenix Fire/Smoke Simulator and a Phoenix Fire/Smoke Source. The preset will automatically link the Plane to the Phoenix Source, adding it into the Source's Emitter Nodes list.

 


 

Phoenix provides a high-quality GPU Preview directly in the 3ds Max Viewport which should be enabled by default by the Large Scale Smoke preset.

You may want to disable it if you're working through a Remote Desktop connection or on a machine with integrated graphics.

To do so, go to the Preview rollout → GPU preview section → Enable in Viewport.

 


 

Here's how the simulation looks so far. There are a few things to address:

  1. The smoke is going straight up instead of twisting the way a dust devil would. We resolve this first by adding a 3ds Max Vortex force and tweaking its settings.
  2. The smoke emission is too symmetric and produces a mushroom - we resolve this by modulating the emission with a Gradient texture.
  3. The entire poly plane is emitting smoke instead of only the top faces - this can be resolved by assigning the top faces a unique Polygon ID and specifying that in the Phoenix Source.



Adding the Vortex Force


Create a Space Warps → Forces → Vortex force. Phoenix will automatically recognize and use it during the simulation unless you choose to put it in the Simulator → Scene Interaction → Exclude List.

Set the Axial Drop and Orbital Speed parameters to 6.
Set the Radial Pull to 1.5.

To produce a funnel shape that doesn't either spin outwards uncontrollably or collapse in on itself, you need to find a balance between the Radial Pull and the Orbital Speed. The provided values work for this example but if you are using a different setup, you may need to tweak the parameters until you get the desired shape.

Set the Time Off to 200, or however many frames your simulation length is.

Set the Taper Length parameter to 0 - this parameter can be useful for controlling the height of the vortex but it tends to be easier to only use the options in the Capture and Motion section.

Make sure to rotate the Vortex force gizmo 180 degrees in Y such that the arrow is pointing up in the +Z direction.

 


 

Phoenix allows you to preview the velocities that an external force will add into the simulation. Because the Forces preview feature is fully interactive and does not require you to run a simulation, this can be especially useful when tweaking the parameters.

To specify the force you'd like to preview, go to the Simulator → Preview rollout and enable Forces under the Voxel Preview section.

Use the Add button to include the Vortex force into the Forces Preview List. If the grid of arrows is too dense, increase the Detail Reduction parameter - this will give you a sparser preview of the velocities represented as arrows.

Simulator → Preview → GPU Preview needs to be disabled for the Force preview to show up.

 


 

If you run the simulation now, you'd notice that the Vortex force has a minor impact on the simulation.

Note the vertical speed of the smoke - this is caused by the high temperature coming into the simulation from the Phoenix Source.

This, coupled with a high Smoke Buoyancy value, forces the smoke upwards and partially negates the effect of the Vortex force.

 


 

Select the Phoenix Source and set the Temperature to 300.

The higher the temperature is, the faster the smoke will rise. Phoenix uses physically correct temperature values for its calculations so setting this to 300 Kelvin means the smoke will behave as if its at room temperature. If you were to reduce the temperature further, the smoke would start falling down - this can be quite useful for dust, sand or dry ice simulations. You can find out more about Phoenix Grid Channel Ranges here.

 


 

In the Grid rollout of the Phoenix Simulator, set the Scene Scale to 1. The Scene Scale will have a major impact on all the dynamics in the simulation - reducing this value will make the smoke less inert and more sensitive to the effect of the Vortex force. It will also allow for the formation of fine small-scale details.

Open the Dynamics rollout and set the Smoke Buoyancy to 0. This parameter controls the rising speed of the smoke - the higher this value is, the faster the smoke will rise up. For this example, we need the Vortex force to govern the vertical speed of the smoke so we set the Buoyancy to 0.

 


 

Here's how the simulation looks now.

The smoke is still too dense and produces a mushroom at the top.

We address this next by tweaking the Phoenix Source and the emission geometry.

 

 

Converting from mushroom to a twister


Let's first limit the emission to the top faces of the shelled poly plane.

There are 3 ways to go about this - using a Discharge Modifier on the Phoenix Source, using emission from Vertex Color in the Source, or setting a unique polygon ID for the faces of the geometry to emit from and feeding it to the Source.

We will use the Polygon ID technique for convenience. You can find more information on Discharge Modifiers in the Discharge Modifiers Documentation.

 

Select the Shelled Poly Plane and add an Edit Poly modifier. Go into face selection mode and select the top faces of the geometry.

Use the Set ID field to give them an ID of 2.

You may also choose to only do this for a portion of the top faces instead - check the screenshot to the right.

 


 

Select the Phoenix Source and set the Polygon ID parameter at the bottom to 2.

Set the Noise parameter to 2 - this will break-up the emission by modulating the Outgoing Velocity.

Increase the Outgoing Velocity to 500 so a greater amount of smoke is emitted into the simulation.

Increase the Smoke parameter to 2 - this will cause the emitter to produce thicker smoke.

Note that those parameters are simply an artistic choice and in no way set it stone - you may tweak them as you see fit.

 


 

Here's how things are looking.

The mushroom is no longer there but we still need to address the sharp edges produced by the profile of the emission geometry.

We can do that by using a Radial texture as the Outgoing Velocity mask for the Phoenix Source.

 


 

Open the Material Editor and create a Gradient texture.

Set the Gradient Type to Radial and Left-Mouse-Button click and drag from the Gradient texture output to the Outgoing Velocity Mask parameter of the Phoenix Source.

If you'd like to preview the texture on your geometry, you could simply assign a material to the plane and hook up the texture to the Diffuse slot.

 


 

The funnel is now starting to take shape.

We are now ready to start tweaking the Phoenix Simulator properties.

 

 

Phoenix Simulator Properties


Select the Phoenix Simulator and open the Grid rollout.

Set the Boundary Conditions: Z to Jammed (-). This will cause the bottom wall of the simulator to act as a solid obstacle, allowing us to use it as the ground.

Set the Cell Size to 8 to increase the resolution of the grid.

Set the X/Y/ Z size to 80/80/20.

The Adaptive Grid option should be set to Smoke by the Large Scale Smoke Preset. The Adaptive Grid allows the container to resize on-demand as the simulation progresses, saving you a lot of time. Instead of calculating a giant grid from the start, a specific channel is tracked (Smoke in this case) and the grid is automatically resized around it.

Enable Maximum Expansion and set the X/Y/Z dimensions according to your needs. Because the Z axis is Jammed in the negative Z direction, the Z(-) field is left at 0. 

Set the Extra Margin to 10 - this option allows the adaptation to keep a number of voxels close to the walls as a buffer zone and expand the grid earlier than usual. This can be especially useful when simulating fast-moving objects or explosions as it allows the simulator to expand before any clipping occurs. 

 

If you run the simulation and there is no smoking coming out of your emission geometry, please make sure that the geometry is inside the simulator.

If you are following along this tutorial and using the provided project files, move the emission geometry 10 units up in the Z axis, or move the Simulator 10 units down.

 

 


 

Open the Dynamics rollout and set the Smoke Dissipation to 0.1. This parameter controls how fast the smoke will thin-out and disappear as the simulation progresses. Feel free to experiment with this value if you'd like the dust devil to appear sparser.

Set the Conservation → Quality to 20. The lower conservation quality will produce a more chaotic appearance.

 


 

Here's how the simulation looks with those tweaks.

The motion of the funnel is interesting enough, and it seems to be forming properly.

However, the simulation feels static. In real life, a dust devil forms spontaneously and chaotically moves all over the place. Our funnel, on the other hand, is simply sitting there and rotating.

In the next step, we will make the simulation more dynamics by animating the position of the Vortex field, and adding a Noise modifier to the emission poly plane geometry.

 

 

Making the simulation more dynamic


Select the Vortex force and animate its position such that it moves in the XY plane inside the simulator.

Here are the exact keyframes in case you'd like your setup to be identical to this tutorial:

Frame 0:

X: -240
Y: 230
Z: -20

Frame 70:

X: 3
Y: -70
Z: -20

Frame 130:

X: 40
Y: 10
Z: -20

Frame 200:

X: -310
Y: -370
Z: -20

 


 

Add a Noise modifier to the shelled Poly Plane.

Set the Scale to 135, and the X/Y/Z Strength to 70/127/160.

Make sure to Enable the Animate Noise option.

You may also open the Graph Editors → Track View - Curve Editor and set the tangents for the Phase parameter to Linear.

 


 

Here's how the vortex looks with those changes.

The motion of the smoke is now much more interesting.

In the next step, we are going to animate the Outgoing Velocity so the dust devil can slowly dissipate after a few seconds of simulation.

And then, the only thing left to address is the lack of random swirls you usually see in real-life dust devils. We will try to recreate those with a Phoenix Turbulence.

 


 

Select the Phoenix Source and animate the Outgoing Velocity to have a value of 500 from Frame 0 to Frame 120, and then from a value of 500 to 0 over the span of frames 121 to 200.

Be sure to also set the tangents of the animation curve to Linear.

 

 

Phoenix Turbulence for more swirls


Create a Helpers → Phoenix FD → PHXTurbulence.

Set the Turbulence Strength to 40.

Next, set the Turbulence Size to 900 and Fractal Depth to 5.

The Strength is self-explanatory - the higher the strength, the stronger the effect of the turbulence force on the simulation.

The Size is increased to 900 to get large-scale swirls. You can compare this to the Simulator size in the Grid rollout. The Fractal Depth works like a layering option. A fractal depth of one will give you a single noise layer. A fractal depth of two will give you 2 layers - the first with whichever Strength value you used and a Size of 900, and a second one multiplied on top with half the Strength and Size of the previous. In other words, the higher the Fractal Depth is, the more layers there are in the noise, and the more detail there is.

You may preview the Turbulence by including it in the Preview → Forces Preview Set. Don't forget to disable the GPU Preview because it overrides the Voxel Preview and the Forces won't show up in the Viewport.

 


 

Finally, open the Output rollout and enable the export of Velocity and Wavelet Grid Channels.

The Velocity channel is required for rendering with Motion Blur. It is also needed when slowing down a simulation from the Input rollout through the Precise Tracing blending method. In the final section of this tutorial we take a look at reducing the speed of the smoke and re-simulating for extra detail.

The Wavelet channel is used when Wavelet Turbulence is enabled under the Resimulation rollout. The wavelet channel holds the 'wavelets' which you can think of as very small scale detail produced by the velocity that is amplified during the re-simulation process.

 

Hit Simulation rollout → Start to cache the base simulation to disk.

 

 

Rendering


Open the Phoenix Simulator → Rendering rollout and click the Volumetric Options button. The Volumetric Options contain the shading parameters for rendering fire and smoke. You can think of that window as the Phoenix Volumetric Shader.

The Fire rollout → Based On parameter is set to Disabled.

 


 

Under the Smoke Color rollout, Based on is set to Constant Color.

The Constant Color is set to RGB [ 187, 164, 124 ].

The External Scatter Multiplier is set to 0.6 to give the illusion of thickness of the smoke.

 


 

Under the Smoke Opacity rollout, Based on is set to Smoke.

The Minimum Visible Opacity is set to 0 to allow very fine (low density) smoke to appear in the rendered image. Note that this setting affects render-time significantly so reducing the opacity to 0 may unnecessarily (depending on your scene setup) slow down V-Ray.

The Opacity diagram is tweaked, with the following settings:

  • Point 0 at X/Y [ 0, -0.0001 ]
  • Point 1 at X/Y [ 0.03, 0.0003 ]
  • Point 2 at X/Y [ 0.3, 0.015 ]
  • Point 4 at X/Y [ 2, 0.3 ]

 


 

A V-Ray Sun and a V-Ray Physical Camera are used for rendering the effect.

The Sun Filter Color is set to White, with the Mode set to Override.

The Sun and Sun Target positions are as follows:

  • Sun XYZ: [ -1500, 365, 2180 ]
  • Sun Target XYZ: [ 0, 0, 0 ]

The Camera and Camera Target positions are:

  • Camera XYZ: [ 0, -3350, 640 ]
  • Camera Target XYZ: [ 0, 0, 640 ]

 


 

Here's a Viewport Preview Animation of the simulation before re-timing.

 

Slowing down the simulation and adding Wavelet Turbulence


Suppose you want to slow the simulation down twice.

To achieve that, you need to take care of two things:

  1. You need to slow down the motion of the objects in your scene.
  2. You need to slow down the Phoenix simulation by reducing the Play Speed from the Input rollout of the Simulator.

To slow down the animation of your scene objects, open the Time Configuration window, click the Re-scale Time button and set the Length to 400 (assuming you are working with the provided scene file which has a total animation length of 200).

The total duration of the animation will now be doubled.

It's very important to stress that this will not affect the Phoenix simulation.

If you have 60 frames simulated, Re-Scale the timeline to 120 frames and hit the Play button, the simulation will play from frame 0 to frame 60, just like before the Re-Scaling.

The play speed of a Phoenix simulation can only be tweaked from the Input rollout of the Simulator.

 


 

Now that the animation speed of the scene objects is reduced in half, we need to do the same for the Phoenix simulation.

Open the Input rollout and set the Play Speed to 0.5

 Set the Frame Blending method to Precise Tracing.

The Play Speed parameter works as a multiplier for the Playback speed. When set to 1, it reads one cache file for each corresponding timeline frame. If the value is not precisely 1, Phoenix generates an intermediate frame by blending the two adjacent cached frames.

This Blending process works really well with FLIP (water) simulations as FLIP particles are fixed points in space, and consequently, the in-between particle positions can be easily determined from the previous and next frames' cache files.

For Fire/Smoke simulations, however, more advanced techniques are required to achieve a slow-down effect.

Reducing the Play Speed and using the Precise Tracing method is usually good enough for Smoke simulations but we're also looking to add some extra detail with the Wavelet Turbulence options. Since the Resimulation process reads the cache files as specified in the Input Time Bend settings, this will recalculate the dynamics at the reduced speed and provide you with a smoothly slowed-down simulation and extra detail in the smoke.

 


 

Open the Resimulation rollout and enable Grid Resimulation.

Note that when you enable Resimulation, Phoenix will try to read the cache files for preview and rendering from the Resimulation Output Path instead of the Input path. Don't be alarmed if the Viewport goes blank - you can always switch back to the original cache files by simply disabling the resimulation.

Set the Amp.Resolution to 1. This parameter is used to increase the resolution of the grid for the Resimulation process only (just like the Cell Size in the Grid rollout controls the simulator's resolution). When set to 1, it will double the amount of voxels for each axis of the container, essentially doubling the resolution of the grid and increasing the number of voxels 8 times (2 x 2 x 2 because each of the 3 axes is doubled).

Enable Use Time Bend Controls and set the Method to Slow Down. This option works great when trying to produce a slower version of your base simulation, as is the case with our fire.

Set Wavelet Strength to 3. Wavelet Turbulence is used to generate wispy detail during the resimulation process.

If you want to use Wavelet Turbulence, you need to Enable Wavelet Grid channel export from the Output rollout of the simulator before simulating the original simulation.

Note that Resimulation with Wavelet Turbulence will take effect only if Amplify Resolution is above 0.

 


 

Set SimulatorDynamicsSteps Per Frame to 1 so you don't lose detail in the re-simulation process. If you're following along the tutorial, it should already be set to 1.

In general it's not recommended to change any Dynamics settings between the original simulation and Time-Bend Resimulation because all of them will affect the resimulation.

In order to get the closest match, both the original and resimulation should be run with 1 Step per Frame.

 


 

That is all.

Hit Start and wait for the resimulation to cache to disk.

 

 

Final Result


For the final result, a few adjustments have been made to get a prettier render.

The V-Ray Sky texture is disabled from the Environment and Effects window (hit 8 to open it) → Background → Use Map.

The Sun Filter Color is set to White, and the Color Mode to Override.

A Dome Light with default White color and Intensity of 0.2 is used to illuminate the areas of the smoke which are in shadow.

Table of Contents