5
\$\begingroup\$

How would I create a jet engine exhaust effect, as shown in the image from Fzero GX below.

Fzero engine exhaust

GLSL and OpenGL examples/solutions are prefered, though other resources are also welcome.

Requirements

  • The jet engine should have a straight exhaust flame, that does not bend when the vehicle turns.
  • Some color variations in the flame are desirable, due to flame temperature variations.
  • The flame is only seen in a view directly behind the vehicle, and slightly from the side.
  • The flame should move slightly and also become bigger/brighter when the vehicle is thrusting.
  • Performance is more important than physical correctness.

More inspirational images and a video of the desired effect:

f14 afterburner

\$\endgroup\$
  • 4
    \$\begingroup\$ One quick cheat: use two cones with their bases at the nozzles of the craft. Vary the height of these cones and have a texture scroll from the base to the cone's apex. This way, you avoid using particle systems (they're costly), but you can add them at the tip of the cone to emulate sparks or other incandescent stuff. I assume you know how to do all of this and assemble it yourself. If not, either google, post another question or wait for a complete solution :) (not just a suggestion) \$\endgroup\$ – teodron Aug 16 '13 at 13:11
  • \$\begingroup\$ Looks like you could probably create something like that using teodrons method with two cones that have textures with alpha layers or you could create a couple particle emitters. Unfortunately that is as helpful as I can be without more information (like how the exhaust should behave during the game (grow/shrink at certain speeds, bend with turn, etc.)) \$\endgroup\$ – Benjamin Danger Johnson Aug 16 '13 at 20:57
  • 1
    \$\begingroup\$ I think to get an result as good as in the video you linked, the only way is to use a particle system. \$\endgroup\$ – danijar Aug 25 '13 at 11:00
  • \$\begingroup\$ @danijar the video looks like it's using just a few textures with alpha blending or a 3D texture to exaggerate. Of course, a bit of post-processing bloom or toning may be involved, but that should in no way have any particles. \$\endgroup\$ – teodron Aug 25 '13 at 15:06
  • \$\begingroup\$ If someone reopens the question, I can describe an answer with my current solution. \$\endgroup\$ – Morgan Bengtsson Aug 26 '13 at 8:03
3
\$\begingroup\$

I can't provide you with specific code or a tutorial, because I've never done it before. But if you're at the stage where you're going to be trying different effects, you should be able to do the coding, but I'll tell you how I'd do it. It's also been a long time and no one has answered, so I hope this helps.

First, because you want:

  1. Straight exhaust
  2. Flame is only seen from behind and to the side
  3. Performance is important

I would go with a textured cone. Or maybe a cone + a cylinder. The texture could be animated somewhat if you really wanted; but most likely I would use my frag shader to offset the texture lookup coordinates in a repeating ring according to time. So this "ring" of offset texture coords moves down the cone+cyclinder over time and repeats a bit. Probably start with a function of sin. This would be like a heat wave repeatedly washing down the length of the exhaust. Maybe add some other offsets to give the whole thing a slight wiggle as well.

This will mean that from directly behind, you would see very little except a ring from the inside of the cylinder and the smaller cone nestled inside. So from behind it would basically be two circles.

As your view moves to the side you can see more.

Now, to make it non-visible from other angles you can just use the camera position in the frag shader to determine the view vector and change opacity accordingly.

These simple shapes would have more performance than particles.

As for the texture, I wouldn't actually use one. But it helps to think of the above with texture lookups (in my opinion). Instead, I'd just use a colour ramp in the frag shader to colour texels different colours based upon how far the are.

An additional variable, "thrust", could be used to determine how far down the colour ramp it should be sampled. This way, one end of your colour ramp is always going to have alpha 0. With low thrust, this alpha 0 part starts half-way down your cylinder. At high thrust the alpha 0 is further toward the tip.

The values closer to the rocket could be more orange or something.

Finally, I'd use the thurst variable to bring the overall luminance of the colour up. So higher thrust drives us closer toward a white-hot flame.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.