Afterburn Tutorial


By: Jon Carroll

Requirements:
Particle Storm 2.0 Pro or Jr, HyperVoxels 1.0 or 2.0. LightWave 5.5+
Sample Content location:


One of the most subtle and difficult effects to achieve in 3D software are the heat ripples caused by hot exhaust. Using Particle Storm 2 and NewTek's Hypervoxels plug-in, the effect is actually rather easy to achieve.

First, though, you need to study the properties of the heat source you are trying to reproduce. In this tutorial, we will be duplicating the extremely hot exhaust coming off of a turbojet or turbofan that is used in most modern fighter jets. It should be noted that commercial jet transport aircraft use much larger fans and smaller, cooler cores, which means the ripple effect would be much less apparent. (See sample images below.) Also note that 'stealth' aircraft use methods to disperse their exhaust and mix it with cooler air faster, thus making their ripple effect much subtler and shorter duration.
 
(Click for larger image)
(Click for larger image)
B-2 Spectre on takeoff. Wide, subtle exhaust stream.
EF-111A Raven on takeoff. Harsh, 'thick' exhaust stream.
There is a sample model of a jet nozzle (jetnozzle.lwo) supplied with PS2. If you load it into modeler, you will note that the inside walls of the nozzle are smooth. This is to keep any particles from becoming 'trapped' in the nozzle and this same object will be used for a collision detection effect in Particle Storm. Alternately, you could use a more accurately detailed nozzle with a lower resolution version for the collision object. I also created a separate object for the afterburner… but you can Boolean them together if you like.
 


The nozzle

The afterburner

The emitter object
 

You will need to decide on what your emission surface will be for two effects: first the heat ripples, and second, the fire from the jet itself. I decided to use the back of the afterburner as the emission surface and have provided that as a separate object as well.

The amount of visible fire from a jet exhaust, and the accompanying heat ripples, vary according to how much thrust the aircraft is producing (the throttle setting). If you wish, you can use a null object in the scene (preferably parented to the jet) that represents the throttle setting, and vary things like the lifetime of the particles and their number by the position of this null.

Load the nozzle and afterburner objects into Layout. Add a light source to the scene, name it Engine Glow,  parent it to the nozzle, and move it so it is just behind the afterburner object. Parent the afterburner object to the nozzle and save the scene under a unique name

Start up Particle Storm 2….

Create two particle groups. In my example scene, these are called 'fire' and 'heatripple'. While you don't need an extraordinarily high number of particles for the scene since Hypervoxels and Steamer are producing the actual effects, you still need enough to make a good effect. I used 1000 particles for each. Set the effect file base to whatever directory you wish the .psm files to be recorded to, and name them appropriately.

Leave the Recycler controller that was created by the default scene, but delete the Gravity controller.

Create a fountain emitter and name it 'fire'. Set it so that 'fire' is the only Affected Particle Group. Set the source to 'LW Object Faces' and load the burner emitter object as the emitter. Turn on the 'Use Normals' switch to make sure the particles will be headed in the right direction. Since the fire effect from the afterburner needs to be a fast, rippling effect, set the release rate fairly high. Set the 'Initial color' to a deep orange-red. Remember the settings for this red color for later. Since the fire will be moving fairly fast, I set the velocity to a low of 7 m/s and a high of 12 m/s. Leave the minimum release angle at 0 degrees and set the maximum release angle to 25 degrees. Make sure 'Use Strands' is turned OFF.

Create two instances of collision detection. Name one 'fire nozzle collision' and the other 'fire burner collision'. Go into each instance of collision detection and make sure that 'fire' is the only particle group turned on for that instance. Do the following for both instances: set Elasticity and Roughness to 20%, and set color duration to 0 s. For the instance labeled 'Fire Nozzle collision', load the jet nozzle object as the collision object and parent it to the same Layout object. In this instance, also set the 'avoid time' of the collision to about 0.3s and set the avoid strength relatively high. This will make the nozzle shape the particle flow, and make the particles avoid the nozzle by approximately the same distance we will later use in width for the Hypervoxel effect. For the instance labeled 'fire burner collision' load the afterburner object as the collision object and parent it to the same object in Layout.

