This page provides a tutorial on creating a Dust Devil simulation with Phoenix FD in 3ds Max.
This is an Intermediate Level tutorial. Even though no previous knowledge of Phoenix FD 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.
Requires Phoenix FD 3.11.00 Official Release and V-Ray Next Official Release for 3ds Max 2015+. If you notice a major difference between the results shown here and the behaviour of your setup, please send an email to email@example.com
The instructions on this page guide you through the process of creating a Dust Devil effect using Phoenix FD and 3ds Max.
We start off the tutorial by creating a poly plane and using the Large Scale Smoke preset to generate the Phoenix FD Source and Simulator. The funnel shape of the dust devil is achieved through the use of an animated 3ds Max Vortex force. A large-scale Phoenix FD Turbulence force is used to further break-up the smoke shape. Finally, we tweak the Volumetric Rendering parameters of the Phoenix FD Simulator for a final render. A Time-Bend Resimulation guide is also provided as an extra option at the end of this tutorial.
The Download button below provides you with an archive containing the start and end scenes, as well as a Phoenix FD Render Settings preset that you can use to quickly set up the volumetric shading options for a basic smoke simulation.
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 FD 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.
The final scene consists of the following elements:
- 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.
- A Phoenix FD 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.
- A Phoenix FD Fire/Smoke Simulator generated by the Large Scale Smoke preset with some tweaks in the Grid, Dynamics and Rendering roll-outs.
- 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.
- A Phoenix FD 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.
- A V-Ray Sun Light for direct lighting
- A V-Ray Dome Light for ambient lighting
- A V-Ray Physical camera with minor tweaks for final rendering
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 FD (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 FD 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 FD Fire/Smoke Simulator and a Phoenix FD Fire/Smoke Source. The preset will automatically link the Plane to the Phoenix FD Source, adding it into the Source's Emitter Nodes list.
Phoenix FD 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:
- 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.
- The smoke emission is too symmetric and produces a mushroom - we resolve this by modulating the emission with a Gradient texture
- 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 FD Source.
Adding the Vortex Force
Create a Space Warps → Forces → Vortex force. Phoenix FD will automatically recongise 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 5.
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 FD 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 roll-out 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 were to 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 FD 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 FD Source and set the Temperature to 300.
The higher the temperature is, the faster the smoke will rise. Phoenix FD 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.
In the Grid roll-out of the Phoenix FD 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 roll-out 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 FD 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 FD 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 FD 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.
Reduce the Outgoing Velocity to 500 or so.
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 FD 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 FD 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 FD Simulator properties.
Phoenix FD Simulator Properties
Select the Phoenix FD Simulator and open the Grid roll-out.
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 roll-out 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:
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.
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 large-scale Phoenix FD Turbulence.
Phoenix FD Turbulence for more swirls
Create a Helpers → Phoenix FD → PHXTurbulence.
Set Strength to 250, 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 roll-out. 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 a Strength of 250 and 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 roll-out 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 roll-out 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 roll-out. 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 roll-out → Start to cache the base simulation to disk.
Open the Phoenix FD Simulator → Rendering roll-out 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 FD Volumetric Shader.
The Fire roll-out → Based On parameter is set to Disabled.
The provided project files contain a phoenixFD_DustDevil_finalRender_Preset.tpr rendering preset. You can load a Phoenix FD Rendering preset from the Simulator → Rendering → Render Presets → Load from File... option.
A render preset will simply overrite the settings in the Rendering roll-out. This allows you to quickly set up the shading options and start tweaking.
Under the Smoke Color roll-out, 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 roll-out, 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: [ -1490, 366, 2180 ]
- Sun Target XYZ: [ 13, 2, 0 ]
The Camera and Camera Target positions are:
- Camera XYZ: [ -231, -3340, 553 ]
- Camera Target XYZ: [ -30, -4, 620 ]
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:
- You need to slow down the motion of the objects in your scene
- You need to slow down the Phoenix FD 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 FD 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 FD simulation can only be tweaked from the Input roll-out 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 FD Simulation.
Open the Input roll-out 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 FD 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 roll-out and enable Grid Resimulation.
Note that when you enable Resimulation, Phoenix FD 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 roll-out 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 roll-out 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 Simulator → Dynamics → Steps 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.
For the final image, 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. Instead of relying on the Sun's color to give a sand-like appearance to the Smoke, the Smoke Color parameter is tweaked instead.
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.
Finally, the Vortex Force was tweaked to make the smoke disperse more. The Axial Drop and Orbital Speed are set to 6, and Radial Pull to 1.5.