How to Achieve Cinematic Quality With Post-Process Effects in Unreal Engine 4

Unreal Engine 4 Cinematic Quality Post Processing Cover

This post is based on the “Achiev­ing cin­e­mat­ic qual­i­ty with post-process effects in Unre­al Engine 4” webi­nar by Matthew Doyle from Epic Games.

For your con­ve­nience, here’s the Table of Con­tents.

First, let’s have a look at a sim­ple video that demon­strates quite a few post-pro­cess­ing effects lay­ered on top of one anoth­er.

In the video, you can see some vignetting, lens flares, light bloom, col­or grad­ing, expo­sure con­trols, and some oth­er effects. We’ll take a look at all of them, includ­ing ray trac­ing.

Unreal Engine 4 What is Post Processing

As the name sug­gests, post-pro­cess­ing is the last step in ren­der­ing a sin­gle frame inside UE4. Post-process effects (I’ll call them PPFX for short) are gen­er­al­ly in screen space, mean­ing they affect every­thing that you see on the screen. They can be tied either to a cam­era or to a vol­ume.

Unreal Engine 4 Adding Post Processing to a Map

You can add mul­ti­ple vol­umes to your scene, and each of them can have unique set­tings. Vol­umes can over­lap, and you can set their pri­or­i­ty. They can be either bound or unbound. Unbound means that they affect the whole scene, while with bounds vol­umes you will have to be inside it to see the effects.

For com­par­i­son, here’s what the scene looks like with PPFX set up and enabled and with­out them:

To put a post-pro­cess­ing vol­ume in the scene, find it in the Modes pan­el, under Visu­al Effects or Vol­umes sec­tions. Or sim­ply search for “post”. Then drag it into the scene. To make it affect the whole scene, look for the “Infi­nite Extent (Unbound)” check­box in the Details pan­el.

Lens settings

The first sec­tion of the set­tings is called “Lens”. There are sev­er­al sub-sec­tions there. We won’t touch upon the Depth of Field, because it’s best con­trolled from the cam­eras, not PPFX.

Unreal Engine 4  Lens Options

Bloom

Let’s start with Bloom. To clear­ly see the effect, find a bright object in your scene, such as the sun. There are two bloom meth­ods: Stan­dard and Con­vo­lu­tion. Stan­dard one is best used for real-time sit­u­a­tions, like game­play. Bear in mind that while Con­vo­lu­tion gives a cin­e­mat­ic qual­i­ty bloom in Unre­al Engine, it is best used in cin­e­mat­ics as it is too expen­sive for games.

You can con­trol the bright­ness of the bloom with the Inten­si­ty para­me­ter. Thresh­old sets how bright a pix­el needs to be to emit bloom. Advanced set­tings let you fine-tune both Stan­dard and Con­vo­lu­tion blooms.

Exposure

By default, UE uses Auto Expo­sure His­togram as the Meter­ing Mode. It allows for the “eye adap­ta­tion” effect, where you can go into the dark­er sec­tion of your scene and it will become brighter over time.

If you want to lock auto-expo­sure to a cer­tain val­ue, you can set both Min and Max Bright­ness to 1, for exam­ple.

Unre­al comes with a his­togram visu­al­iza­tion tool. Just select Show -> Visu­al­ize -> HDR (Eye Adap­ta­tion):

Unreal Engine 4  Exposure Histogram

The blue val­ues rep­re­sent the dark­er parts of the scene, green — mid-tones, and red — high­lights. You can see our cur­rent expo­sure val­ue with the white line, and the blue line (behind it on the screen­shot above) is the expo­sure tar­get. If you reset the min/max val­ues, you will see how the white line goes to the blue tar­get as you move your cam­era around. You can set the speed at which the cur­rent expo­sure val­ue moves towards the tar­get (whether left or right) by chang­ing the Speed Up and Speed Down para­me­ters.

Of course, you might want to select the Man­u­al Meter­ing Mode. If you select that, you will notice that the entire scene is now very dark. You will need to do three things:

  • Cam­era set­tings (the sec­tion in Post-Pro­cess­ing Vol­ume Lens set­tings). Set Shut­ter Speed to 100, ISO to 100 and Aper­ture to 15 for a typ­i­cal sun­ny day.
  • Lights. Select the Direc­tion­al Light and set the inten­si­ty to some­thing more real­is­tic, like 82000 lux for sun­light.
  • Rebake the lightmaps to see the results of any indi­rect light­ing.

