This document assumes working knowledge of Lightwave and Particle Storm. Please refer to the Steamer information that is included on your CD for the really basic stuff, like how to add the plugin and activate an object.
Contents
What's New?
When to use Steamer
The Basics
General Techniques
Common Problems and Solutions
Faking it
Dan's Digital Demolition
Non-Steamer-Related Tips
Closing Thoughts
Let's start with the upgrade. Steamer 1.0, as released on the Lightwave 5.5 CD, was bug-filled and virtually unusable. Before you do anything else, download the latest Lightwave 5.5 patch from http://www.newtek.com, which includes an improved Steamer. Its new "Turbo" rendering feature cuts rendering time dramatically. The new version also operates seamlessly with Particle Storm and includes several new fractal noise types and rendering modes (see below).
As far as this text is concerned, I've had the privilege to speak with the developers and other professional users who were willing to share their insights, in addition to my own growing experience with Steamer. Some of the information on my earlier pages was bad advice or just plain wrong. I have tried to outline here the best strategies for accomplishing volumetric effects with the least amount of pain and frustration. As always, your mileage may vary.
True, Steamer is a wonderful plugin. But what does it really do well? For what effects is it the best choice?
Here is what Steamer is really good at:
Before I get into details, make absolutely sure that Steamer is required for your effect. Most applications of Steamer can be faked with semi-transparent polygons and fractal noise. You can save yourself huge amounts of time, effort, and a few hairs by sticking to the classic approaches.
I have two criteria for when to use Steamer. Both rely on the fact that Steamer provides a truly 3-D, volumetric effect:
2) The effect must show true depth and parallax. Again, the polygon approach is inadequate when dealing with dramatic side-to-side camera movement.
The Three Parameters
Steamer's fundamental controls are Luminosity, Opacity, and Attenuation. Luminosity is to Steamer as Diffuse is to surfaces; it controls the intrinsic brightness of the effect. Opacity causes light that enters the volume to darken towards black. Note that this is not quite like transparency: an effect with 100% Opacity will appear black, not clear. Attenuation darkens the central region of each particle and widens the brighter shaded area, useful for thick clouds or smoke.
As far as the brightness of your effect is concerned, the only thing that matters is the relative ratio of Luminosity and Opacity. The parameter with the highest numerical value will have the most dominant effect. A bright fog or mist needs high Luminosity, low Opacity, and low Attenuation. Dark, oily smoke requires low Luminosity, high Opacity, and high Attenuation.
Note that all of these values are per unit length, meaning that if you change the size of your effect in Layout, you will need to adjust the parameters accordingly. e.g. A 2-meter cloud must have half the opacity of a 1-meter cloud to be equally dark. Also, unusually large or small objects will require extreme values e.g. a 1km wide cloud may need Luminosity under 0.01.
Falloff, Render Mode, Samples, Clipping
Falloff determines how sharply the volumetric effect fades at its edges. A value of 1 creates a linear falloff. Higher numbers push the effect inwards, making a more gradual transition to transparency. Lower numbers flatten the effect into sharp, 2D blobs.
Steamer offers several render Modes. Additive, the only mode available in 1.0, is most useful for highly luminous effects like bright mist and fire. Maximum puts a limit on how hot or overexposed the effect can get. Darker effects like smoke benefit from this setting. The Blobby settings make the spherical nature of your particles more apparent. The only situation where I've used them before is for fluffy cumulus clouds.
As Steamer traces a light ray through your effect, it must periodically stop and make calculations for shadows, fractal noise, the Z-Buffer, etc. Samples controls how often Steamer will stop and calculate. Set this number as low as you can without causing aliasing; it is directly proportional to rendering time. Insufficient samples will show up as ugly, banded noise, jagged object intersections, and broken volumetric shadows.
Clipping is a way of limiting Steamer's attention to particles or fog that are near the camera. Any volumetric effect that is farther than this value in meters will not be rendered. This control doesn't usually have much use except for volumetric fog, where reducing it can make the effect less contrasty and more realistic.
Light and Shadow
You must designate a light source to see any Steamer effects, other than straight Luminosity. Shadows, however, are optional. Always create a dedicated light for your Steamer effects, as in the example scenes on your CD. If you don't need shadows to appear in your volume, then a simple distant light is fine. If you want shadowed volumetric particles, use a spotlight with a very large shadow map size, well above 1500. Smaller shadow maps tend to cause ugly aliasing artifacts (jaggies).
If the light itself will be the volumetric effect, then it should be a spotlight or point light. Turn off automatic sizing and use the manual controls. "Range" controls the radius of point lights. "Angle" is like your standard spotlight cone angle, and "height" controls how far the effect extends from the light source. Again, if you're using shadows, make sure to crank that map size WAY up!
Active lights can be negative, too. A negative volumetric spotlight casts beautiful shafts of darkness...
Back to volumetric particles. If you want anything other than flat, luminous particles, opacity must be set higher than zero. This will tell Steamer to take the density of your particles into account, producting a 3-D shaded look.
Normally Steamer calculates the shading of your effect based solely on the shadow map, disregarding the opacity of individual particles. Sometimes more detail is necessary, especially for thick clouds or smoke. If you enable "Inner Shadows," Steamer will take into account the shadow of each particle. This render-intensive modification is most useful in conjunction with intense fractal noise, as it will add subtle details to the filaments of gas. Use the "strength"setting to control the overall darkness of the shadows.
Advanced tip: Try projecting an image, or better yet, an image sequence through your active light. This relatively unexplored technique can be used for some really cool effects. Once I wanted to add more variation into a Steamer fog, so I made the active spotlight project good old Fractal Reflections.IFF. For best results, move the light so that it is pointed in the same direction as the camera, but slightly offset. Also make sure to use high sampling (at least 50) to aviod jaggies. Just as I write this, it occurred to me that projecting a Pyromania sequence into a volumetric cloud would be neat...
It's surprisingly simple: Give Steamer some points. Steamer renders a cloud of gas surrounding each point. That's all there is to it.
There are two ways to input points. First, Steamer can use the points from any regular Lightwave object. Or, you can create a Particle Storm. I will focus on the second method because it is more flexible, in that each point will have an independent motion path.
(A quick note on Particle Storm here: if you're serious about getting the most out of Steamer, upgrade to Particle Storm Pro. PStorm Lite lacks several vital features, greatly restricting the variety of effects you can accomplish.)
RULE #1: USE FEWER PARTICLES. WAY FEWER PARTICLES. A typical smoke effect will require less than 100. There are very few instances where you would want to use more than 1000 particles. Here's why:
RULE #2: THE PARTICLES THEMSELVES DON'T ADD DETAIL TO YOUR EFFECT. THEY ONLY TELL STEAMER WHAT VOLUME OF SPACE TO OCCUPY. This is a big mental block you must overcome. The particles are there for the sole purpose of shaping the effect. Don't add thousands of particles just because it looks nicer in the preview window. Let Steamer take care of the fine detail! Not following this fundamental principle will get you in serious trouble, and most likely eat all of your RAM in the process. Understanding this is the key to successful volumetric objects.
RULE #3: NEVER, EVER, EVER, USE AUTOMATIC SIZING. Autosizing gives most effects a very computery, cotton-ball look, and can cause the dreaded popping effect. The one circumstance where autosizing may work is if you're rendering a still frame and not an animation.
Things to keep in mind when creating your Particle Storm:
Finish the rest of the animation before you even think of touching Particle Storm. It is a big pain to go back and rerecord a particle system after you've changed the timing, moved objects, etc.
Parent your emitters to null objects in the scene. That way, it's much easier to see them and adjust their motion in Layout.
The Steamer effect usually covers a much larger area on screen than the Particle Storm Preview would indicate. A tight group of particles is best.
The particles only give a rough shape and movement to the effect; they don't add shading. I can't emphasize this enough. Leave the small-scale details to Fractal Noise...
Try to keep all of the particles onscreen at once. The emission rate should roughly match the death rate, so that you're not wasting memory on particles that are "in limbo."
If a fast-moving emitter creates particles in visible "bursts," go to the Project menu and increase oversampling. Sometimes values as high as 10 are necessary.
When you're trying to create a fan of particles, it is better to use a physically large emitter than a small emitter with a wide spread. A small emitter will cause many newly-born particles to overlap in the same space, which leads to sizing and overexposure problems in Steamer. In general, keep a tight group, but don't let too many particles concentrate on any one place.
Advanced tip: Instead of using one large Fountain emitter, try creating a cluster of small, almost point-like ones. That way, newly-born particles can be smaller, removing that blobby look, yet they'll still cover the same on-screen area.
If particles are dying or being born during the animation, they must be faded somehow to avoid a nasty popping effect. There are a few ways to go about this. In order of preference:
2) Give your active light a falloff, so that particles lose their illumination before they die. (Note that if Luminosity is greater than 0, particles will still be visible even outside the range of your light source)
3) Set up Steamy Particles so that the particles have 0 Luminosity and 0 Opacity near the emitter, then fade up as they move outwards.
This plugin is the link that sends Steamer information about your points. It must be applied before you can do anything with a volumetric object. Note that the instant you select this plugin, it will try to allocate a very large amount of memory. If you're conserving RAM, don't add Steamy_Particles until the last moment. On my 128MB machine, I can safely use up to 25,000 particles before Lightwave becomes unstable. But you're following my advice and not using anywhere near that many particles, right?
The most useful feature of Steamy_Particles is its ability to pick up Particle Storm information. Use PStorm's Particle Shader, including the Alpha channel, to set the color and opacity of your particles interactively. Them Steamy_Particles will use these values and bypass Steamer's limited color controls. An Alpha value of 255 will make the particles totally dissolved; 0 means completely visible.
Because the Particle Storm interface now works, the other feature Steamy_Particles (making a variation in the Steamer settings) is less important. Local Density is still useful for varying the luminosity of your effect, so that dense concentrations of particles don't get too hot, or lonely particles grow bigger and less luminous. Try a start/end range of 0.5 to 2.0, copy the normal settings, and play with size and luminosity until the particles look evenly exposed.
Occasionally Steamer will "forget" the Particle Storm data. If this occurs, save immediately and reload Lightwave. This is a good thing to do any time Steamer starts to behave weirdly.
Fractal Noise
Here is where your effect really starts to look good. Now that you have a basic shape, Fractal Noise breaks it up and adds character. You can turn a blobby mess into ominous smoke clouds or spectacular fireballs with the proper noise settings.
The most important values are Small Scale and Big Scale. Steamer calculates Fractal Noise in much the same way as surface textures: It starts with a large, fuzzy pattern and then adds smaller and smaller details to the noise. Small Scale controls the size of the smallest features. Likewise, Big Scale controls the size of the large base pattern. You will have to play with these settings a lot to get what you want (turning off draft mode in the preview window helps to see fine details). As a starting point, try values that are smaller than you would for a surface texture, such as 0.05m on a 1m object.
Try the various noise filters to see which looks best. You may have to increase amplitude and contrast quite a bit for the change to be visible. For really intricate, broken-up effects, you will want the fractal noise to range from completely transparent to fully opaque.
Local Coordinates makes the fractal noise stay attached to individual particles. Without this setting, it looks like the particles are traveling though a fixed volume of noise. With it enabled, the particles themselves appear to consist of fragments of noise, rather than blobby spheres.
It is very useful to parent the noise to a null object. You can stretch the null to give the noise a directional character, e.g. a null with size (1,3,1) might produce large vertical filaments of fog. Move the null around a bit to avoid stationary patterns.
The Z-Buffer Limitation
Steamer determines whether an object is in front of your effect by using the Z-Buffer, which stores the distance the the nearest surface for each pixel. Unfortunately, there is no way to account for partially transparent objects. As far as Steamer knows, all objects are either 100% opaque or 100% transparent. This will cause your effect to disappear behind translucent objects.
This also presents a problem if you plan to use edge transparency, glow-behind lens flares, or image-mapped polygons (a la Pyromania): Steamer will not render anything behind them. One solution is to render the scene in multiple passes, first the transparent objects only, then the Steamer effect, and then the rest of the scene. Make sure to have Steamer record an Alpha channel. Then it's just a matter of putting it all back together again. After Effects and Digital Fusion are ideal for performing the 2D composite.
Steamer Should Not Take Forever to Render! Really!
On a midrange Pentium, Steamer effects should require under thirty minutes to apply; the majority of them will take much less. If rendering time is driving you insane, you should probably rethink your approach. Is Steamer really necessary? Will a few polygons with fractal noise textures do the same thing?
That said, here are a few ways to cut down on render times. First, use fewer particles! Decrease sampling, and disable inner shadows. Reduce the shadow map size. Make sure that your dedicated light is not raytraced. Enable "Render 1/2 Res." Enable "no Antialiasing." And finally the no-brainer: move the camera so that your effect takes up fewer pixels!
Throughout the above sections I've been emphasizing how Steamer shouldn't be used for most effects. Here is a quick rundown of the alternatives; most of them have been used since the days of Lightwave 3.0 and before!
Fractal Noise is your Friend
In general, the best way to create gaseous objects with Lightwave is to use semi-transparent polygons and fractal noise. The simplest setup involves individual four-sided or disc-shaped polygons. Give each one a transparency map so that it fades out completely at the edges. Color it appropriately, reduce Diffuse to zero, and add some luminosity. Then apply fractal noise in Color, Luminosity, and/or Transparency to break up its appearance. Try using uneven texture sizes to strech the noise in various directions. Texture velocities and reference nulls can enhance the effect with motion. Play with the settings until you obtain a nice "slice of gas."
Once you get a good-looking 2-D effect, start layering more of the polygons on top of each other - the more, the better. The fake fog image above uses a total of seven additive polygons with fractal noise at various distances from the camera. If you use enough objects, it is even possible to create very cool parallax effects as the camera moves.
A variation of this theme is to put fractal noise on spherical or egg-shaped objects, e.g. for rocket exhaust. Make sure to enable edge transparency, and try adding the glow effect too.
Lens Flares and Particles
I won't go into much depth here because flares are so simple. Make sure to use many overlapping lights to create irregularities. Particle Storm Postprocess allows you to add thousands of lights in motion at once.
A soft "volumetric" halo effect is easy with Random Streaks: Turn Streak Intensity up to 10%, lower Streak Density to 10, and set Streak Sharpness to 0.1. Instant glowing rays!
Don't underestimate the power of regular particle systems, or even objects consisting of single-point polygons. Good-looking fire and sparks are not too difficult to accomplish. It helps to postprocess the particles in some way; try adding the SurfFuzz shader and glow effect. If you have access to 2-D compositing software, render the particles in a separate pass. Then perform a Gaussian Blur or Diffuse Glow filter on them. And since you're not using Steamer, feel free to go wild with tens of thousands of particles!
The great thing is, all these techniques require very little memory, and the rendering time clearly puts Steamer to shame!
Just knowing what all the buttons do is not enough to get results from Steamer. The included step-by-step tutorials will get you started, but I found the transition to advanced FX applications very difficult. To help with that step, here are a few rough outlines of how I use Steamer for pyrotechnics. Note that they aren't hand-holding tutorials; I left out many of the simple tasks like adding Steamy_Particles, activating objects, etc. Have fun!
Smoke Trails
See the missile exhaust at left in the helicopter image. This is an easy effect to accomplish with Steamer, and doesn't lend itself well to traditional approaches.
First, finalize the animation of your missile. Parent a null object to the rocket and move it to the exhaust port. Now you're ready for Particle Storm. Use at most 300 particles. Parent a Fountain Emitter to the null, and rotate it to the proper direction. Size the emitter so that it covers the appropriate area.
Enter a low emission velocity. The particles should exit the missile and then just hang in the air. Turn the emission rate way down, to around 10-50 particles per second. Your goal is one particle for every few screen pixels. Add some wind with turbulence to break up the stream.
Now set up the particle shader. The particles should be opaque the instant they are born, so use the first keyframe to establish their color (try off-white). Add another keyframe several seconds later with an alpha value of 255; this will fade them out gradually. Adjust Death Wish so that the particles live long enough to go completely transparent, and disable pre-death fadeout under both Death Wish and the Particle Shader. Tweak everything to your taste and record the animation.
Back in Layout, add a white distant light and dedicate it to Steamer (turn off diffuse and specular). Go into Steamer and activate the object. This is one instance where automatic sizing may give adequate results. Try a threshold setting of 2 or so. If particles start to get really huge, then switch back to manual sizing. Use a moderate amount of luminosity, moderate attenuation, and a little opacity. The exact numbers will depend on both the look you're going for, and the physical size of your objects. Add some fractal noise. Steamer's noise is always a trial-and-error thing. Just keep playing with the scale and amplitude values until it looks right.
If you get big, doughy blobs, there may not be enough particles. Cautiously add a few more until the effect becomes nice and uniform.
For fiery exhaust, use a semi-transparent ellipsoid with moving fractal
noise textures. Add a lens flare. Trying to do this with Steamer would
be a waste of time.
Burning Wreckage
Pieces of debris shoot out of the fireball, leaving a glowing trail that gradually fades to black as they fall under gravity. This is my attempt to recreate the look of another 3D package's burning pyro effects.
First, you need some ballistic motion paths. You could use Particle Storm on a group of five or so particles, or you could keyframe a few null objects by hand. The end result is a number of nulls that travel on projectile trajectories.
In Particle Storm, parent a Fountain Emitter to the first flying null object. The particle groups should each have about 100-200 particles, with deathwish and recycling off. These will become the volumetric trail of fire. Emission rate and velocity should be low. Make the emitter physically large and reduce the spread angle. This will generate a fairly tight yet random trail.
In the Particle Shader, make the first keyframe 100% dissolved (Alpha 255). Add another key just a few frames later with 0% dissolve. The particles will gradually fade in instead of popping. Continue to add keys, but make sure that the particles stay somewhat visible throughout their lifetimes. The color scheme should be fiery yellows and oranges; Steamer will take care of the darkening to black. Record the animation.
When the settings look good, clone the emitter and parent each one to a different null object. Add some minor variations if you want. You'll also need to create separate particle groups for each emitter.
Now in Layout, load up the particle objects and make sure they look OK. It's time to make some dedicated light sources for Steamer. You need one white point light parented to each null emitter. Turn off diffuse and specular. Here's the important part: give each light a falloff so that it fades out completely over about half the trail. The result is a light source that strongly illuminates the smoke at its tip, and falls off to nothing down the path. Give them a slightly dissolved lens flare to brighten the effect.
Enter Steamer for the finale. Activate all of the particle objects, and designate each of their respective lights. Use manual sizing with quite a bit of variation. Luminosity should be set high. It will control the brightness of the "flame" part. Add some moderate opacity too. This will give the unlit particles a smoky look. Now use fractal noise to fill in some finer details. Crank up amplitude and contrast to really break up the effect. Perform your trial-and-error routine on the scale values.
If you want to get really fancy, set up Steamy_Particles to add some attenuation and more opacity to particles far from the emitter to complete their smoky appearance.
Dark Smoke Clouds
The falling wreckage now emits billowing clouds of oily smoke. As I mentioned before, good smoke is Steamer's forte...
Add a null object wherever you want some dark smoke to appear. In Particle Storm, parent an emitter to each null. Size them appropriately, so that the particles appear over a rather wide area. Use about 100-500 particles per smoke group. Don't let the particles die; turn off deathwish and particle recycling. If the emitters are moving, then emission velocity should be very low; on a stationary emitter you'll need a higher value to kick the particles upwards. Add some wind pointing up. Try to confine the particles to a tight group. Visualize how big the smoke should be, and try to fill that volume on screen. Don't worry if the particles aren't very dense.
In the Particle Shader, make gray and black color keyframes. Have the particles gradually fade out, making sure the final keyframe has an Alpha value of 255. Record the system.
Add a dedicated light source. Use a white, shadow-mapped spot light. Adjust its position and cone angle so that it just barely covers the whole effect at its maximum extent. That way, you'll make best use of the shadow-map pixels.
Activate the objects in Steamer and designate the active light. Use manual sizing with considerable variation. Let your eyes guide you to the correct setting. Luminosity should be very low, opacity very high. Add attenuation to give the blobs of gas a shaded appearance. If you can stand the render time, try selecting inner shadows for really good-looking smoke. As always, fractal noise is the most important ingredient. Use a noise filter and high contrast to really break up those blobby cotton balls. Parent the noise to a null that slowly drifts upwards. Make sure to enable local coordinates.
Here are some miscellaneous Lightwave techniques that don't necessarily have to do with Steamer.
Keyframing Movement
Because Lightwave records keyframes in all of your motion channels simultaneously, it is very difficult to get a smooth motion out of a single keyframed object. The best way around this is a well-known trick involving null objects. I will describe it here primarily because I am really tired of seeing crappy motion paths. Everyone should use this all the time...
The idea is to separate out the motion into several components, usually movement and rotation, and optionally bank. Any moving object should be parented to a null, and this null should have a null parent of its own. The hierarchy will go: null <- null <- object. The top null in the hierarchy is for translation (X,Y,Z movement) keyframes only. Create heading and pitch keyframes on the second null only. Finally, the object itself will have the bank keyframes. It sounds tedius, but the extra control you get is well worth it.
If you still don't see why this is necessary, visualize the following situation: You have a spaceship that moves along a complex path, making a 360 degree roll along the way. Now say you need to change the motion path so that it moves slower at some points, and faster at others. The roll keyframes will be affected too, making a very uneven, jumpy motion. If you use the null technique, stuff like this will never bother you...
Camera motion is a similar matter. I actually use two more nulls for the camera, one at the top and one at the bottom of the hierarchy. The root parent null is used for "orbiting" camera motions. By moving the translation null outwards and then rotating the root null, the camera will move in a perfect circle around any point, with only two keyframes. The other additional null is for camera shake; I apply quick, random motions just to the final null, so that I can change the camera's orientation without dealing with hundreds of little "jitter" keyframes.
Flying Debris
Continuing in the explosives vein, here is a simple way to create flying debris and shrapnel. You'll need Particle Storm Pro, and an updated version of it too (get it at http://www.dynamic-realities.com).
Go into Modeler and make about five different small pieces of debris. They could be boxes, tubes, whatever. Just make them look like they were once part of the destroyed object.
Create a null object and place it in the middle of the explosion. Go into Particle Storm and parent the fountain emitter to it. Then figure out how many pieces of debris you want. I would suggest from 50 to 500. This becomes the number of particles in your particle group. Turn recycling off. Set the project's start frame to whenever the debris should emerge. Crank the emission rate way up so that all of the particles are blown out in a few frames. Play with gravity, wind, and collision detection to your heart's content. Record the animation.
Now make a new, temporary scene. Load up your debris objects. You need to give each one a single keyframe in a very out-of-the-way place (the objects will default to this position when they are playing "dead"). Now clone each one enough times so that you end up with the total number on which you decided earlier. Use the PostProcess plugin to assign particle motions to the objects (refer to your manual).
If the PostProcess results in a corrupted scene, you have an old version of Pscreate.p. Download a new one from http://www.dynamic-realities.com
Use "Load from Scene" to bring in the debris objects from the temporary scene. I recommend you do this step after the animation is complete, as your object list will get quite crowded!