Make a copy of the 'fire' fountain emitter and rename it 'ripple'. Change the Affected Particle Group to 'heatripple'. Since the heat ripple effect will be a much slower effect reflecting the turbulence in the superheated exhaust, the release rate can be set to about a third of the rate used for 'fire'. Also, set the velocity for the same rate. I used 10 m/s since the heat ripples will be expected to cover more space. Since you need to keep the particles from scattering too far, set the maximum release angle to 20 degrees. The color setting doesn't matter here since the colors will be set by Hypervoxels.

Create a Death Wish controller and name it 'fire death'. Set the Affected Particle Group to 'fire'. Since the 'fire' particles will need to recycle fairly fast, set it to death by 'Age', the Death Value to 0.04, probability to 100%, and fade to 0.01.

Make a copy of 'fire death' and rename it 'ripple death'. Change the Affected Particle Group to 'heatripple'. Change the 'death value' to 1 and fade to 0.1.

Create a shader controller and call it 'fire shader'. Set it to affect the 'fire' particle group. Make a color gradient that goes from a brught orange at 0 to yellow at 0.1 to a bright whitish orange at 0.2.


Frame 18 of the finished scene. Click for a larger image.

Create the effect object for both particle groups and record the PSM files.

Add the Particle Storm objects to the scene with PSPlay and wait for the scene to reload in LightWave.

Apply the HyperVoxels Particles plug-in to the heat ripple object, and apply the Steamy Particles plug-in to the fire object. Set the HyperVoxel Particles plug-in to receive Size and Alpha channel data, and set the Steamy Particles plug-in to receive Color and Alpha channel data.
 
(Click for larger image)
Add the following pixel filter plug-ins in this order:
HyperVoxels
HyperVoxels Doubler
Steamer
Steamer Doubler

Save the scene.
 
Frame 19 of the scene in Layout.
 
Go into HyperVoxels and activate the heat ripple object. If you set the HyperVoxel Particles plug-in, it should say that the particles have been found. Set the radius to absolute sizing, and set the size to 0.4. This will create a convincing effect, and ye,s the heat ripple particles should always end up no closer than this distance because of the avoidance settings we made in PS2. You may want to set some random size variance for a more 'natural' look. Set the object color to a medium dark grey, this will give the ripples a faintly 'smokey' effect. Set luminosity to 0%. Make diffuse a gradient varied by incidence angle... 100% at 0 and around 60% at 90. Set specularity and reflecitvity to 0. Set transparency between 99 and 100 depending on how oily you want the effect to appear.

Also, you can optionally vary the transparency based on incidence angle if you want, with the 'thicker' parts of the stream to be less transparent. If you are going to try this, I suggest a gradient based on incidence angle with about 99% transparency at 0 degrees and about 95% transparency at 90 degrees. The refractive index varies according to which type of engine you are trying to duplicate, but I have found 1.03 to be a good general setting. A good range to work within is 1.02 to 1.05. Under Advanced Settings, raytrace mode to single refraction, and leave the recursion depth at 7. If you want a slightly better-looking effect, you can set it to 'full refraction' instead, but it will take about 1/3rd longer per frame to render. HyperVoxels 2 users should note that this is using 'Surface' as a render selection, not 'Volumetrics'. No hypertexture is applied. Note that HyperVoxels does NOT preview refraction.
 
HyperVoxel Settings (click for larger image)
Close HyperVoxels and go into Steamer. Activate the fire object in Steamer. If you set the Steamy Particles plug-in, it should say that the particles have been found. Object color is inconsequential since the Particle Storm shader will supply that data. Set the Active Light to the Engine Glow light you created earlier. Steamer should have automatically recieved a size setting of around 0.2. Turn off auto-sizing, but let it keep this number. Leave the Falloff at 2, and increase the samples based on your final render resolution. The fire should be fairly bright, but somewhat opaque, so set Luminosity to around 150% and set opacity to 25 or so. Turn on Fractal Noise and set it to settings you like. This will help make a more fiery effect in the final render.
 
Steamer Settings (click for larger image)
When time comes to render, this effect will take time to render. You need to turn on antialiasing to at least medium, turn on both motion blur and dithered motion blur. The finished effect is worth waiting for.
 
 
Click here for large still image (single refraction)
Click here to watch animation (single refraction)
 
Click here for a large still image (full refraction w/ transparency gradient)