New Post-processing Stack (Pre-Release)

Hi,

For the past year we have been working on a range of Cinematic Image Effects. When we started this project we had two main goals:

  • To develop a range of effects that would look great and help your products look amazing.
  • To make them blazingly fast and super easy to configure.

So that’s what we have done.

We have now combined the individual post-processing effects into a single, easy to configure, asset driven workflow. In essence, we have an über effect stack. This is great for a number of reasons:

  • What used to take a full screen pass per effect now takes significantly fewer passes. Processing takes up less frame time and you can spend more time rendering other things.
  • The stack has a well defined order. This ensures that post-processing is configured in the correct way and effects are applied in the correct order.
  • Asset based profiles make it easy to share post-processing configurations between scenes or projects and are easy to change on a per-platform basis.

In addition to this, we have also added a few new features compared to the existing effects and rewrote some of them:

  • Full ACES-compliant HDR color grading pipeline
  • New and improved Chromatic Aberration
  • Lens dirt effect
  • Histogram-based Eye Adaptation
  • Temporal Anti-aliasing
  • Camera Grain
  • Extensive debug and monitor tools

We’re releasing this beta to the public ahead of schedule in order to get some initial feedback and make sure everything works as it is supposed to before the official release, especially on the wide range of platforms that Unity supports.

This feature is now available in open source on Github. If you don’t want to bother with git you can download pre-built packages here. It requires Unity 5.4.1+ or Unity 5.5b6+ (previous betas are incompatible).

Please also take a look at the quickstart guide and read the Known issues and Restrictions sections.

Have fun and don’t hesitate to send us feedback! And if you feel like contributing… Pull requests are welcomed :wink:

Unity Post-processing Team

28 Likes

Exciting stuff, great job on the release guys! Definitely a big improvement for built-in post-processing :slight_smile:

This is so good. Has anyone run performance comparisons between the old uncombined effects?

This is looking very niiiiice. :smile: One thing I’d like to mention for a future update, and I mentioned it on GitHUB as well, is that the SSR module isn’t taking background skybox information into account when it calculates reflection data. I hope this can be added to a future version as it is almost mandatory that skybox is included in reflections when viewing outdoor scenes.

2 Likes

SSR can’t reflect the skybox, it should be done using Reflection Probes or Planar Reflections (which can be used at the same time as SSR). There’s no way around it as the skybox is rendered after SSR is applied (which would be after the final geometry pass in deferred lighting).

Also keep in mind that SSR is a screen-space effect, meaning it has no way of knowing about something that’s not currently on screen. It’s not meant to provide complete reflections but to fake “contact” reflections.

@Chman interesting, I hadn’t considered that, but it makes sense. After doing some tests here I indeed see this to be the case… doing skybox through the reflection probe works very well.

This looks absolutely amazing - together with the upcoming incremental lightmapper it will bring Unity to new heights in visual quality.

I think I’d still take your SMAA over TAA though, TAA has the tendency to make everything vibrate like a Duracell bunny on a caffeine rush (at least it does so in Unreal).

I’m getting blocky flickering from SSR with rough surface

SSR seems to have an issue. On it.

1 Like

Thanks, since the flickering are really distracting and i’m not getting that in cinematic effect

A question with the asset based profile - am I still able to change post at runtime, such as colour grading? I had thought I could change it dynamically without a hard switch from a new profile… or does that not matter?

4 Likes

@Chman any chance we can get a debug mode for SSR just like in the old SSR version?
oh and i 2nd hippocoder question

Congratulations, you guys really nailed it this time, please stick to this workflow, don’t throw away your hard work.
It’s perfect, the asset workflow is brilliant, all the effects are previewable in scene mode
I hope this ends up in Unity as a built-in plugin-less feature.
Some glitches here and there:

  • Time-driven effects (like Grain) still don’t update in Game View outside Play Mode, this is a very old nuisance.
  • TXAA not working both in forward or deferred rendering, gamma or linear space. Other settings: D3D11, no SMAA, no HDR.
  • SSAO is not consistent in screenspace and depth, with the effect fading towards the edges.
    Some suggestions:
    -More effects!
    -Profile snapshots and drag and drop.
    Can’t wait for final release

Awesome !
I was waiting it for so long, thank you Unity !

Good question and I’d very much like to know that too. How would we go about toggling effects on/off or changing their values at runtime?

2 Likes

One essential that is Tone mapping is missing.

No it is not. It is part of grading now (as it should be).

1 Like

It’s fixed in the repository (if you don’t mind using Git) and will be in the next build.

Yes you can still change values at runtime via scripting and enable/disable features as you go. It will work just fine. We do have plans for the future to make this easier though.

That would require constantly updating the Game View, we don’t want to slow down the editor too much.

It’s TAA, not TXAA :wink: Could you give more details about how it’s not working exactly ?

That’s a screenspace effect. It only knows about what’s currently on the screen.

@Chman i’ll check the latest repo, thanks :slight_smile:

I’d like to point out that the eye adaption isn’t correctly adapting to scenes with an avg luminance above 1. Setting ‘max luminance’ to anything above 1 doesn’t change anything. Using the debug view, you can see the avg bar doesn’t go above 1 either. Removing the saturate in this code in EyeAdapation.cginc

float GetLuminanceFromHistogramBin(float bin, float2 scaleOffset)
{
    return saturate(exp2((bin - scaleOffset.y) / scaleOffset.x));
}

seems to fix it, without causing undesired side effects in my quick testing.