This is use­ful if you want to reflect spe­cif­ic real-world pho­tog­ra­phy set­tings inside Unre­al.

Chromatic Abberation

Unreal Engine 4 Chromatic Abberation

The options for this set­ting are pret­ty self-explana­to­ry. Inten­si­ty con­trols how much RGB val­ues are sep­a­rat­ed, and the Start Off­set con­trols how far from the edge of the screen the effect starts. I sug­gest avoid using high Inten­si­ty val­ues, but adding chro­mat­ic aber­ra­tion nonethe­less as it gives your Unre­al Engine project less com­put­er-gen­er­at­ed and more cin­e­mat­ic qual­i­ty look.

Dirt Mask

Dirt Mask is essen­tial­ly a tex­ture that allows us to sim­u­late the dirty cam­era lens. Even if you put a tex­ture in there and set the Inten­si­ty to the max­i­mum 8, you might not notice the dif­fer­ence. This is because it works best with a strong bloom and lens flares.

Lens Flares

Unreal Engine 4 Post Processing - Lens Flares Options

With Inten­si­ty, we can con­trol how bright our lens flare is. Bokeh­Size allows us to con­trol how large the bokehs are. The Thresh­old here is sim­i­lar to bloom, con­trol­ling how bright a pix­el must be to emit a lens flare. And if you expand the Tints sec­tion, you can con­trol the tint of each indi­vid­ual Bokeh.

If you put your cam­era in a cer­tain posi­tion, you can see the noise com­ing from the lens dirt tex­ture:

Unreal Engine 4 Post Processing - Lens Dirt

Image Effects

There are cur­rent­ly two image effects in Unre­al: Vignette and Grain. For Vignette, only the Inten­si­ty para­me­ter is avail­able.

Grain Jit­ter and Grain Inten­si­ty allows us to add film grain and con­trol its amount.

Color Grading

When you do col­or cor­rec­tion, be sure to fol­low this work­flow to get the best results:

Unreal Engine 4 Post Processing - Color Grading Workflow

Filmic tone map­per inside Unre­al uses ACES — an indus­try stan­dard for film and TV. You should use it for a project-wide look. So once you’ve set it, you should­n’t change it again.

Film

Unreal Engine 4 Post Processing - Filmic Tone Mapper

The tone map­per is essen­tial­ly an S‑curve, which you can see on the screen above. There are sev­er­al parts to it that you can tweak. Slope con­trols the over­all shape of the S‑curve, the Toe con­trols the darks and the Shoul­der con­trols the brights. Black and White clips are used to con­trol the max­i­mum dark­ness and max­i­mum bright­ness respec­tive­ly.

When work­ing with the filmic tone map­per, it’s usu­al­ly a good idea to work with all three of thee para­me­ters, leav­ing black and white clips at their defaults.

Con­trol­ling the Slope con­trols the over­all con­trast of the image. To work with the Toe you’d want to find a dark area of your scene, and while look­ing at it you can adjust the para­me­ter to light­en it up. But it’s best to use small val­ues, as high­er will get a more washed-out look. The same goes for the shoul­der, but in this case, you’ll need to find a bright area.

White Balance

In this sec­tion, you have two para­me­ters: Tem­per­a­ture and Tint. Tint allows you to apply a glob­al HUE shift to the entire scene. Gen­er­al­ly, this val­ue should be left untouched, unless you’re going for a very spe­cif­ic tint of your scene.

For tem­per­a­ture, the best work­flow is to find a very white object in your scene and adjust the tem­per­a­ture so it looks white. Of course, you can tweak the val­ue to get warmer or cool­er effects.

Global, Shadows / Midtones / Highlights

Gen­er­al­ly, you’d want to start with the Glob­al set­tings and tweak them. After you’ve set every­thing to your lik­ing but still feel you want to change some parts of your image, like Shad­ows, for exam­ple, you can go down to these sec­tions and tweak the para­me­ters there.

