Performance going downhill with latest versions of Unity, Post Processing and SRP

So I started a new mobile project in 2020.1 with Universal RP.
While prototyping and setting up basic systems I did my first build and deployed to mobile. I was very disappointed when almost an empty scene with very basic post processing (just a color lookup) couldn’t keep 60 fps on mobile.
My previous project could run at 60fps with post processing so I decided to investigate.
It turns out that the performance was going downhill since Post Processing Stack V2 was introduced.

I’ve tested these scenarios:

  1. Unity 2018.4.3f1 built-in renderer:
  • Standard shader
  • Standard + Post Processing Stack V1
  • Standard + Post Processing Stack V2
  • Mobile Bumped Diffuse
  • Mobile Bumped Diffuse + Post Processing Stack V1
  • Mobile Bumped Diffuse + Post Processing Stack V2
  1. Unity 2020.1.0a13 built-in renderer:
  • Standard shader
  • Standard + Post Processing Stack V1
  • Standard + Post Processing Stack V2
  • Mobile Bumped Diffuse
  • Mobile Bumped Diffuse + Post Processing Stack V1
  • Mobile Bumped Diffuse + Post Processing Stack V2
  1. Unity 2020.1.0a13 Universal Render Pipeline with built-in Post Processing
  • Lit
  • Lit + Post Processing enabled
  • Simple Lit
  • Simple Lit + Post Processing enabled

Test scene looks like this:

I tried to keep the quality and player settings as close as possible between projects. All materials use Diffuse + Normal maps. All PostProcessing profiles are only using a 16 LUT for color grading (StackV2 and URP versions set to Low Definition Range).

I’ve run the tests on Xiaomi Mi A1, and I’ve also checked on Nokia 6.1. The results were basically the same:

Oldest Unity 2018 works best with oldest Post Processing Stack V1. Switching to Post Processing Stack V2 results in FPS dropping by 10-15 (below 60).
Unity 2020.1 is visibly slower than 2018 using any Post Processing. I assume that a bit more complex scene, and it will be visibly slower without Post Processing as well.
Unity 2020.1 with URP and built-in Post Processing is the worst.

Wasn’t URP supposed to have like better performance than everything else?
How come that a 2-3 year old Unity runs better on mobile than anything currently does?
What’s up with PP Stack V2 being so much worse than PP Stack V1?
How come I can’t run the simplest scene with the simplest color grading at 60 fps on mobile?
I have so many questions and so much frustration…
What’s going on?

24 Likes

It is better performance but the settings in URP are not the same as the settings in other pipelines so it will run slower if you do the same settings. You should perceptually adjust them to look the same, then it will run faster. If it doesn’t run faster, Unity considers it a bug.

Pretty sure its a problem on your camera or post effects or setup.

1 Like

Here are the settings:

Here’s the camera:

Here’s the PP Volume:

1 Like

Which SRP options do you have to “perceptually adjust”? There are not that many options, I turned everything off or dropped as low as possible for the tests. Are there any other places I should check for options?

Stop NaN can be unticked from camera. but I don’t see any bad settings there. I can only assume somehow the resolution changed.

This is bad news for such a simple example. Perhaps Unity can look into it? This is only with post effects on right?

1 Like

Make sure only one volume is in scene for testing. It can be easy to layer them these days (for example a sneaky default Unity one might be present too).

Stop NaN have almost no effect. Tried with and without it.
There’s only one volume, yes. I’ve checked.

Please report a bug :frowning:

1 Like

1 Disable Stop NaN
2 In URP Unity force depth pre-pass when post processing is enabled, even if you don’ using depth based effects.

1 Like

Sorry, I’m not exactly sure how to enable depth pre-pass? Is that the “Depth Texture” checkbox in the URP profile asset?
I tried to enabled it just now - the FPS with post processing remained the same. The FPS without post processing dropped below 60, so it doesn’t seem feasible to keep it 60+ with DepthTexture and PP enabled.

And by the way when the Depth Texture checkbox was disabled in URP profile asset, the Depth Texture option on the camera said “On (Forced due to Post Processing)”. So it seems it was being forced all along.
Also, for some reason even if I disabled Post Processing on the camera, the “On (Forced due to Post Processing)” doesn’t change.

Try to disable shadows. Shadows force depth pre-pass too.

Also, AFAIK, URP on Android does an extra blit if you use post atm (although it will be fixed sometime in the future).

1 Like

Yep although this isn’t really a huge problem unless in VR, as it prevents certain other features like foveated rendering from working.

Shadows were disabled in all tests.

I’ve reported a bug with all the test projects zipped.

Not really sure what to do next…

3 Likes

Make sure to post a link here when/if the issue goes up on issue tracker.

1 Like

thanks for sharing this
Can you please include 2019.1 or 2019.2 in your tests?

Just finished testing 2019.2.14f1. It showed exactly the same results as 2020.1.
I believe 2019.1 won’t be much different.

There is a need for some serious improvements right now with mobile in general, but especially with mobile VR. It is very hard to get post processing working with mobile VR, and even harder to get it working at a high frame rate. Some people suggest not using any post processing, but post processing really helps certain visuals.

Similarly, mobile VR has the option to use Multipass, Single Pass, or Single Pass Instanced. However, Single Pass Instanced in nearly completely broken, and Single Pass does not work with most post processing on mobile. So mobile VR developers are largely stuck with Multipass, which is the least performant option.

And has anybody ever gotten Vulkan to work with any Android device? I have not. I would love to be able to use Vulkan with mobile VR like the Oculus Go and Quest.

1 Like

To be honest I’m completely baffled. For several years SRP is one of the main buzzwords at any Unity event and there are tales of PC grade graphics available on mobile. Yet I create an empty scene with the cheapest post processing option and performance plummets through the floor. How come this wasn’t discovered and fixed ten times over?!?

How come Post Processing Stack v2 runs 10 fps lower than v1 out of the box on an empty scene, yet it becomes the standard for all Unity versions forward like everything is fine?

What am I missing?

18 Likes

I still wonder, why everyone are think that URP is a mobile optimized render pipe? Yes you can run boat demo on super phones at 30fps, but its’ mean nothing.