Rendering Jet Engine Exhaust
Team
- Jawed Karim
- Anders Hagvall
Overview
We wanted to reproduce the effect of looking through a mass of turbulent hot air as produced by a jet engine.
Physical explanation
Different temperatures inside the air mass result in varying air densities. The varying densities in turn change the index of refraction throughout the air mass. As a result, a viewer looking through the plume of engine exhaust sees a blurry and perturbed background scene.
Approach
The physically correct model for this effect is both complex and will most likely require long rendering times, so our approach was to see if we could reproduce the same effect using an approach that is less computationally expensive but still yields realistic-looking results. We treated the hot air as a new geometric primitive that is similar to glass, but whose index of refraction can be varied throughout the material.
Refraction mapping (Jawed)
To accomplish this we used a method similar to bump mapping, which we call refraction mapping. Rather than perturbing normal vectors during lighting computation according to a bump map texture, as in the case of bump mapping, refraction mapping allows one to vary the index of refraction of a material according to a refraction map texture during refraction vector computation.
Refraction map |
Result |
|
|
|
|
|
|
|
|
Implementation
I modified SpecularTransmission::Sample_f() to fetch the index of refraction from the refraction map when the refraction ray is computed. The index of refraction is scaled from 1.0 to 1.2, depending on the pixel value of the refraction map. I also modified the Fresnel computation to remove the material's color dependency on the ratio of the indexes of refraction of the internal and external materials. The term "(et*et)/(ei*ei)" in the equation caused the material to look brighter with a higher index of refraction. Since this was not a desired effect, I changed this ratio to always be equal to 1.0.
Refraction blurring (Jawed)
I found that the above approach was not sufficient, as it produced images that lacked the blurry appearance seen in the real-world. I added blurring to the effect by also shooting out multiple refraction rays, each jittered by a random amount, and averaging them.
Implementation
Jittering
Particle system (Anders)
To reproduce the turbulence shown in the image above, the index of refraction cannot merely be random. The pattern of the varying indexes of refraction must follow a turbulent pattern.
Implementation
Scene lighting (Anders)
Final image
(Empty scene without jet)
(Rendered scene with jet exhaust)