Each of these sec­tions con­tains almost the same set of set­tings.

Unreal Engine 4 Post Processing - Color Grading Global Options

If you expand this sec­tion, you will see a col­or wheel with an Inten­si­ty slid­er under it that con­trols all three chan­nels, and to the right — indi­vid­ual slid­ers for each of the col­or chan­nels, plus the lumi­nance slid­er. The lat­ter con­trols the over­all inten­si­ty of the effect with­out adjust­ing the col­or chan­nels’ val­ues. You can also switch to HSV val­ues instead of RGB.

The Con­trast col­or wheel works in the com­ple­men­tary fash­ion. If you make your high­lights red-ish, adjust­ing the val­ue of the col­or wheel, your shad­ows will become blue-ish because they’re on the oppo­site side of the col­or wheel.

The Gam­ma con­trols our mid-tones. Adjust­ing this set­ting has the largest effect on the over­all col­or tone of the scene. The Gain con­trols the High­lights and the Off­set — shad­ows.

Rendering Features

Post-process Materials

The first sub-sec­tion here is the Post-Process Mate­ri­als. You can see the effect they cre­ate, for exam­ple, in this arti­cle.

Ambient Cubemap

Ambi­ent Cube­map is used to tweak the over­all ambi­ent light­ing. Sim­ply select the Cube­map Tex­ture, adjust its Inten­si­ty and you’re set.

Ambient Occlusion

The next sub-sec­tion is Ambi­ent Occlu­sion. To see it clear­ly you can visu­al­ize it. Switch the View Mode to Buffer Visu­al­iza­tion -> Ambi­ent Occlu­sion.

Unreal Engine 4 Post Processing - Ambient Occlusion

In its basic para­me­ters, you can con­trol its Inten­si­ty and Radius. The lat­ter con­trols how soft or sharp the AO appears.

You also have the option to enable Ray Trac­ing Ambi­ent Occlu­sion and set its Sam­ples Per Pix­el, mak­ing it more accu­rate. The set­tings from the Ambi­ent Occlu­sion sub-sec­tion will still apply if you enable RTAO.

The next sub-sec­tions are Glob­al Illu­mi­na­tion along with Ray Trac­ing Glob­al Illu­mi­na­tion. It con­trols the Glob­al Illu­mi­na­tion con­tri­bu­tion in the scene. By tweak­ing the Indi­rect Light­ing Inten­si­ty, you can low­er or boost the amount of indi­rect light­ing con­tri­bu­tion. To con­trol the qual­i­ty of our GI, we can tweak the Max. Bounces and Sam­ples Per Pix­el para­me­ters.

Reflections

Unreal Engine 4 Post Processing - Ray Traced Reflections

For reflec­tions, you have three sub-sec­tions with pret­ty self-explana­to­ry names: Reflec­tions, Screen Space Reflec­tions, and Ray Trac­ing Reflec­tions. In Reflec­tions, you can choose the type of reflec­tions you want to use and in the cor­re­spond­ing sec­tions, you can set the para­me­ters for the reflec­tions type you chose.

Screen Space Reflec­tions can work well in some cas­es, but they don’t work that great in oth­ers. With them, only the objects that are in the view­port are get­ting reflect­ed. So if we were to be to change the reflec­tion type, here’s what you’ll see instead of the image above:

Unreal Engine 4 Post Processing - Screen Space Reflections

It’s all because here, of all the objects that are “vis­i­ble” in the mir­ror, only the char­ac­ter is in the view­port, and only par­tial­ly. So the ray-traced reflec­tions give a more cin­e­mat­ic qual­i­ty in Unre­al Engine but are very expen­sive.

Translucency

Just as with the reflec­tions, there are two types of translu­cen­cy. The default one is Raster and the sec­ond is Ray Traced. Of course, the sec­ond one looks much bet­ter but is also very expen­sive.


That’ll be it for this arti­cle. I tried giv­ing as much infor­ma­tion in as lit­tle vol­ume as pos­si­ble. I hope it saves you some time and allows you to achieve a cin­e­mat­ic qual­i­ty using post-pro­cess­ing effects in Unre­al Engine 4!